Codeigniter将多个选定值插入数据库

时间:2013-11-09 17:44:00

标签: codeigniter insert

我已经花了很多时间在这个多个选定的数组中,它在多个下拉框中保存了几个值,我想要的是将选定的值插入到表中。

假设我从下拉框中选择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()并将所有值保存到数据库的列中。

请帮助解决我的问题,我一直浏览很多论坛,但没有运气来获得解决方案。

感谢。

1 个答案:

答案 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'];
}