За последние 24 часа нас посетили 17753 программиста и 1922 робота. Сейчас ищут 978 программистов ...

isset

Тема в разделе "PHP для новичков", создана пользователем YulyaT, 14 июн 2012.

  1. YulyaT

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

    С нами с:
    11 июн 2012
    Сообщения:
    52
    Симпатии:
    0
    Пример взят из сети, не изменено ничего, только добавлены 4 echo.
    Код (Text):
    1. <?
    2. echo "<br>**";
    3. echo isset($_POST['auth_name']);
    4. echo "----<br>";
    5. echo "==".$_POST['auth_name']."==<br>";
    6. ?>
    7.  
    8. <form method="POST">
    9. <input type="text" name="auth_name"><br>
    10. <input type="password" name="auth_pass"><br>
    11. <input type="submit"><br>
    12. </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'])) проходит как вроде был ввод.
    Что тут не так?
     
  2. etalcom

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

    С нами с:
    14 мар 2012
    Сообщения:
    86
    Симпатии:
    0
    Адрес:
    Вологда
    Кусок кода мало конечно что дал!
    Напиши конкретно что ты хочешь сделать этим куском кода!

    Если я правильно понимаю то
    Код (Text):
    1. echo isset($_POST['auth_name']);
    смысл проверить пустая ли или нет форма
    тогда надо наверное писать условие типа
    Код (Text):
    1.  
    2. if (isset($_POST['auth_name']))
    3. {
    4. echo "123";
    5. }
    6. else
    7. {
    8. echo "321";
    9. }
     
  3. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    он не проверяет значение, isset просто проверяет существование ключа auth_name в массиве post, при отсылке пустой формы он существует, только значение там пустое.

    я так понимаю, тебе нужно:
    Код (PHP):
    1. if (isset($_POST['auth_name']) && !empty($_POST['auth_name'])) 
    2.  
     
  4. YulyaT

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

    С нами с:
    11 июн 2012
    Сообщения:
    52
    Симпатии:
    0
    но у меня есть условие if (isset($_POST['auth_name']))
    и внутрь попадает при любых значениях.
    Этим куском кода хочу проверить как [не] работает isset($_POST['auth_name'])
    Все очень просто: по submit хочу проверить что-то есть в полях формы чтобы зря к базе не обращаться.
    Этот кусок выдрала с какого-то сайта, там пишут что 100% работает. У меня не пошло:(

    Добавлено спустя 9 минут 3 секунды:
    интересная мысль, он что проверяет только один ключ?
    почему тогда isset($_POST['auth_name'])=1, а не 2, если ключей 2.
    Строчка "isset проверяет, была ли установлена переменная значением отличным от NULL" была выдрана с сайта описания ф-ций.
     
  5. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    isset проверяет существование переменной и возвращает true (если переменная существует или false - если не существует), которое приводится к типу string, когда ты пытаешься его ехнуть.
    Булевые типы конвертируются в string следующим образом: true="1", false="0"
     
  6. YulyaT

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

    С нами с:
    11 июн 2012
    Сообщения:
    52
    Симпатии:
    0
    Интересная мысль, но ничего не говорит.
    Если может быть только 0|1, то что означает 2??????
    Если заполняю оба поля, то isset($_POST['auth_name']) дает 2, почему??????
    Проверь, это 3 секунды.
     
  7. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Проверил. Возвращает только 1 или 0 (true и false, как написано в мануале)

    Добавлено спустя 20 минут 26 секунд:
    Код (PHP):
    1. <?php
    2. $s1=(string)(int)false;
    3. $s2=(string)false;
    4. $s3=(string)(int)true;
    5. $s4=(string)true;
    6. var_dump($s1);
    7. echo "<br>";
    8. var_dump($s2);
    9. echo "<br>";
    10. var_dump($s3);
    11. echo "<br>";
    12. var_dump($s4);
    13. ?>
    внезапно:
    о_О
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    проверяй на !empty() и усё
     
  9. YulyaT

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

    С нами с:
    11 июн 2012
    Сообщения:
    52
    Симпатии:
    0
    так всё работает, спасибо!!
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    false конвертируется в пустую строку, это не внезапно :)
    http://www.php.ru/manual/language.types.string.html#languag ... ng.casting
     
  11. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Для меня это было внезапно. Всегда думал, что в 0. Дело в том, что мне еще ни разу не попадались задачи, в которых false надо конвертировать в строку.
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Значит ты плохо читал
    Преобразование в строку:

     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    в некоторых случаях empty тоже может быть сюрпризом
    Код (PHP):
    1. <?php
    2.  
    3. $var = '0';
    4. var_export(empty($var)); // true
    5.  
    Добавлено спустя 4 минуты 25 секунд:
    вот такая проверка может быть полезной: isset($var{0}), ну для примера топикстартера

    Код (PHP):
    1. <?php
    2. echo "<br>**";
    3. echo isset($_POST['auth_name']{0}) ? 'is set' : 'is not set';
    4. echo "----<br>";
    5. echo "==".$_POST['auth_name']."==<br>";
    6. ?>
    7.  
    8. <form method="POST">
    9. <input type="text" name="auth_name"><br>
    10. <input type="password" name="auth_pass"><br>
    11. <input type="submit"><br>
    12. </form>
     
  14. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Я по Попову изучал php.
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    также как и
    Код (PHP):
    1. $var = "";
    2. var_export(isset($var)); // true 
    =)

    Сочувствую... =)
     
  16. html-программист

    html-программист Активный пользователь

    С нами с:
    10 фев 2012
    Сообщения:
    831
    Симпатии:
    4
    Адрес:
    Kiev
    Ага, и первым моим языком был Basic... я уже не говорю о деревянных игрушках
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ...прибитых к полу?
     
  18. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.249
    Адрес:
    там-сям
    PHP он как Родина, умом его не понять. Надо просто жить с ним )
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не понятно, что тут удивило. isset - проверяет, задана ли такая переменная. Переменная задана, ей присвоено значение - пустая строка, isset верно вернул true.
     
  20. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я к тому, что проверку так делать не надо:

    Код (PHP):
    1. if(isset($_GET['isset'])) {
    2.     echo true;
    3. } else {
    4.     echo false;
    5. } 
    Если обращения в адрес нет, то есть к примеру:
    http://..../index.php
    isset вернет false.

    Ну или если обратиться в адрес просто не указывая ничего:
    http://..../index.php?isset=
    isset вернет true.

    Если перед проверкой вставить:
    $_GET['isset'] = null;
    isset вернет false.

    А если вставить:
    $_GET['isset'] = '';
    isset вернет true.

    Я это к тому, что некоторые считают, что делать дополнительную проверку нет никакого смысла =)
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    echo false; - ничего не выведет - раз

    два - дичайший говнокод =)

    Код (PHP):
    1. if(isset($_GET['isset'])) {
    2.     echo true;
    3. } else {
    4.     echo false;
    5. }  
    если уж на то пошло:
    Код (PHP):
    1. echo isset($_GET['isset']); 
     
  22. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Это вообще пример, хочешь, чтобы вывело?)
    Код (PHP):
    1. echo (int)false; //0    
    Не вижу смысла в твоем echo.
    Тут рассмотрено условие которое будет выполнено в теле if конструкции.