За последние 24 часа нас посетили 17078 программистов и 1835 роботов. Сейчас ищут 1675 программистов ...

не корректно работает if

Тема в разделе "Регулярные выражения", создана пользователем mifitator, 11 сен 2014.

  1. mifitator

    mifitator Новичок

    С нами с:
    11 сен 2014
    Сообщения:
    11
    Симпатии:
    0
    Кто нибудь скажите плиз почему эти условия выводят 'Ok' ??
    уже мозг сломал себе )



    $var=array('xxx','dgegeg');

    if (!isset($var['xxx'])){
    echo 'Ok';
    }
    elseif (is_numeric($var)){
    echo 'Num';
    }
    else echo 'no'

    если подставить на место иксов число или сделать !isset по индексу - все корректно работает и выводится 'no'.
     
  2. Cognio

    Cognio Новичок

    С нами с:
    8 апр 2014
    Сообщения:
    21
    Симпатии:
    0
    Потому, что в вашем случае xxx, это не индекс элемента массива, а его значение.
    Надо так $var[0];
     
  3. mifitator

    mifitator Новичок

    С нами с:
    11 сен 2014
    Сообщения:
    11
    Симпатии:
    0
    Да спс.. пример не совсем удачный.
    На самом деле пробую понять от чего выводится 'существует' независимо от того ввел я данные в форму или нет...

    <form method="post"action="#">

    <input type="text" name="log">
    <input type="text" name="pass">
    <input type="submit" name="submit">
    </form>

    <?php

    if (isset($_POST['log'],$_POST['pass'])){
    echo'существует';

    }
    else echo 'не существует';
    ?>

    В упор не вижу что не так
     
  4. Cognio

    Cognio Новичок

    С нами с:
    8 апр 2014
    Сообщения:
    21
    Симпатии:
    0
    У меня все нормально работает.
    Сделайте обнуление формы после отправки данных.
     
  5. mifitator

    mifitator Новичок

    С нами с:
    11 сен 2014
    Сообщения:
    11
    Симпатии:
    0
    Сделал распечатку массива сразу после кода выше. после нажатия на submit.
    Результат :

    существует

    Array
    (
    [log] =>
    [pass] =>
    [submit] => Submit
    )


    Вынос мозга (( Памагите

    Полный код :


    <?php
    if (isset($_POST['submit'])){

    if (isset($_POST['log'],$_POST['pass'])){
    echo'существует';

    else echo 'не существует';
    }

    echo '<pre>'.print_r($_POST,1).'</pre>'
    ?>

    <form method="post"action="#">

    <input type="text" name="log">
    <input type="text" name="pass">
    <input type="submit" name="submit">
    </form>
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  7. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    А запятая это эквивалент and ?
    Чего тут гадать, у тебя после нажатия с пустыми полями, все переменные установлены - pass=0 log=0

    Код (Text):
    1. if (isset($_POST['submit'])){
    2.  
    3. if (!empty($_POST['log']) and $_POST['pass']){
    4. echo'ys';
    5. }
    6. else
    7. echo 'no';
    8.  
    9. }
    10. echo '<pre>'.print_r($_POST).'</pre>';
    11. ?>
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    через запятую передаются аргументы функции
    в данной ситуации "and $_POST['pass']" эквивалентно выражению "and $_POST['pass'] == true". Это выражение будет ложным не только когда $_POST['pass'] пустая, но и когда в ней ноль.
     
  9. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    Да, погорячился... я
    У него сейчас так, при нажатии с пустой формой - переменный log, pass =0
    Тогда остается:
    Если sub установлены
    Если не пустые лог и пасс

    Но при 0 проверку не пройдет

    Тогда так:
    Код (Text):
    1. if (isset($_POST['log'],$_POST['pass']) && $_POST['pass']!=Null && $_POST['log']!=Null){

    Код (Text):
    1. <?php
    2.  if (isset($_POST['submit'])){
    3.  
    4. var_dump($pass);
    5. if (isset($_POST['log'],$_POST['pass']) && $_POST['pass']!=Null && $_POST['log']!=Null){
    6. echo'ys';
    7. }
    8.  
    9.  else {
    10.  
    11. echo 'no';
    12.   }
    13.   }
    14.  
    15. echo '<pre>'.print_r($_POST).'</pre>';
    16. ?>
    17.  
    18.  
    19.  
    20. <form method="POST"action="#" >
    21.  
    22. <input type="text" name="log" >
    23. <input type="text" name="pass" >
    24. <input type="submit" name="submit">
    25. </form>
     
  10. mifitator

    mifitator Новичок

    С нами с:
    11 сен 2014
    Сообщения:
    11
    Симпатии:
    0
    Да. Проверка на $_POST['log'] !==' ' все решила.

    Var_dump прояснил
    Код (Text):
    1.  
    2. array (size=3)
    3.   'log' => string '' (length=0)
    4.   'pass' => string '' (length=0)
    5.   'submit' => string 'Отправить запрос' (length=16)

    В том материале по проверке который я изучал уверялось что isset вполне достаточно. А про empty лучше даже не думать - она ведь 0 не замечает.
    А вообще странно, что так мало данных по этой теме - подозреваю,что все юзают фреймворки и просто не парятся уже о таких мелочах )))

    Всем спасибо за помощь! Пойду искать еще одни грабли )
     
  11. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    Рассуждения:
    Если заменить в изначальном скрипте заменить POST на GET, отправить пустые поля, посмотреть на строку - это несколько проясняет суть дела.
    Если просто открыть страницу, поставив в конце:
    Код (Text):
    1. var_dump($submit);
    2. var_dump($log);
    3. var_dump($pass);
    Получаем NULL NULL NULL
    Все верно, мы ничего не устанавливали

    Жмем submit, получаем
    string(16) "Отправить запрос" string(0) "" string(0) ""
    А теперь из руководства "Также отметьте, что NULL-байт ("\0") не является эквивалентом PHP-константы NULL."
    Получили 0 байт, но это не равно null,
    проверка прошла
    В жизни на листе, либо есть строка, либо ее нет.
    Тут надо, имхо, вспомнить про состояние триггера, либо 0, либо 1