Кто нибудь скажите плиз почему эти условия выводят 'Ok' ?? уже мозг сломал себе ) $var=array('xxx','dgegeg'); if (!isset($var['xxx'])){ echo 'Ok'; } elseif (is_numeric($var)){ echo 'Num'; } else echo 'no' если подставить на место иксов число или сделать !isset по индексу - все корректно работает и выводится 'no'.
Да спс.. пример не совсем удачный. На самом деле пробую понять от чего выводится 'существует' независимо от того ввел я данные в форму или нет... <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 'не существует'; ?> В упор не вижу что не так
Сделал распечатку массива сразу после кода выше. после нажатия на 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>
А запятая это эквивалент and ? Чего тут гадать, у тебя после нажатия с пустыми полями, все переменные установлены - pass=0 log=0 Код (Text): if (isset($_POST['submit'])){ if (!empty($_POST['log']) and $_POST['pass']){ echo'ys'; } else echo 'no'; } echo '<pre>'.print_r($_POST).'</pre>'; ?>
через запятую передаются аргументы функции в данной ситуации "and $_POST['pass']" эквивалентно выражению "and $_POST['pass'] == true". Это выражение будет ложным не только когда $_POST['pass'] пустая, но и когда в ней ноль.
Да, погорячился... я У него сейчас так, при нажатии с пустой формой - переменный log, pass =0 Тогда остается: Если sub установлены Если не пустые лог и пасс Но при 0 проверку не пройдет Тогда так: Код (Text): if (isset($_POST['log'],$_POST['pass']) && $_POST['pass']!=Null && $_POST['log']!=Null){ Код (Text): <?php if (isset($_POST['submit'])){ var_dump($pass); if (isset($_POST['log'],$_POST['pass']) && $_POST['pass']!=Null && $_POST['log']!=Null){ echo'ys'; } else { echo 'no'; } } echo '<pre>'.print_r($_POST).'</pre>'; ?> <form method="POST"action="#" > <input type="text" name="log" > <input type="text" name="pass" > <input type="submit" name="submit"> </form>
Да. Проверка на $_POST['log'] !==' ' все решила. Var_dump прояснил Код (Text): array (size=3) 'log' => string '' (length=0) 'pass' => string '' (length=0) 'submit' => string 'Отправить запрос' (length=16) В том материале по проверке который я изучал уверялось что isset вполне достаточно. А про empty лучше даже не думать - она ведь 0 не замечает. А вообще странно, что так мало данных по этой теме - подозреваю,что все юзают фреймворки и просто не парятся уже о таких мелочах ))) Всем спасибо за помощь! Пойду искать еще одни грабли )
Рассуждения: Если заменить в изначальном скрипте заменить POST на GET, отправить пустые поля, посмотреть на строку - это несколько проясняет суть дела. Если просто открыть страницу, поставив в конце: Код (Text): var_dump($submit); var_dump($log); var_dump($pass); Получаем NULL NULL NULL Все верно, мы ничего не устанавливали Жмем submit, получаем string(16) "Отправить запрос" string(0) "" string(0) "" А теперь из руководства "Также отметьте, что NULL-байт ("\0") не является эквивалентом PHP-константы NULL." Получили 0 байт, но это не равно null, проверка прошла В жизни на листе, либо есть строка, либо ее нет. Тут надо, имхо, вспомнить про состояние триггера, либо 0, либо 1