Пример взят из сети, не изменено ничего, только добавлены 4 echo. Код (Text): <? echo "<br>**"; echo isset($_POST['auth_name']); echo "----<br>"; echo "==".$_POST['auth_name']."==<br>"; ?> <form method="POST"> <input type="text" name="auth_name"><br> <input type="password" name="auth_pass"><br> <input type="submit"><br> </form> Нечего не ввожу в input, просто нажимаю submit и получаю **1---- т.е. для auth_name сработал isset($_POST['auth_name']). Ввожу в auth_name' напр. ааа, получаю **1---- ==ааа== т.е. при пустом вводе в auth_name isset($_POST['auth_name'])=1?? если добавляю auth_pass, получаю **2---- т.е. просто -1 не получится. value="" в input тоже не помогает. Если isset проверяет, была ли установлена переменная значением отличным от NULL, то input type="text" name="auth_name" должен работать без проблем и возвращать 0 или false, но if (isset($_POST['auth_name'])) проходит как вроде был ввод. Что тут не так?
Кусок кода мало конечно что дал! Напиши конкретно что ты хочешь сделать этим куском кода! Если я правильно понимаю то Код (Text): echo isset($_POST['auth_name']); смысл проверить пустая ли или нет форма тогда надо наверное писать условие типа Код (Text): if (isset($_POST['auth_name'])) { echo "123"; } else { echo "321"; }
он не проверяет значение, isset просто проверяет существование ключа auth_name в массиве post, при отсылке пустой формы он существует, только значение там пустое. я так понимаю, тебе нужно: Код (PHP): if (isset($_POST['auth_name']) && !empty($_POST['auth_name']))
но у меня есть условие if (isset($_POST['auth_name'])) и внутрь попадает при любых значениях. Этим куском кода хочу проверить как [не] работает isset($_POST['auth_name']) Все очень просто: по submit хочу проверить что-то есть в полях формы чтобы зря к базе не обращаться. Этот кусок выдрала с какого-то сайта, там пишут что 100% работает. У меня не пошло Добавлено спустя 9 минут 3 секунды: интересная мысль, он что проверяет только один ключ? почему тогда isset($_POST['auth_name'])=1, а не 2, если ключей 2. Строчка "isset проверяет, была ли установлена переменная значением отличным от NULL" была выдрана с сайта описания ф-ций.
isset проверяет существование переменной и возвращает true (если переменная существует или false - если не существует), которое приводится к типу string, когда ты пытаешься его ехнуть. Булевые типы конвертируются в string следующим образом: true="1", false="0"
Интересная мысль, но ничего не говорит. Если может быть только 0|1, то что означает 2?????? Если заполняю оба поля, то isset($_POST['auth_name']) дает 2, почему?????? Проверь, это 3 секунды.
Проверил. Возвращает только 1 или 0 (true и false, как написано в мануале) Добавлено спустя 20 минут 26 секунд: Код (PHP): <?php $s1=(string)(int)false; $s2=(string)false; $s3=(string)(int)true; $s4=(string)true; var_dump($s1); echo "<br>"; var_dump($s2); echo "<br>"; var_dump($s3); echo "<br>"; var_dump($s4); ?> внезапно: о_О
false конвертируется в пустую строку, это не внезапно http://www.php.ru/manual/language.types.string.html#languag ... ng.casting
Для меня это было внезапно. Всегда думал, что в 0. Дело в том, что мне еще ни разу не попадались задачи, в которых false надо конвертировать в строку.
в некоторых случаях empty тоже может быть сюрпризом Код (PHP): <?php $var = '0'; var_export(empty($var)); // true Добавлено спустя 4 минуты 25 секунд: вот такая проверка может быть полезной: isset($var{0}), ну для примера топикстартера Код (PHP): <?php echo "<br>**"; echo isset($_POST['auth_name']{0}) ? 'is set' : 'is not set'; echo "----<br>"; echo "==".$_POST['auth_name']."==<br>"; ?> <form method="POST"> <input type="text" name="auth_name"><br> <input type="password" name="auth_pass"><br> <input type="submit"><br> </form>
Не понятно, что тут удивило. isset - проверяет, задана ли такая переменная. Переменная задана, ей присвоено значение - пустая строка, isset верно вернул true.
Я к тому, что проверку так делать не надо: Код (PHP): if(isset($_GET['isset'])) { echo true; } else { echo false; } Если обращения в адрес нет, то есть к примеру: http://..../index.php isset вернет false. Ну или если обратиться в адрес просто не указывая ничего: http://..../index.php?isset= isset вернет true. Если перед проверкой вставить: $_GET['isset'] = null; isset вернет false. А если вставить: $_GET['isset'] = ''; isset вернет true. Я это к тому, что некоторые считают, что делать дополнительную проверку нет никакого смысла =)
echo false; - ничего не выведет - раз два - дичайший говнокод =) Код (PHP): if(isset($_GET['isset'])) { echo true; } else { echo false; } если уж на то пошло: Код (PHP): echo isset($_GET['isset']);
Это вообще пример, хочешь, чтобы вывело?) Код (PHP): echo (int)false; //0 Не вижу смысла в твоем echo. Тут рассмотрено условие которое будет выполнено в теле if конструкции.