0

我正在开发一个应用程序,并希望显示一个在编辑表单时将被填写的表单,但如果表单是一个新条目则不会。我相信这样做最不冗长的方法是只使用一个表单并抑制回显我的变量的任何错误,这样如果它是一个新表单就不会打印任何内容(因为如果它是一个新表单,变量将不存在) . 例如:

<?php 
if ( ! $new_item) {
    $variable = 'Example';
}
?>
<form>
    <input type="text" name="inputbox" value="<?php echo @$variable; ?>" />
</form>

这是一个好习惯,还是有更好的方法?我应该为新项目和要编辑的项目分别创建视图吗?这样做会对性能产生什么影响?

4

3 回答 3

4

您可以使用

<?php echo ((isset($value) && $value != '') ? $value : 'Default'); ?>

解决此问题的更简洁的方法是创建一个帮助函数来为您执行此操作:

function useDefault($value, $default = '')
{
    if (isset($value) && $value != '')
    {
        return $value;
    }
    else
    {
        return $default;
    }
}

然后你可以使用

<?php echo useDefault($value, 'default value'); ?>
于 2008-11-25T11:32:17.440 回答
2

我倾向于使用:

$variable = (isset($new_item) && $new_item) ? 'Example' : 'Default Value';

真的矫枉过正,但我​​认为如果没有设置,直接使用 !$new_item 会引发通知。您还可以根据您想要的行为将第二个子句切换为 !empty($new_item)。

于 2008-11-25T11:03:41.913 回答
1

我认为最好的方法是始终设置变量

if ( ! $new_item) {
    $variable = 'Example';
} else {
    $variable = 'Default value'; 
    //or
    $variable = '';
}

使用@错误抑制很慢。

编辑 请注意,当您将变量打印到输入值属性中时,您应该首先调用htmlentities()htmlspecialchars()对其进行处理。

第二次编辑

您在评论中说您正在获取对象上的数据,在这种情况下您也可以这样做:

class example {
    public $somefield = 'default value';
}

然后,如果它是您正在编辑的现有记录,请执行以下操作,这将导致返回的对象成为“示例”的实例:

$record = mysql_fetch_object($result, 'example');

或者,如果是新记录,请自行实例化:

$record = new example(); 

然后你总是知道$record->somefield会被设置,你可以这样做:

<form>
    <input type="text" name="somefield" value="<?php echo htmlspecialchars($record->somefield); ?>" />
</form>
于 2008-11-25T10:59:58.910 回答