chelkaz
@chelkaz

Это я не выспался или PHP глючит?

Почему простое условие отрабатывает не верно? Проверяю гендер через запрос.
Нужно отсечь запрос если параметр в запросе не равен M или F
if ($_REQUEST['pol'] != 'M' && $_REQUEST['pol'] != 'F')
{
    echo "Неверно задан пол: М или Ж - ".$_REQUEST['pol'];

}

Но парадокс в том, что так получается верно! Хотя знак стоит && - И
Но если ставлю правильный казалось бы знак or или || - ИЛИ
То не работает...
  • Вопрос задан
  • 270 просмотров
Пригласить эксперта
Ответы на вопрос 6
alsopub
@alsopub
Из двух вариантов:
1) PHP глючит
2) Автор не выспался
Ответ очевиден - "Автор не выспался" даже не глядя в задание.
Мало кому посчастливится вот так вот найти "глюк" в php.

А по сути - A!=1 ИЛИ A!=2 - всегда истинно, так как A не может принимать одновременно два значения 1 и 2 чтобы получилась ложь. Это не квантовые вычисления и не "переменная Шредингера".
Ответ написан
Комментировать
if($_REQUEST['pol'] != 'M'){
   // не мужчина
}
elseif($_REQUEST['pol'] != 'F'){
   // не женщина
}
else{
   // оно ))
}

Можете регуляркой проверить ))
if(!preg_match('/(M|F)/sm'), $var){
   // это оно
}
Ответ написан
Olej
@Olej
инженер, программист, преподаватель
Это я не выспался или PHP глючит?

Конечно не выспался ;-)

Хотя знак стоит && - И

И и только И !
Ответ написан
Ну почему же. Всё правильно: в вашей исходной формулировке: "пол равен не(м или ж)". Далее, пользуясь логическим выводом получаем "пол равен ((не м) и (не ж))", раскрываем скобки и получаем "(пол равен не м) и (пол равен не ж)"
Всё логично. Просто вы не выспались.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё правильно работает. Возьмите прямое утверждение "пол задан верно":
(sex == 'M') OR (sex == 'F')
И постройте от него обратное "пол задан неверно":
NOT((sex == 'M') OR (sex == 'F')) = 
NOT(sex == 'M') AND NOT(sex == 'F') = 
(sex != 'M') AND (sex != 'F')
Ответ написан
Комментировать
@springimport
Еще вариант:
!in_array($_REQUEST['pol'], ['M', 'F'])

p.s. pol => sex
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы