当你有很多输入(选择/ textarea / input)时,当你加入isset()
例如:
<input id="firstname" type="text" name="firstname"
value="<?php echo (isset($_POST['firstname']) ? $_POST['firstname'] : "";?>">
在另一种方式中,它看起来整洁和可维护吗?
如果有帮助,我正在使用MVC Framework。
答案 0 :(得分:3)
您可以预先解析您正在使用的所有变量:
<?php
$v_list = array('firstname', 'lastname', 'birthdate');
$v_vals = array();
foreach ($v_list as $v) {
if (isset($_POST[$v])) $v_vals[$v] = $_POST[$v];
else $v_vals[$v] = "";
}
?>
<input ... value="<?php echo $v_vals['firstname']; ?>" />
答案 1 :(得分:2)
如果行为始终相同,请定义一个命名短的函数:
function val ($variable, $default)
{
if isset($variable)
return $variable;
else
return $default;
}
然后像这样使用它:
<input id="firstname" type="text" name="firstname"
value="<?= val(@$_POST['firstname'],"")?>">
还要注意最后的“;”
中没有其他内容,则不需要最后,<?=
是<?
echo的快捷方式,但它仅适用于短标记(<?
),而不适用于<?php
。
这不是很棒但是更简洁。
答案 2 :(得分:1)
由于您使用的是MVC,因此应避免在视图中轮询超变量。此外,array_key_exists优于isset这类事情。
所以,在控制器中你应该:
$myview->firstname = array_key_exists( 'firstname', $_POST ) ? $_POST['firstname'] : '';
并在视图中
<input id="firstname" type="text" name="firstname" value="<?= $this->firstname ?>" />
答案 3 :(得分:0)
您可以构建自己的函数来填充值:
function get_post( $key, $default = ''){
if( isset( $_POST[$key])){
return htmlspecialchars( $_POST[$key]);
}
return htmlspecialchars( $default);
}
并将其用作:
<input ... value="<?php echo get_post( 'firstname', 'Your name'); ?>" />
或者无论如何它都会被整合到你的框架中。
如果您需要更完整的按键,可以这样做:
function get_post( ){
$args = func_get_args();
if( count( $args) < 2){
// Wrong usage, throw an exception
}
$default = array_pop( $args);
$progress = $_POST;
while( $key = array_shift( $args)){
if( !is_array( $progress) || !isset( $progress[$key])){
$progress = $default;
break;
}
$progress = $progress[$key];
}
return htmlspecialchars( $progress);
}
echo get_post( 'my', 'multiple', 'keys', 'default');
您也可以利用php array operator+
并设置所有变量:
<?php
$myList = array( 'name' => 'Your name', 'another' => 'Another');
$values = $_POST + $myList;
而不仅仅是:
<?php echo htmlspecialchars( $values['name']); ?>
答案 4 :(得分:0)
与许多其他概念一样,PHP用户也错了。
当用户收到“未定义的变量”消息时,通常会对此表达态度:“多么吵闹的东西!是否有虔诚的方法来摆脱它?” “当然可以!” - 来自一个PHP用户和一些代码,从来没有忙着问一个问题:那个错误信息是什么?为什么我得到它?我应该纠正吗?
所以,这里有isset或isset的一些包装器。
但是如果你想到错误信息的含义,很明显程序员必须总是知道他有哪些变量以及什么是值。
“Undefined variable”消息只是一个提示:你不知道你正在使用什么变量以及它是否存在!
因此,正确的解决方案是定义一个您将在表单中使用的变量。对于空的,你必须定义一个空的。但是,您通常不需要检查每一个。一个条件就足够了。
因此,正确的 将定义您在模板中使用的每个变量,然后再加载它。
更不用说你不应该在value属性中发布原始数据,而是总是通过htmlspecialchars()
传递它答案 5 :(得分:-2)
访问未定义的变量会抛出E_NOTICE
。 E_NOTICE
可以或多或少地被忽略(否则它们将是E_WARNING
或E_ERROR
s),因此设置error_reporting(E_ALL ^ E_NOTICE)
并回显这些变量而不先检查它们的存在。
或者,不要为每个人键入isset
,而是定义一个类似的函数:
<?php
function echoifset(&$var) {
if( isset($var)) echo $var;
}
?>
然后你可以打电话给<?php echoifset($_POST['firstname']); ?>
,它就像你目前的所有支票一样。