PHP Стенография для isset form POST value

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

<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 ответов


вы можете определить переменные в начале скрипта перед выводом HTML, например:

$name = isset($_POST['submit']) ? $_POST['name'] : null;

в вашем разделе html вы можете распечатать $name, не беспокоясь, что он не был определен

<p><input type="text" name="name" value="<?php echo $name ?>" /></p>

также, если $_POST ['submit'] не содержит никакого значения, вы с большей вероятностью получите ложное утверждение. Чтобы избежать таких проблем, используйте array_key_exists


Как сказал Назарий, вы должны избегать как можно больше 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>

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

<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p>

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


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

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

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

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

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

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

<?= isset($_POST['submit'])? $_POST['name'] : ""; ?>

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

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

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

<p><input type="text" name="name" value="{name}" /></p>

Я только что видел это из стандарта кодирования wordpress. хотя они не поощряют читаемость..

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

ссылка здесь


использовать контроль ошибок php оператор: @.

<?php

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

?>  

если переменная POST установлена,она будет Эхо-Эд. Если нет, ничего не появится.