Подскажите пожалуйста, где моя ошибка и как её исправить? Есть форма ввода имени с кнопкой "отправить", после чего через метод POST происходит перенаправленние в скрипт... кусок скрипта: Код (Text): <?php session_start(); $name = $_POST['name']; $name_1 = $_SESSION['name_1']; #Вытягиваем name_1 из сессии if ($name == true){ $name = $name }else{ $name = $name_1 } Смысл скрипта, что бы если имя было введено, то переменная $name принимала это значение, а если имя не было введено, то переменная $name принимала значение $name_1 Когда скрипт запускается, то ругается на скобку "}" перед else
PHP: <?php session_start(); $name = $_POST['name']; $name_1 = $_SESSION['name_1']; //Вытягиваем name_1 из сессии if ($name == true){ $name = $name; }else{ $name = $name_1; } эт оно на пропущенную точку с запятой ругается поставьте нормальный отладчик
PHP: <?php session_start(); $name = empty($_POST['name']) ? $_SESSION['name_1'] : $_POST['name']; может так проще? И кстати - откуда уверенность в существовании $_SESSION['name_1'] ??? а если ее нет?
PHP: $name = $_POST['name'] ?: $_SESSION['name_1'] ?: 'конец'; если кншн не ошибаюсь, флешбэк прилетает об существовании переменной / ключа и выдает ошибку
на ?: варнинг возникнет. вот на ?? не возникает. Код (Text): $ php -r 'echo $a ?: "absent";' PHP Notice: Undefined variable: a in Command line code on line 1 Notice: Undefined variable: a in Command line code on line 1 absent $ php -r 'echo $a ?? "absent";' absent
php7 $name = $_POST['name'] ?? $_SESSION['name_1'] ?? 'гость'; php5 $name = !empty($_SESSION['name_1']) ? $_SESSION['name_1'] : !empty($_POST['name']) ? $_POST['name'] :'гость';
Различие между ними: ?: == empty() - проверяет не пуста ли переменная ?? == isset() - проверяет существует ли переменная
нет не так. empty($var) не вызовет предупреждений при необъявленной переменной, а ?: вызовет. ?: это просто то, что кажется — сжатая форма тернарного оператора, а он без isset или empty тоже будет ругаться на непонятную переменную.
опиши почему, я просто пока не пользуюсь этими сокращениями тернарными, по стандарту isset(), empty()
*лять, потому что оно так устроено ))) мой тест выше не из головы, я попробовал и скопировал сюда. тернарник работает как if ($indefinedVar) { то это } else { иначе это } — здесь будет предупреждение, так почему в тернарнике его быть не должно, где логика? и почему в сокращённом тернарнике не должно быть так же как в полном? сокращенный отличается только необязательностью блока "то". я предполагаю что ?? ввели именно потому, что многие жаловались на тернарник, что он НЕ позволяет по-настоящему коротко реализовать проверку на отсутствующую переменную/элемент массива. ведь это частый кейс.
Точка с запятой решили проблему...Спасибо $_SESSION['name_1'] подтягивается из предыдущего скрипта...Так что проблем не возникло По поводу остальных советов, тоже спасибо...