Как я могу проверить, является ли запрос обратной почтой на PHP, является ли это ниже?
if (isset($_POST["submit"]))
где submit
– это name
<input type="submit" />
Это будет работать, если вы знаете и ожидаете такую кнопку отправки на той же странице.
Если вы ничего не знаете о переменных запроса, другим способом является проверка метода запроса:
if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST')
Как указано в комментариях, специально для проверки обратной передачи, а не только для любого запроса POST, вам необходимо убедиться, что реферер является той же страницей, что и страница обработки. Что-то вроде этого:
if (basename($_SERVER['HTTP_REFERER']) == $_SERVER['SCRIPT_NAME'])
Вы хотите $_SERVER['REQUEST_METHOD'] == 'POST'
.
Твой – очень похожий, хотя и менее общий вопрос, чем этот .
Вероятно, это лучший подход, чем проверка переменной post. Во-первых, вы не знаете, будет ли отправлена эта переменная. У меня есть подозрение, что некоторые браузеры просто не отправят ключ вообще, если значение не указано. Кроме того, я бы волновался, что некоторые особенности PHP не могут определять $_POST
если нет POSTED-значений.
Если вы хотите иметь общую процедуру без зависимости «метод» (post / get) и любые другие имена элементов форума, я рекомендую это
<?php $isPostBack = false; $referer = ""; $thisPage = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; if (isset($_SERVER['HTTP_REFERER'])){ $referer = $_SERVER['HTTP_REFERER']; } if ($referer == $thisPage){ $isPostBack = true; } ?>
теперь if $ isPostBack будет true, если это postback, false, если нет.
надеюсь, это поможет
Да, это должно сделать это.
Осторожно, когда вы используете image
типа image
, они не будут отправлять атрибут name
в некоторых браузерах, и вы не сможете обнаружить POST. Несколько раз я ударил головой о стол, пока не осознал это сам.
Обходным путем для этого является добавление ввода hidden
типа.
Да. Вы также можете использовать if(array_key_exists('submit', $_POST))