我正在创建一个表单,只是在寻找更有效的方法。到目前为止,我拥有的是:
<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>
但必须有一个更短的方法来做到这一点。
如果有人能为我指明方向,我将不胜感激。
谢谢!
您可以在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
正如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>
如果不深入说明不使用<p>
构建表单的原因,那么除了删除else
之外,没有什么可做的。
<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p>
短手<?=$_POST['name'] ?: ''?>
使用php错误控制运算符:@。
<?php
$posted_text = @$_POST['posted_text'];
echo $posted_text
?>
如果设置了POST变量,它将被回显。否则,什么都不会出现。
你可以试试这个。。。
$_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']; ?>
(如果提交没有设置名称应该是空的(-你可能需要关闭警告
尽管如此,这是非常非常糟糕的做法,并为您打开了跨站点脚本(XSS(的大门。您应该不要这样做。即使在intranet上,如果攻击者拥有可以访问它的计算机,他们也可以使用XSS执行用户可以执行的任何操作。
根据你的问题以及你对这种屏幕上的回声有多反感,我建议你使用某种形式的模板库,比如Smarty。这允许你的html代码看起来像这样:
<p><input type="text" name="name" value="{name}" /></p>
我刚刚从wordpress编码标准中看到了这一点。尽管它们不鼓励可读性。。
isset( $var ) || $var = some_function();
此处引用