За последние 24 часа нас посетили 26342 программиста и 1814 роботов. Сейчас ищут 1003 программиста ...

Функция isset

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

  1. Encoder

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

    С нами с:
    1 ноя 2012
    Сообщения:
    32
    Симпатии:
    0
    Доброго времени суток.

    Такой вопрос функция isset проверяет, существует ли переменная и присвоено ли ей какое нибудь значение.
    Как она работает в коде ниже:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="styleS.css">
    <title>Документ без названия</title>
    </head>
    <body>
    <img src="blankface.jpg" width="161" height="350" alt="" style="float:right">
    <img name="elvislogo" src="elvislogo.gif" width="229" height="32" border="0" alt="Make Me Elvis">
    <p><strong>Персонально:</strong> ТОЛЬКО для покупателей Элмера<br>
    Составьте и отправьте персональное письмо для посетителей, внесенных в лист рассылки.</p>


    Код (Text):
    1.   <?php
    2.             if (isset($_POST['Submit'])) {
    3.                   //Тут начало
    4.                 $from = 'elmer@makemeelvis.com';
    5.                 $subject = $_POST['subject'];
    6.                 $text = $_POST['elvisMail'];
    7.                 $output_form = false;
    8.                
    9.                 if (empty($subject) && empty($text)) {
    10.                     echo 'Вы забыли ввести тему и текст электронного письма. <br>';
    11.                     $output_form = true;
    12.                     }
    13.                
    14.                 if (empty($subject) && (!empty($text))) {
    15.                     echo 'Вы забыли ввести тему электронного письма. <br>';
    16.                     $output_form = true;
    17.                 }
    18.                
    19.                 if((!empty($subject)) && empty($text)) {
    20.                     echo 'Вы забыли ввести текст электронного письма. <br>';
    21.                     $output_form = true;
    22.                 }
    23.                
    24.                 if ((!empty($subject)) && (!empty($text))) {
    25.                        
    26.                
    27.                     $dbc = mysqli_connect('localhost', 'Encoder', '31502', 'elvis_store')
    28.                         or die ('Ошибка соединения с MySQL сервером.');
    29.                     $query = "SELECT * FROM email_list";
    30.                     $result = mysqli_query($dbc, $query)
    31.                         or die('Ошибка при выполнении запроса к базе данных');
    32.                    
    33.                     while($row = mysqli_fetch_array($result)) {
    34.                         $first_name = $row['first_name'];
    35.                         $last_name = $row['last_name'];
    36.                    
    37.                     $msg = "Уважаемый $first_name $last_name,\n$text";
    38.                     $to = $row['email'];
    39.                     mail($to, $subject, $msg, 'From:' . $from);
    40.                    
    41.                     echo 'Элекстронное письмо отправленно: ' . $to . '<br>';
    42.                     }
    43.                     mysqli_close($dbc);
    44.                     }
    45.                  //Тут конец.  
    46.                 }
    47.                 else {
    48.                     $output_form = true;
    49.                 }
    50.                  if ($output_form) {
    51.                  ?>
    52.                      <br>
    53.                     <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    54.                     <label for="subject">Тема электронного письма:</label><br>
    55.                     <input id="subject" name="subject" type="text" size="30"><br>
    56.                     <label for="elvisMail">Содержание элекстронного письма:</label><br>
    57.                     <textarea id="elvisMail" name="elvisMail" rows="8" cols="40"></textarea><br>
    58.                     <input type="submit" name="Submit" value="Отправить">
    59.                     </form>
    60.                  <?php
    61.                  }
    62.                  ?>

    </body>
    </html>

    Не могу понять, ведь переменная $_POST она же существует, и должно вывести true.

    Вот код ниже, выводит сообщение что существует и не важно что значение у переменной нету.
    Код (Text):
    1.  
    2. $v2 = '';
    3.  
    4. if (isset ($v2)) {
    5.     echo 'Переменная $v2 существует';
    6. }
    7. else {
    8.     echo 'не существует';
    9. }
    Он же должен выдать True, так как в супер глобальной переменой $_POST['Submit'] существует, при выполнение функций он выдает false почему так происходит?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    у тебя нет никакой функции, где оно должно выдавать true?

    Добавлено спустя 2 минуты 41 секунду:
    есть тёплый ламповый способ проверки условий: поставь сразу за if() {
    die('OPA!!!!');
    оно покажет правильно ты понимаешь код или нет. проверил одно место — передвинул die() в новое место и там проверил. так до просветления.
     
  3. Encoder

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

    С нами с:
    1 ноя 2012
    Сообщения:
    32
    Симпатии:
    0
    В самом начале должен вызвать True ведь $_POST['Submit'] существует.
     
  4. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    echo $_POST['Submit'];
    что то выводит? o_0

    Добавлено спустя 2 минуты 21 секунду:
    http://www.php.ru/manual/tutorial.forms.html
    Зачем проверять $_POST['Submit'] ?

    Код (PHP):
    1. <form action="action.php" method="post">
    2.  <p>Ваше имя: <input type="text" name="name" /></p>
    3.  <p>Ваш возраст: <input type="text" name="age" /></p>
    4.  <p><input type="submit" /></p>
    5. </form> 
     
  5. Encoder

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

    С нами с:
    1 ноя 2012
    Сообщения:
    32
    Симпатии:
    0
    Что бы при запуске функция не выполнялась, пока не нажмешь кнопку отправить.
    И если нажмешь отправить, тогда он либо отправить сообщение, либо выведет одну из трех опушечных ошибок. Я не понимаю как работает в данной функций isset.
     
  6. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Код (PHP):
    1. if(isset($_POST[subject]) {
    2. //Выполняется код
    3. }
    4. else {
    5. //Твоя форма
    6. }
    7.  
    Ведь $_POST[subject] тоже не появится без отправки формы?

    Добавлено спустя 52 секунды:
    <input type="submit" name="Submit" value="Отправить"> Лишнее значение.

    Добавлено спустя 2 минуты 37 секунд:
    isset проверяет существование и возвращает либо true либо false , в твоем случае false потому что Submit как я полагаю не передает value.
     
  7. Encoder

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

    С нами с:
    1 ноя 2012
    Сообщения:
    32
    Симпатии:
    0
    Подумал и пришел к такому выводу:
    Он возвращает false потому что:
    Функция не передает данные php интерпретатору.
    То есть: я не нажимал на кнопку отправить, и в $_POST ничего не передалось, и он не существует, функция isset принимает значение false и выводит форму для заполнения.
    А если нажимаю отправить то появляется $_POST со значениями и функция принимает значение True, после чего выполняются условие if.

    Эта функция для отправки рассылки, но с условием что все поля заполнены, если хоть одно поле пустое выводит ошибку.
     
  8. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Хорошо)