我已经花了很多时间在这个多个选定的数组中,它在多个下拉框中保存了几个值,我想要的是将选定的值插入到表中。
假设我从下拉框中选择1,2,3
,当我print_r($ this-> input-> post('category'))`时,显示
Array ( [0] => 1 [1] => 2 [2] => 2 )
然而,当插入表时,它只插入最后一个值而不是所有3个值。
这是查看以选择多个值:
$category = array(
'name' => 'category',
'id' => 'category'
);
<select name="category[]" id="<?php echo $category['id'] ?>" multiple="multiple">
<?php
foreach($catOpts as $catOpt)
{
$selected = ($this->input->post('category')==$catOpt->category_name) ? 'selected' : '';
echo '<option value="'.$catOpt->category_id.'" '.$selected.'>'.$catOpt->category_name.'</option>';
}
?>
</select>
在控制器中,我将值传递给验证,如果验证有效,则执行以下操作:
$this->form_validation->set_rules('category[]', 'Category', 'required');
if($this->form_validation->run()) { // validation ok
if(!is_null($data = $this->db_model->save_listing(
$this->form_validation->set_value('category[]')
))) { // success
//some message to acknowledge success created.
}
}
要插入表格的模型:
function save_listing($category)
{
$data = array(
'category_id' => $category
);
$this->db->insert('listing', $data);
return TRUE;
}
我不知道如何将所有值(数组)传递到控制器$this->form_validation->set_value('category[]')
,然后执行模型函数save_listing()
并将所有值保存到数据库的列中。
请帮助解决我的问题,我一直浏览很多论坛,但没有运气来获得解决方案。
感谢。
答案 0 :(得分:0)
如果您的字段是数组,则必须:
$data= array();
while( $v = $this->form_validation->set_value("field[]") )
{
$data[] = $v;
}
如果不这样做,则返回最后一个值。
您也可以按$this->input->post('fields')
获取值,但您的完整性规则不会应用于值,例如htmlspecialchars。
当然,这没有在doc中指定,就像其他东西一样..
来源/system/libraries/Form_validation.php:
/**
* Get the value from a form
*
* Permits you to repopulate a form field with the value it was submitted
* with, or, if that value doesn't exist, with the default
*
* @access public
* @param string the field name
* @param string
* @return void
*/
public function set_value($field = '', $default = '')
{
if ( ! isset($this->_field_data[$field]))
{
return $default;
}
// If the data is an array output them one at a time.
// E.g: form_input('name[]', set_value('name[]');
if (is_array($this->_field_data[$field]['postdata']))
{
return array_shift($this->_field_data[$field]['postdata']);
}
return $this->_field_data[$field]['postdata'];
}