У меня возникло странное явление в скрипте PHP, который я пишу. У меня довольно большая форма с большим количеством полей, флажками, переключателями и т.д.
В скрипте обработки есть много повторяющегося кода, где я проверяю, задано ли поле isset, и затем оно выводит предложение на основе этого поля.
Код, который я использую для обработки поля:
if(isset($_POST['testresults'])) { // test results Info
$testresults = $_POST['testresults'];
echo $clientInitials . " test results are " . $testresults . ". ";
}
Теперь, по некоторым причинам, из блоков 40+, которые идентичны этому (только с разными переменными и выходом предложения), есть два, которые выполняются, даже когда поле пусто/не установлено. В качестве теста я скопировал один и тот же блок кода в новый PHP файл, и он имеет такое же поведение, но это точная копия блока, который работает правильно, за исключением имени поля/переменной. Я вырезал-n-вставил имя поля из формы, чтобы убедиться, что не было орфографической ошибки или чего-то еще. В качестве другого теста, если я изменил строку на if (! Isset ($ _ POST ['testresults']), то он пропускает этот блок, как должен. Таким образом, он реагирует так, как будто есть данные в этом поле, даже если нет (и он делает это с еще одним блоком). Имена полей/переменные также не используются нигде в скрипте, и я проверил это, выполнив поиск по файлу.
Поле формы:
<input type="text" name="testresults" value="">
Я пробовал его с параметром "значение" и без него без изменений. Все остальные, которые работают правильно, имеют в них value = "".
Я попытался очистить свой кеш браузера, и нет никакой разницы, все еще это странное поведение.
Поэтому я думаю, мне просто интересно, есть ли предел для использования isset(), или я что-то упускаю?
isset()
проверяет только, установлено ли значение, а не пустым, поэтому он чаще используется для проверки того, действительно ли форма представлена в первую очередь, или для проверки переменных $ _GET. Функция, которую вы должны использовать, empty()
- или в вашем случае !empty()
:
if(!empty($_POST['testresults'])) { // test results Info
$testresults = $_POST['testresults'];
echo $clientInitials . " test results are " . $testresults . ". ";
}