Php if ($ _ POST) vs if (isset ($ _ POST))

Я имею простую форму, как показано ниже:

<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 рассматривает массив пар имен / значений входов.