Я пытаюсь использовать isset()
во вложенной форме, как показано ниже:
isset($_POST['selectedTemplate'])?$_POST['selectedTemplate']:isset($_GET['selectedTemplate'])?$_GET['selectedTemplate']:0
Но, кажется, я что-то упускаю. Может ли кто-нибудь помочь мне, как это сделать?
Оберните его в круглые скобки:
$selectedTemplate = isset($_POST['selectedTemplate']) ? $_POST['selectedTemplate'] : ( isset($_GET['selectedTemplate']) ? $_GET['selectedTemplate'] : 0 );
Или даже лучше, используйте правильное утверждение if
/ else
(для удобства обслуживания):
$selectTemplate = 0; if (isset($_POST['selectedTemplate'])) { $selectTemplate = $_POST['selectedTemplate']; } elseif (isset($_GET['selectedTemplate'])) { $selectTemplate = $_GET['selectedTemplate']; }
Однако, как указывали другие, вам просто будет проще использовать $_REQUEST
:
$selectedTemplate = isset($_REQUEST['selectedTemplate']) ? $_REQUEST['selectedTemplate'] : 0;
Возможно, вам просто проще использовать переменные $ _REQUEST:
«$ _REQUEST – это ассоциативный массив, который по умолчанию содержит содержимое $ _GET, $ _POST и $ _COOKIE."
Немного расследуйте здесь, и я думаю, я нашел реальный ответ 🙂
Пример кода:
<?php $test = array(); $test['a'] = "value"; var_dump( isset($test['a']) ? $test['a'] : isset($test['b']) ? $test['b'] : "default" );
Наверное, вы ожидаете подобного поведения:
var_dump( isset($test['a']) ? $test['a'] : (isset($test['b']) // <-- here ? $test['b'] : "default") // <-- and here );
Но! Реальное поведение выглядит так:
var_dump( (isset($test['a']) // <-- here ? $test['a'] : isset($test['b'])) // <-- and here ? $test['b'] : "default" );
Общая ошибка заключалась в том, что вы пропустили уведомление: Неопределенный индекс .
Онлайн-оболочка .
Проще читать, если мы напишем тройной следующим образом:
$myvar = ($x == $y) ?(($x == $z)?'both':'foo') :(($x == $z)?'bar':'none');
Но тройные операторы – это короткие, эффективные способы написания простых операторов if. Они не построены для гнездования. 🙂
Вместо тройного с двусмысленным приоритетом вы можете просто использовать $_REQUEST
вместо fiddly $ _GET и $ _POST зондирования:
isset($_REQUEST['selectedTemplate']) ? $_REQUEST['selectedTemplate'] : 0
Это именно то, для чего оно предназначено.
Начиная с php 7
мы можем использовать оператор Null-коалесценции
$selectedTemplate = $_POST['selectedTemplate']) ?? $_GET['selectedTemplate'] ?? 0;
Я считаю, что это сработает:
$test = array(); $test['a'] = 123; $test['b'] = NULL; $var = (isset($test['a']) ? $test['a'] : (!isnull($test['b']) ? $test['b'] : "default")); echo $var;