Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Несколько операторов && подряд
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Как проверить три и более переменных на пустое значение ?
Но условие должно выполняться только если все три переменные имеют пустое значение, а не одна или две из них.
В учебнике такая ситуация не описана, на странице http://php.su/learnphp/operators/?logical тоже.
Проверять две переменные получается.
if($a=='' && $b=='')
exit("Fields $a and $b are empty!");
А вот проверка трёх не получается.
if($a=='' && $b=='' && $c=='')
exit("Fields $a, $b and $c are empty!");
В чём ошибка ?
Bio man
Отправлено: 04 Декабря, 2011 - 17:41:01
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
написал специально and и &&, что бы донести вам суть приоритетов. and имеет ниже приоритет чем &&. то есть с начало будет проверено на истину переменная $b и $c и затем будет проверена переменная $a с предыдущем результатом. вот пример
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
Oleh пишет:
Но условие должно выполняться только если все три переменные имеют пустое значение, а не одна или две из них.
Oleh пишет:
А вот проверка трёх не получается.
Думаю автор понимает, что переменные должны быть пустые.
Bio man
Отправлено: 04 Декабря, 2011 - 17:52:55
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
Самогонщик пишет:
Думаю автор понимает, что переменные должны быть пустые.
тогда почему у него аномалии происходят? видимо какая то переменная не пустая
Champion
Отправлено: 04 Декабря, 2011 - 17:58:38
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Во-первых, если надо проверить, что хотя бы одна переменная пустая, то это не И, а ИЛИ. Во-вторых, Bio man написал глупости. Сейчас расскажу какие
Самогонщик
Отправлено: 04 Декабря, 2011 - 18:03:40
Посетитель
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
Champion пишет:
Во-первых, если надо проверить, что хотя бы одна переменная пустая, то это не И, а ИЛИ.
Oleh пишет:
условие должно выполняться только если все три переменные имеют пустое значение
Champion пишет:
Bio man написал глупости.
Ты о ленивости?
Champion
Отправлено: 04 Декабря, 2011 - 18:04:50
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Bio man пишет:
то есть с начало будет проверено на истину переменная $b и $c и затем будет проверена переменная $a
Во-первых, пишется "сначала". А во-вторых на самом деле сначала будет проверена переменная А, потом Б и Ц.
Приоритет у and ниже, чем у &&, но это сказывается не так.
А еще и and, и && прекращают выполняться как только накнутся на первый false, так что объяснения примеров некорректны.
Перечитал еще раз вопрос
Oleh пишет:
только если все три переменные имеют пустое значение, а не одна или две из них.
Ну тогда всё правильно у вас написано. В чем проявляется "ошибка" ? И что до условия происходит с А, Б и Ц? (Добавление)
Самогонщик пишет:
Ты о ленивости?
Да, о ленивости тоже. Мне сначала показалась, что его ошибка с приоритетами более неправильная, чем есть на самом деле. На самом деле она не большая)
Самогонщик
Отправлено: 04 Декабря, 2011 - 18:19:55
Посетитель
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Самогонщик пишет:
Расскажи как сказывается?
Когда вот в таком виде (!a() && !b() and !c()), то никак - какими бы там приоритетными не были && и and, когда других операторов нету, они все равно выполнятся слева на право.
А вот если есть, например плюсы или присваивание, то разница заметнее. Например
$a = true and false; // $a будет true
$b = true && false; // будет false
Самогонщик
Отправлено: 04 Декабря, 2011 - 18:30:06
Посетитель
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
Champion, спасибо, что поправил некоторых вещей не знал. да и примеры не удачные придумал. программисты по природе ленивы
Oleh
Отправлено: 04 Декабря, 2011 - 19:00:52
Новичок
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
Champion пишет:
Перечитал еще раз вопрос
Oleh пишет:
только если все три переменные имеют пустое значение, а не одна или две из них.
Ну тогда всё правильно у вас написано. В чем проявляется "ошибка" ? И что до условия происходит с А, Б и Ц?
В общем ситуация такая. Эти переменные на самом деле $log, $psw и $email. Находятся они на странице, например, "2.php". Методом POST им передаются значения из формы на странице "1.php" (регистрация), в которой есть три поля: 'Login' ($log), 'Password' ($psw) и "Email" ($email).
Я хочу проверить заполнены ли поля. Если они не заполнены, то выводится сообщение об этом и ниже - гиперссылка для возврата на страницу с формой регистрации.
Первым делом хочу проверить на пустоту все три поля, т.е. $log, $psw и $email, чтобы в случае если все три пустые, то выводилось соответствующее сообщение, что все три поля необходимо заполнить. А то если я сначала буду проверять $log, а при этом не заполнены ещё $psw и $email, то будет выводится сообщение, что незаполнено поле 'Login', хотя незаполненными ещё будут поля 'Password' и 'Email'. С переменными до условия ничего особенного не происходит.
if($log=='' && $psw=='' && $email='')
exit('Fields "Login", "Password" and "Email" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
а второе такое:
if($log=='' && $psw=='')
exit('Fields "Login" and "Password" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
третье:
if($psw=='' && $email='')
exit('Fields "Password" and "Email" must be filled to register!<br>
<a href="1.php">Back to the page with the registration form</a><br>');
дальше 3-е, 4-е и т.д., но это уже не важно.
Проблема с первым условием. Оно не срабатывает, а выполняется второе, в котором только один оператор '&&'. Поэтому у меня и возникли вопросы с этим опреатором.
Я понимаю, что мой код можно оптимизировать, но для меня с моим уровнем знаний и опытом - это нормально. Для меня сейчас нужно понять почему не работает первое условие.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.