您好。我有使用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
我没有收到任何错误消息,只是选择没有重新填充上次使用。任何帮助将深表感谢。
答案 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()
函数感兴趣。