0

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

假设我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>

Controller中,我将值传递给验证,如果验证有效,则:

$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()并将所有值保存到数据库中的列中。

请帮助解决我的问题,我浏览了很多论坛,但没有找到解决方案。

谢谢。

4

1 回答 1

0

当您的字段是数组时,您必须:

$data= array();

while( $v = $this->form_validation->set_value("field[]") )
{
    $data[] =  $v;
}

如果你不这样做,它会返回最后一个值。

您也可以通过$this->input->post('fields')但您的理智规则不会应用于值,如 htmlspecialchars。

当然,这并没有像其他东西一样在文档中指定..

来源/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'];
}
于 2013-11-10T12:26:06.733 回答