За последние 24 часа нас посетили 56099 программистов и 1682 робота. Сейчас ищут 1104 программиста ...

Значение переменной

Тема в разделе "PHP для новичков", создана пользователем Reken, 13 ноя 2019.

Метки:
  1. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    200
    Симпатии:
    5
    Подскажите пожалуйста, где моя ошибка и как её исправить?

    Есть форма ввода имени с кнопкой "отправить", после чего через метод POST происходит перенаправленние в скрипт...

    кусок скрипта:
    Код (Text):
    1. <?php
    2. session_start();
    3.  
    4. $name = $_POST['name'];
    5. $name_1 = $_SESSION['name_1']; #Вытягиваем name_1 из сессии
    6.  
    7. if ($name == true){
    8. $name = $name
    9. }else{
    10. $name = $name_1
    11. }
    Смысл скрипта, что бы если имя было введено, то переменная $name принимала это значение, а если имя не было введено, то переменная $name принимала значение $name_1

    Когда скрипт запускается, то ругается на скобку "}" перед else
     
  2. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    PHP:
    1. <?php
    2. $name = $_POST['name'];
    3. $name_1 = $_SESSION['name_1']; //Вытягиваем name_1 из сессии
    4. if ($name == true){
    5. $name = $name;
    6. }else{
    7. $name = $name_1;
    8. }
    эт оно на пропущенную точку с запятой ругается :)

    поставьте нормальный отладчик
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    PHP:
    1. <?php
    2. $name = empty($_POST['name']) ? $_SESSION['name_1'] : $_POST['name'];
    может так проще? И кстати - откуда уверенность в существовании $_SESSION['name_1'] ??? а если ее нет?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.815
    Симпатии:
    1.332
    Адрес:
    Лень
    PHP:
    1. $name = $_POST['name'] ?: $_SESSION['name_1'] ?: 'конец';
    если кншн не ошибаюсь, флешбэк прилетает об существовании переменной / ключа и выдает ошибку
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    на ?: варнинг возникнет. вот на ?? не возникает.

    Код (Text):
    1.  
    2. $ php -r 'echo $a ?: "absent";'
    3. PHP Notice:  Undefined variable: a in Command line code on line 1
    4.  
    5. Notice: Undefined variable: a in Command line code on line 1
    6. absent
    7.  
    8. $ php -r 'echo $a ?? "absent";'
    9. absent
     
  6. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    php7
    $name = $_POST['name'] ?? $_SESSION['name_1'] ?? 'гость';
    php5
    $name = !empty($_SESSION['name_1']) ? $_SESSION['name_1'] : !empty($_POST['name']) ? $_POST['name'] :'гость';
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Различие между ними:
    ?: == empty() - проверяет не пуста ли переменная
    ?? == isset() - проверяет существует ли переменная
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    нет не так. empty($var) не вызовет предупреждений при необъявленной переменной, а ?: вызовет.

    ?: это просто то, что кажется — сжатая форма тернарного оператора, а он без isset или empty тоже будет ругаться на непонятную переменную.
     
  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    опиши почему, я просто пока не пользуюсь этими сокращениями тернарными, по стандарту isset(), empty()
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    *лять, потому что оно так устроено ))) мой тест выше не из головы, я попробовал и скопировал сюда.

    тернарник работает как if ($indefinedVar) { то это } else { иначе это } — здесь будет предупреждение, так почему в тернарнике его быть не должно, где логика? и почему в сокращённом тернарнике не должно быть так же как в полном? сокращенный отличается только необязательностью блока "то".

    я предполагаю что ?? ввели именно потому, что многие жаловались на тернарник, что он НЕ позволяет по-настоящему коротко реализовать проверку на отсутствующую переменную/элемент массива. ведь это частый кейс.
     
  11. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    200
    Симпатии:
    5
    Точка с запятой решили проблему...Спасибо
    $_SESSION['name_1'] подтягивается из предыдущего скрипта...Так что проблем не возникло
    По поводу остальных советов, тоже спасибо...