这有效:
<input type="text" name="foo" value="<?php echo isset($_POST['foo']) ? $_POST['foo'] : '' ?>"/>
这不是:
echo('<input type="text" name="foo" value="'.isset($_POST['foo']) ? $_POST['foo'] : ''.'"/>');
注意:第15行/srv/www/form.php中的未定义索引:foo
感谢您的帮助。
答案 0 :(得分:2)
将表达式放在括号中:
echo('<input type="text" name="foo" value="'. (isset($_POST['foo']) ? $_POST['foo'] : '') .'"/>');
答案 1 :(得分:2)
PHP's operator precedence rules让你评估你的第二个例子如下:
echo(
('<input type="text" name="foo" value="'.isset($_POST['foo']))
? $_POST['foo']
: (''.'"/>')
);
这在几个方面没有多大意义。由于isset()
的结果基本上被忽略了,因此最终只会尝试打印$_POST['foo']
。当然,当它没有设置时会发出通知。
在实际的三元表达式周围添加括号。即。
(isset($_POST['foo']) ? $_POST['foo'] : '')
答案 2 :(得分:1)
恕我直言,括号(由zerkms建议)使代码无法读取。
相反,请考虑这样的事情:
$value = isset($_POST['foo']) ? $_POST['foo'] : '';
echo '<input type="text" name="foo" value="'. $value .'"/>';