Сокращение PHP для isset формы POST
Я создаю форму и просто ищу более эффективные способы делать что-то. Что я до сих пор:
<p><input type="text" name="transmission" value="" /></p>
<p><input type="text" name="model" value="<?=$model;?>" /></p>
Итак, некоторые из них будут иметь уже установленное значение, а некоторые будут пустыми. То, что я хочу сделать, это увидеть, была ли форма установлена, и если она тогда использует значение $_POST ['name'] в качестве значения, если нет, то используйте либо пустой, либо используйте предыдущую переменную, которую я имею.
<p><input type="text" name="name" value="<?php if isset($_POST['submit'])) { echo $_POST['name']; } else { echo ""; } ?>" /></p>
Но должен быть более короткий способ сделать это.
ЕСЛИ кто-нибудь может указать мне в том направлении, в котором я был бы очень признателен.
Спасибо!
Ответы
Ответ 1
Вы можете определить переменные в начале вашего script перед выходом HTML, например:
$name = isset($_POST['submit']) ? $_POST['name'] : null;
в вашем разделе html вы можете печатать $name, не беспокоясь о том, что он не определен
<p><input type="text" name="name" value="<?php echo $name ?>" /></p>
Также, если $_POST ['submit'] не содержит никакого значения, вы, скорее всего, получите инструкцию FALSE. Чтобы избежать таких проблем, используйте array_key_exists
Ответ 2
Как сказал Назарий, вы должны избегать как можно большего количества PHP в шаблоне.
Фактически, вы должны иметь только в своих шаблонах уже подготовленные переменные.
Итак, в вашем коде есть что-то вроде этого
$FORM = array();
$form_fields = array('name','sex');
foreach($form_fields as $fname) {
if (isset($_POST[$fname])) {
$FORM[$fname] = htmlspecialchars($_POST[$fname]);
} else {
$FORM[$fname] ='';
}
}
а затем у вас есть гладкий и аккуратный шаблон:
<p><input type="text" name="name" value="<?=$FORM['name']?>" /></p>
Ответ 3
Не вдаваясь в причины не использовать <p>
для структурирования ваших форм, не так много можно сделать, кроме удаления else
.
<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p>
Ответ 4
Сокращенное <?=$_POST['name'] ?: ''?>
Ответ 5
Вы можете попробовать это...
$_POST['submit'] ? echo $_POST['name'] : echo '';
Я использую логическое сравнение вместо функции isset (см. ссылку для таблицы)
http://www.php.net/manual/en/types.comparisons.php
или другой вариант...
echo ($_POST['submit'] ? $_POST['name'] : '');
Ответ 6
<?= isset($_POST['submit'])? $_POST['name'] : ""; ?>
Самый короткий из них вы получите, не считая <?= $_POST['name']; ?>
(если submit не задано, имя должно быть пустым в любом случае) - вам, вероятно, нужно отключить предупреждения.
Все, что сказано, это очень очень плохая практика и открывает вам межсайтовый скриптинг (XSS). Вы должны НЕ делать это. Даже в интрасети, если злоумышленник когда-либо владеет компьютером, который имеет к нему доступ, он может использовать XSS для выполнения любых действий, которые может выполнить пользователь.
Из вашего вопроса и того, насколько вы испытываете отвращение к этому типу эха на экране, я предлагаю вам использовать некоторую форму библиотеки шаблонов, такую как Smarty. Это позволяет вашему html-коду выглядеть следующим образом:
<p><input type="text" name="name" value="{name}" /></p>
Ответ 7
Я только что видел это со стандартного кодирования Wordpress. хотя они не поощряют читаемость.
isset( $var ) || $var = some_function();
ссылка здесь
Ответ 8
Используйте управление ошибкой php: @.
<?php
$posted_text = @$_POST['posted_text'];
echo $posted_text
?>
Если задана переменная POST, она будет отформатирована. Если нет, ничего не появится.