【问题标题】:CodeIgniter/PHP - outputting MySQL results, without repeating code - am I doing this right?CodeIgniter/PHP - 输出 MySQL 结果,无需重复代码 - 我这样做对吗?
【发布时间】:2011-10-21 09:32:58
【问题描述】:

情况如下:我的网站有一个复杂的地址表单,其中包含门牌号、街道、电话等多个输入项。该表单用于站点周围的许多不同地方。

有几种不同的情况会影响此表单:

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

不过……

  • 我只想一个 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-&gt;row('house_number'));?&gt; 将使用从 MySQL 结果集 (1) 中提取的数据预先填充自身,或者 - 如果它检测到某些东西已经已提交 - 使用存储在 house_number 中的先前数据重新填充自身。

我的问题是:我怎样才能在场景 1 中内置,最好不要重复任何代码、添加嵌套 if 等?每当您“从头开始”加载表单时,PHP 会输出关于 $details 未设置的错误,这是可以理解的——因为没有什么可以从数据库或我的模型中提取出来。

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

谢谢!

杰克

【问题讨论】:

    标签: php mysql forms codeigniter dry


    【解决方案1】:

    为防止 $details 未设置的输出错误,您应在使用前检查 $details 是否为空。所以你可以拥有-

    $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);?>"/>
    

    其次,您还需要在会话中保留发布的值,以便在发生错误并且用户必须返回表单时,您可以保留之前发布的值。请记住,这些值尚未存储在数据库中。

    所以你可以修改你的代码:

    $house_number = '';
    if(isset($_SESSION['house_number']))
    {
        $house_number = $_SESSION['house_number'];
    }
    else if($details)
    {
        $house_number = $details->row('house_number');
    } 
    

    希望对你有帮助。

    【讨论】:

    • 谢谢,它确实有帮助——但我不必担心将数据保存在会话中,因为 CodeIgniter 会自动为我处理所有这些。我仍然有点担心,如果我必须对每个输入(有很多)进行这些检查,我可能会有很多不必要的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2011-11-24
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多