Проверка правильности формы php возвращает несогласованную ошибку

63
5

Я новичок в php, и это мой первый пост здесь, поэтому новый для написания сообщения также. Я использую скрипт для vaidate ввода формы. Часть скрипта выглядит так:

$data=$_POST;
print_r($data);

if(($data['dm']="No") and (!empty($data['dmsince']))):
$error=$error." dm mismatch N";
endif;

if(($data['dm']="Yes") and (empty($data['dmsince']))):
$error=$error." dm mismatch Y";
endif;

if ($error):
print $error;
$error="";
print $form;
else:
print "OK";

Я принимаю $_POST['dm'] через инструкцию select как yes или no.

Возникает проблема при обработке формы:

$_POST['dm']='No' и $_POST['dmsince'] пуст. Я получаю ошибку как 'dm mismatch Y'.

$_POST['dm']= Yes и $_POST['dmsince']='some valid date' Я получаю ошибку как 'dm mismatch N'.

Логически в обоих случаях я не должен ошибаться. Похоже, что он вводит одну из петель насильственно. Я также пробовал с elseif без результата. Что не так с этим кодом?

спросил(а) 2021-01-25T16:17:57+03:00 4 месяца, 3 недели назад
1
Решение
89

Обновите свои условные обозначения, чтобы фактически использовать операторы условного сравнения (например, == или ===). Прямо сейчас вы присваиваете $ data ['dm'] равным "Нет" в первом условном выражении и "Да" во втором.

Вы также можете захотеть написать свои сравнения следующим образом:

if(true === $var)
if("Yes" === $var2)

С помощью элемента вы сравниваете переменную с левой стороной. Таким образом, если вы случайно сделали что-то вроде:

if(true=$var)

PHP будет генерировать ошибку, а не такой случай

if($var=true)

Который бы установил $ var = true и всегда оценивал условное как истинное.

Это значительно облегчает отладку кода.

ответил(а) 2021-01-25T16:17:57+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема