Я имею простую форму, как показано ниже:
<form action="" method="post"> <input type="text" /> <input type="submit" value="SEND" /> </form>
Когда я пытаюсь получить данные, отправленные из этой формы, через if($_POST)
, я терпит неудачу, но когда вы пытаетесь использовать isset
, я получаю успех.
if($_POST){ echo 'a'; //Doesn't print anything. } if(isset($_POST)){ echo 'b'; //Prints 'b' }
Я предполагаю, что причиной этого является отсутствие атрибута имени в моей форме ввода, но я не могу понять, почему if($_POST)
и isset($_POST)
реагируют на разные способы в этом случае.
isset
определяет, установлена ли переменная и не является NULL . $_POST
всегда будет установлен и всегда будет массивом.
Без isset
вы просто проверяете, действительно ли значение правдиво. Пустой массив (который $_POST
будет, если вы не публикуете какие-либо данные) не будет правдивым.
isset определяет, установлена ли переменная, а не NULL, см. руководство: http://php.net/manual/en/function.isset.php
в то время как if($_POST)
проверяет $_POST
за то, что он является истинным.
в вашем случае всегда будет установлен $_POST
. Если вы делаете это с другими переменными, не связанными с формой, имейте в виду, что проверка if($var)
не зная, установлена ли она или нет, выдает уведомление. Проверка if(isset($var))
не будет вызывать уведомление.
Не связанный с вашим вопросом: если вы хотите узнать, есть ли данные в вашем массиве $_POST
вы можете попробовать работать с count($_POST)
, см. http://php.net/manual/en/function.count.php
Это связано с тем, что $_POST
представляет собой массив пар имен / значений входов, а в вашей форме ни один ввод не имеет никакого имени, поэтому он представляет собой пустой массив (значение false). Вы можете проверить его с помощью var_dump($_POST)
.
Попробуйте добавить имя в текстовый ввод для доступа к его значению:
<form action="" method="post"> <input type="text" name="somename" /> <input type="submit" value="SEND" /> </form>
Основное различие заключается в том, что параметр isset определяет переменную и не равен null для $ _POST не работает здесь, потому что вы не определяете здесь входное имя. $ _POST рассматривает массив пар имен / значений входов.