За последние 24 часа нас посетили 23715 программистов и 1665 роботов. Сейчас ищут 1232 программиста ...

Какие-то глюки с isset($_POST[])

Тема в разделе "PHP для новичков", создана пользователем Kap, 17 апр 2009.

  1. Kap

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

    С нами с:
    17 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    В следующем сценарии у меня isset($_POST[]) всегда возвращает true, даже если данные в форму не введены.

    Помогите, пожалуйста! Может, надо что-то в php.ini подправить? Потому что этот пример списан из книги по пхп, а в моем сценарии у меня с _POST еще большие глюки.
    PHP:
    1.  
    2. <?php
    3. $num_to_guess = 42;
    4. $message = "";
    5. if (!isset($_POST['guess']))
    6. {
    7.     $message = "Добро пожаловать!";
    8. }
    9. else if ($_POST['guess'] > $num_to_guess)
    10. {
    11.     $message = $_POST['guess'] . "Слишком велико!"; print_r ($_POST);
    12. }
    13. else if ($_POST['guess'] < $num_to_guess)
    14. {
    15.     $message = $_POST['guess'] . "Слишком мало!"; print_r ($_POST);
    16. }
    17. else
    18.     $message = "Угадал!";
    19. if (isset($_POST['guess1'])) print "<br>guess1 прочел<br>";
    20. if (isset($_POST['guess2'])) print "<br>guess2 прочел<br>";
    21.  
    22. ?>
    23.  
    HTML:
    1.  
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 strict//EN">
    3.     <head>
    4.  
    5.         <title>Проверка _POST</title>
    6.     </head>
    7.     <body>
    8.  
    9.     <h1>
    10.     <?php print $message ?>
    11.     </h1>
    12.  
    13.     <form action="<?php print $_SERVER['PHP_SELF'] ?>" method="POST">
    14.     <p>
    15.     Введите число:
    16.     <input type="text" name="guess" />
    17.      <input type="text" name="guess1"/>
    18.       <input type="text" name="guess2"/>
    19.     <input type="submit" value="Ввод" />
    20.     </p>
    21.     </form>
    22.     </body>
    23.     </html>
    24.  
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Код (Text):
    1.  if (!isset($_POST['guess']))
     
  3. Kap

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

    С нами с:
    17 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    Простите, не поняла
     
  4. Adamant

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

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    Kap если поле формы не заполнено (оставлено пустым) и нажать сабмит. То ваш - $_POST['guess'] будет все равно существовать ( if (!isset($_POST['guess'])) == true), но оно будет пустым - (empty)
    Поэтому делайте проверку заполненности полей формы.

    например
    PHP:
    1.  
    2. if (!isset($_POST['guess']) && !empty($_POST['guess'])) {
    3.     ................
    4. }
    5.  
     
  5. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Adamant, это что такое, простите? :lol:
    Вы поменяли значения isset и empty на обратные, какой смысл?
    Что изменится если я напишу
    Код (Text):
    1. if (isset($_POST['guess']) && empty($_POST['guess'])) {
    Правильно, ничего.
     
  6. Kap

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

    С нами с:
    17 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    Спасибо! подействовало.
    Странно что такие примеры с isset-ом в книжках публикуют...
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. isset($_POST['guess'])
    это то же самое что:
    Код (Text):
    1. $_POST['guess'] !== null
    Разница в том, что isset() не выкинет notice, если ключа guess нет в массиве $_POST.
     
  8. Pomaska

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

    С нами с:
    8 июн 2010
    Сообщения:
    58
    Симпатии:
    0
    <form action="<?php print $_SERVER['PHP_SELF'] ?>" method="POST">

    а почему не поставили ";" в конце строки?
    правельно:
    PHP:
    1. <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST">
    2.  
     
  9. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Pomaska, ты бы на дату поста-то смотрел.

    Нет, не правЕльно. ;) Точка с запятой отделяет одно выражение от другого. Тут всего одно, а значит точка с запятой не обязательно.
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Pomaska, lexa
    Не занудства ради, а просто недавно читал именно этот кусок: