13

我正在创建一个表单,只是在寻找更有效的方法来做事。到目前为止,我所拥有的是:

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

但必须有更短的方法来做到这一点。

如果有人能指出我的方向,我将不胜感激。

谢谢!

4

8 回答 8

18

您可以在 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

于 2011-09-19T22:24:55.677 回答
5

就像 Nazariy 所说,您应该在模板中尽可能避免使用 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>
于 2011-09-19T22:31:41.713 回答
2

在不讨论不使用<p>来构建表单的原因的情况下,除了删除else.

<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p>
于 2011-09-19T22:21:45.700 回答
1

速记<?=$_POST['name'] ?: ''?>

于 2014-09-08T22:17:20.703 回答
0

你可以试试这个...

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

我使用的是布尔比较而不是 isset 函数(请参阅表格链接)

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

或其他选择是...

echo ($_POST['submit'] ? $_POST['name'] : '');
于 2011-09-19T22:21:45.667 回答
0
<?= isset($_POST['submit'])? $_POST['name'] : ""; ?>

是最短的,除了说<?= $_POST['name']; ?>(如果提交未设置名称应该为空) - 你可能需要关闭警告。

话虽如此,这是非常非常糟糕的做法,并且让您可以使用跨站点脚本(XSS)。你应该这样做。即使在 Intranet 上,如果攻击者曾经拥有可以访问它的计算机,他们也可以使用 XSS 来执行用户可以执行的任何操作。

根据您的问题以及您对屏幕上这种类型的回声有多少厌恶,我建议您使用某种形式的模板库,例如Smarty。这使您的 html 代码看起来像这样:

<p><input type="text" name="name" value="{name}" /></p>
于 2011-09-19T22:40:14.163 回答
0

我刚刚从 wordpress 编码标准中看到了这一点。虽然他们不鼓励可读性..

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

参考这里

于 2013-10-22T04:24:28.163 回答
0

使用php 错误控制运算符:@。

<?php

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

?>  

如果设置了 POST 变量,它将被回显。如果没有,什么都不会出现。

于 2015-04-25T14:42:49.630 回答