Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CodeIgniter/PHP-输出MySQL结果,而不重复代码-我这样做对吗?_Php_Mysql_Forms_Codeigniter_Dry - Fatal编程技术网

CodeIgniter/PHP-输出MySQL结果,而不重复代码-我这样做对吗?

CodeIgniter/PHP-输出MySQL结果,而不重复代码-我这样做对吗?,php,mysql,forms,codeigniter,dry,Php,Mysql,Forms,Codeigniter,Dry,情况是这样的:我有一个网站,有一个复杂的地址表,有多个输入,如门牌号、街道、电话等。这个表格在网站周围的许多不同地方都有使用 有几个不同的场景会影响此表单: 有时,表单需要显示为“新鲜”,所有输入为空,等待添加新地址 其他时候,表单需要预先填充从数据库中提取的地址,以便编辑 最后,如果用户输入了地址,提交了表单,但忘记添加他们的门牌号,那么表单可能需要重新填充自己-在这种情况下,它需要返回刚刚输入的内容,但显示表单验证警告。 然而 我只想为整个站点使用的地址提供一个HTML表单,以保存重复代码

情况是这样的:我有一个网站,有一个复杂的地址表,有多个输入,如门牌号、街道、电话等。这个表格在网站周围的许多不同地方都有使用

有几个不同的场景会影响此表单:

有时,表单需要显示为“新鲜”,所有输入为空,等待添加新地址 其他时候,表单需要预先填充从数据库中提取的地址,以便编辑 最后,如果用户输入了地址,提交了表单,但忘记添加他们的门牌号,那么表单可能需要重新填充自己-在这种情况下,它需要返回刚刚输入的内容,但显示表单验证警告。 然而

我只想为整个站点使用的地址提供一个HTML表单,以保存重复代码 我希望这个表单能够处理上面显示的每一个不同的场景,以保存重复的代码 以下是表单的示例输入:

<div class="input">
    <input id="house_number" name="house_number" value="<?php echo set_value('house_number', $details->row('house_number'));?>"/>
    <label for="house_number">House Number</label>
</div>
如您所见,这解决了场景2和场景3-代码echo set_value$house_number,$details->row'house_number'?>默认情况下,将使用从MySQL结果集1中提取的数据预填充自身,或者-如果它检测到已提交的内容-使用存储在house_number中的先前数据重新填充自身

我的问题是:我如何在场景1中构建它,理想情况下不重复任何代码,不添加嵌套的ifs,等等?无论何时“从头开始”加载表单,PHP都会输出有关未设置$details的错误,这是可以理解的,因为没有任何东西可以从数据库或我的模型中获取

我的模型返回一个MySQL结果集,但我想你能用一个空行初始化这个结果集吗?但我不确定这样做是否正确

谢谢


Jack

为了防止未设置$details的输出错误,在使用$details之前,应首先检查$details是否为null。所以你可以-

$house_number = '';
if($details)
{
    $house_number = $details->row('house_number');
} 
然后

<input id="house_number" name="house_number" value="<?php echo set_value('house_number', $house_number);?>"/>

我希望这会有所帮助。

谢谢,确实有帮助-但我不必担心在会话中保留数据,因为CodeIgniter会自动为我处理所有这些。我仍然有点担心,如果我必须对每个输入进行这些检查,那么可能会有很多不必要的代码。
$house_number = '';
if(isset($_SESSION['house_number']))
{
    $house_number = $_SESSION['house_number'];
}
else if($details)
{
    $house_number = $details->row('house_number');
}