Сокращение PHP для значения формы POST isset - PullRequest
13 голосов
/ 20 сентября 2011

Я создаю форму и просто ищу более эффективные способы ведения дел.Пока что у меня есть:

<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>

Но должен быть более короткий способ сделать это.

Если бы кто-нибудь мог указать мне направление, я был бы очень признателен.

Спасибо!

Ответы [ 8 ]

18 голосов
/ 20 сентября 2011

Вы можете определить переменные в начале вашего скрипта перед выводом 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

5 голосов
/ 20 сентября 2011

Как сказал Назарий, вам следует избегать как можно большего количества 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>
1 голос
/ 09 сентября 2014

Сокращения <?=$_POST['name'] ?: ''?>

1 голос
/ 20 сентября 2011

Не вдаваясь в причины не использовать <p> для структурирования ваших форм, мало что можно сделать, кроме удаления else.

<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p>
0 голосов
/ 25 апреля 2015

Используйте оператор php error error : @.

<?php

   $posted_text = @$_POST['posted_text'];
   echo $posted_text

?>  

Если установлена ​​переменная POST, она будет выведена на экран. Если нет, то ничего не появится.

0 голосов
/ 22 октября 2013

Я только что видел это из стандартного кодирования WordPress. хотя они не способствуют удобочитаемости ..

isset( $var ) || $var = some_function();

ссылка здесь

0 голосов
/ 20 сентября 2011
<?= isset($_POST['submit'])? $_POST['name'] : ""; ?>

Это самое короткое, что вы получите, кроме, скажем, <?= $_POST['name']; ?> (если submit не задано, имя должно быть пустым в любом случае) - вам, вероятно, нужно отключить предупреждения.

Все это, как говорится, очень и очень плохая практика и открывает вам до межсайтовый скриптинг (XSS) . Вы должны НЕ делать это. Даже в интрасети, если злоумышленник когда-либо владеет компьютером, который имеет к нему доступ, он может использовать XSS для выполнения любых действий, которые может выполнить пользователь.

Исходя из вашего вопроса и того, насколько вы испытываете отвращение к этому типу отображения на экране, я бы посоветовал вам использовать некоторую форму библиотеки шаблонов, такую ​​как Smarty . Это позволяет вашему HTML-коду выглядеть так:

<p><input type="text" name="name" value="{name}" /></p>
0 голосов
/ 20 сентября 2011

Вы можете попробовать это ...

$_POST['submit'] ? echo $_POST['name'] : echo '';

Я использую логическое сравнение вместо функции isset (см. Ссылку для таблицы)

http://www.php.net/manual/en/types.comparisons.php

или другой вариант ...

echo ($_POST['submit'] ? $_POST['name'] : '');
...