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
Форумы портала PHP.SU :: Версия для печати :: Несколько операторов && подряд
Форумы портала PHP.SU » » Вопросы новичков » Несколько операторов && подряд

Страниц (2): [1] 2 »
 

1. Oleh - 04 Декабря, 2011 - 17:26:20 - перейти к сообщению
Как проверить три и более переменных на пустое значение ?
Но условие должно выполняться только если все три переменные имеют пустое значение, а не одна или две из них.
В учебнике такая ситуация не описана, на странице 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!");

В чём ошибка ?
2. Bio man - 04 Декабря, 2011 - 17:41:01 - перейти к сообщению

написал специально and и &&, что бы донести вам суть приоритетов. and имеет ниже приоритет чем &&. то есть с начало будет проверено на истину переменная $b и $c и затем будет проверена переменная $a с предыдущем результатом. вот пример
PHP:
скопировать код в буфер обмена
  1. $a='';
  2. $b='string';
  3. $c='';
  4. if(empty($a) and empty($b) && empty($c))

empty($b) && empty($c) - false
empty($a) - true
if(true and false) - будет false
пример 2
PHP:
скопировать код в буфер обмена
  1. $a='';
  2. $b='string';
  3. $c='';
  4. if(empty($a) && empty($b) && empty($c))

empty($a) - true
empty($b) - false
empty($c) - true
if(true && false && true) - будет false

надеюсь вы узнали что то нового
3. Самогонщик - 04 Декабря, 2011 - 17:45:21 - перейти к сообщению
Oleh пишет:
if($a=='' && $b=='' && $c=='')
Должно работать.
4. Bio man - 04 Декабря, 2011 - 17:48:43 - перейти к сообщению
Самогонщик пишет:
Должно работать.
если все переменные пустые (либо имеют значения пустой строки, false, null, 0, '0', array()) - имелась в виду ф-ция empty
5. Самогонщик - 04 Декабря, 2011 - 17:50:46 - перейти к сообщению
Oleh пишет:
Но условие должно выполняться только если все три переменные имеют пустое значение, а не одна или две из них.
Oleh пишет:
А вот проверка трёх не получается.
Думаю автор понимает, что переменные должны быть пустые.
6. Bio man - 04 Декабря, 2011 - 17:52:55 - перейти к сообщению
Самогонщик пишет:
Думаю автор понимает, что переменные должны быть пустые.
тогда почему у него аномалии происходят? видимо какая то переменная не пустая
7. Champion - 04 Декабря, 2011 - 17:58:38 - перейти к сообщению
Во-первых, если надо проверить, что хотя бы одна переменная пустая, то это не И, а ИЛИ. Во-вторых, Bio man написал глупости. Сейчас расскажу какие
8. Самогонщик - 04 Декабря, 2011 - 18:03:40 - перейти к сообщению
Champion пишет:
Во-первых, если надо проверить, что хотя бы одна переменная пустая, то это не И, а ИЛИ.
Oleh пишет:
условие должно выполняться только если все три переменные имеют пустое значение


Champion пишет:
Bio man написал глупости.
Ты о ленивости?
9. Champion - 04 Декабря, 2011 - 18:04:50 - перейти к сообщению
Bio man пишет:
то есть с начало будет проверено на истину переменная $b и $c и затем будет проверена переменная $a
Во-первых, пишется "сначала". А во-вторых на самом деле сначала будет проверена переменная А, потом Б и Ц.
Приоритет у and ниже, чем у &&, но это сказывается не так.
А еще и and, и && прекращают выполняться как только накнутся на первый false, так что объяснения примеров некорректны.

Перечитал еще раз вопрос
Oleh пишет:
только если все три переменные имеют пустое значение, а не одна или две из них.
Ну тогда всё правильно у вас написано. В чем проявляется "ошибка" ? И что до условия происходит с А, Б и Ц?
(Добавление)
Самогонщик пишет:
Ты о ленивости?
Да, о ленивости тоже. Мне сначала показалась, что его ошибка с приоритетами более неправильная, чем есть на самом деле. На самом деле она не большая)
10. Самогонщик - 04 Декабря, 2011 - 18:19:55 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function a()
  2. {
  3.         echo 'a';
  4.         return '';
  5. }
  6.  
  7. function b()
  8. {
  9.         echo 'b';
  10.         return 'ololo';
  11. }
  12.  
  13. function c()
  14. {
  15.         echo 'c';
  16.         return '';     
  17. }
  18.  
  19. if(!a() && !b() and !c())
  20.         echo 'ololo';
  21.  
  22. if(!a() and !b() && !c())
  23.         echo 'ololo';
  24.  


Результат ab и ab

Champion пишет:
Приоритет у and ниже, чем у &&, но это сказывается не так.
Champion, расскажи как сказывается?
11. Champion - 04 Декабря, 2011 - 18:23:06 - перейти к сообщению
Самогонщик пишет:
Расскажи как сказывается?
Когда вот в таком виде (!a() && !b() and !c()), то никак - какими бы там приоритетными не были && и and, когда других операторов нету, они все равно выполнятся слева на право.
А вот если есть, например плюсы или присваивание, то разница заметнее. Например
$a = true and false; // $a будет true
$b = true && false; // будет false
12. Самогонщик - 04 Декабря, 2011 - 18:30:06 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $a = (true and false);
  2. if($a===true)
  3.         echo 'true';
  4. else
  5.         echo 'false';
  6.  
  7. $b = true and false;
  8. if($b===true)
  9.         echo 'true';
  10. else
  11.         echo 'false';

Результат falsetrue, что-то я вообще ничего не понимаю.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. ($a = true) && false;
  2. if($a===true)
  3.         echo 'true';
  4. else
  5.         echo 'false';
  6.  

Результат true, вот теперь мне полегчало.
13. Bio man - 04 Декабря, 2011 - 18:38:49 - перейти к сообщению
Champion, спасибо, что поправил Улыбка некоторых вещей не знал. да и примеры не удачные придумал. программисты по природе ленивы Внимание Радость
14. Oleh - 04 Декабря, 2011 - 19:00:52 - перейти к сообщению
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'. С переменными до условия ничего особенного не происходит.

$log=strtolower(trim($_POST['log']));
$psw=strtolower(trim($_POST['psw']));
$email=strtolower(trim($_POST['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-е и т.д., но это уже не важно.
Проблема с первым условием. Оно не срабатывает, а выполняется второе, в котором только один оператор '&&'. Поэтому у меня и возникли вопросы с этим опреатором.
Я понимаю, что мой код можно оптимизировать, но для меня с моим уровнем знаний и опытом - это нормально. Для меня сейчас нужно понять почему не работает первое условие.
15. Bio man - 04 Декабря, 2011 - 19:05:49 - перейти к сообщению
отладьте. var_dump($log, $psw, $email);

возможно $email имеет какое то значение

 

Powered by ExBB FM 1.0 RC1