重新填充在codeigniter中从数据库生成的选择列表

时间:2012-03-03 21:32:12

标签: codeigniter

您好。我有使用form_validation的表单如果用户犯了任何错误(将一些必填字段留空),用户将被重定向回表单,并且表单已重新填充。所有工作,除了我的选择,从数据库生成。

以下是我在视图中的代码:

echo "<select name='parentid'" . set_value("parentid"). ">";
echo '<option value = "0">None</option>';
foreach ($faq_categories as $row => $option) {
    echo "<option value=" . $option['catid'] . ">" . $option['categoryname']. "</option>";
}
echo '</select>';

这是我的控制器代码:

 public function displayAddFaqCategoryForm($error = null)
    {
        $data['title'] = "Add new FAQ Category";
        $data['main_content'] = 'addFaqCategory';
        $selectWhat = array('tname' => 'faq_categories',
                            'sortby'=> 'catid',
                            'how'   => 'asc'
                            );
        $this->load->model('selectRecords');
        $data['faq_categories'] = $this->selectRecords->selectAllRecords($selectWhat);
        $this->load->vars($data);
        $this->load->view('backOffice/template');
    } // end of function displayAddFaqCategoryForm 

以下是型号代码:

 public function selectAllRecords($selectWhat = array())
    {
        $data = array();
        $tname = $selectWhat['tname'];
        $sortby = $selectWhat['sortby'];
        $how = $selectWhat['how'];
        $this->db->order_by($sortby,$how);
        $query = $this->db->get($tname);
        if($query->num_rows() > 0) 
        {
            foreach($query->result_array() as $row) 
            {
                $data[] = $row;  
            }
        }
        $query->free_result();
        return $data;
    } // end of function selectAllRecords 

我没有收到任何错误消息,只是选择没有重新填充上次使用。任何帮助将深表感谢。

1 个答案:

答案 0 :(得分:0)

您错误地使用set_value()

echo "<select name='parentid'" . set_value("parentid"). ">";

这意味着输出实际值(用于文本输入)。这会产生类似的东西:

<select name='parentid'ActualValue>

这不是填充<select>元素的方式,而且是无效的HTML。请参阅Form Helper docs

中的正确用法

您可以使用set_select(),它会继续<option>

foreach ($faq_categories as $row => $option) {

    echo "<option value=".form_prep($option['catid']).'"';

    echo set_select('parentid', $option['catid']); // outputs selected="selected"

    echo ">".html_escape($option['categoryname'])."</option>";
}

我已经对你的代码采取了一些其他的自由,你可以看到,为了安全起见(总是)。

如果这太乱了,你可能会对form_dropdown()函数感兴趣。