empty($_POST) === FALSE не работает должным образом

Я тестировал пустую функцию в php, но она не работает, потому что оператор if доступен независимо от того, является ли условие ложным или истинным.

<?php
    if(empty($_POST) === false){

        echo 'text';
}
?>



<form action="index.php"  method="post">
    Username:
    <input type="text" name="text">
    <input type="submit" name="submit">
</form>

Эхо выполняется, даже если ввод пуст.

Почему ??


person Ahmadz Issa    schedule 25.09.2015    source источник
comment
Что вы увидите, если var_dump($_POST) перед этим if утверждением? $_POST, вероятно, не пуст, как вы ожидаете.   -  person Rocket Hazmat    schedule 25.09.2015
comment
Даже если сами входы пусты, пустые значения все равно публикуются. Ваш if будет работать только в том случае, если под формой вообще не будет никаких входных данных.   -  person Jeff Lambert    schedule 25.09.2015
comment
Спасибо всем, я буду использовать var_dump($_POST), потому что я никогда раньше этого не видел!.   -  person Ahmadz Issa    schedule 25.09.2015


Ответы (2)


Это потому, что $_POST НИКОГДА не будет пустым после получения запроса POST от form с input значениями внутри него.

Если вы var_dump свой, вы увидите:

textarray(2) { ["text"]=> string(0) "" ["submit"]=> string(12) "Submit Query" } 

Отправляется даже ваш submit input (поскольку он является частью form). И даже ничего не получив, $_POST вернет пустой массив наборов, поэтому ни isset не является хорошим вариантом для проверки успешности или неудачи POST.

Вместо этого вам нужно оценить конкретное поле, например $_POST['text'], на предмет пустоты.

person al'ein    schedule 25.09.2015
comment
Большое спасибо, я использовал его в качестве учебных пособий, которые я смотрю. Вот почему я был в замешательстве. Спасибо. - person Ahmadz Issa; 25.09.2015
comment
@AhmadzIssa Подумайте о том, чтобы принять его ответ, нажав кнопку с галочкой под подсчетом голосов за этот ответ, если он помог вам решить вашу проблему. привет х) - person DirtyBit; 25.09.2015
comment
Мне пришлось ждать 5 минут, чтобы сделать это ^^. Спасибо. - person Ahmadz Issa; 25.09.2015

if(isset $_POST["text"] && $_POST["text"] !=null)

Кроме того, попробуйте использовать == вместо === == приведет к преобразованию значения $_POST, поэтому, если оно равно NULL, вместо этого оно будет оцениваться как ложное.

person Ralph Melhem    schedule 25.09.2015
comment
Что такое !-=? Я никогда не видел этого раньше - person al'ein; 25.09.2015
comment
!-=null? возможно, захочется взглянуть на это немного повнимательнее. И нет, не используйте ==. Это также сделает тест 0 равным, и пустая строка... оба из которых являются абсолютно допустимыми значениями отправки формы. - person Marc B; 25.09.2015
comment
Исправил опечатку, извините, ребята. Я предложил ==, потому что он оценивает $_POST, а не переменную сообщения - person Ralph Melhem; 25.09.2015