【问题标题】:unable to store the multiselect data to database无法将多选数据存储到数据库
【发布时间】:2018-07-07 06:44:10
【问题描述】:

我试图将值存储在数据库中,所有值都在数据库中,但问题在于下拉列表。当我尝试仅上传多选下拉列表时 最后选择的值正在存储,因为我想将所有选择的值存储在数据库中,有人可以指导我如何做到这一点

    //----controller-----
    public function portfolio1()
        {  
            $this->form_validation->set_rules('first_content', 'First content', 'required');
            $this->form_validation->set_rules('second_content', 'Second content', 'required');
            $this->form_validation->set_rules('type', 'Type', 'required');

            if ($this->form_validation->run()==TRUE)
            {
                $config['upload_path']   = FCPATH.'uploads/'; 
                $config['allowed_types'] = 'gif|jpg|png'; 
                $this->load->library('upload', $config);

                if ( $this->upload->do_upload('filename') )
                {
                    //print_r($this->upload->data());die; 
                    $data['first_content'] = $this->input->post('first_content');
                    $data['second_content'] = $this->input->post('second_content');
                    $data['type'] = $this->input->post('type');
                    $data['filename'] = $this->upload->data('file_name');  

                    //Transfering data to Model
                    $this->Contact_model->portfolio1($data);
                    //Redirecting to success page
                    redirect(site_url('Home/portfolio1'));     
                }
                else
                {
                    $error = array('error' => $this->upload->display_errors());
                    print_r($error);die;
                }
            }
            else
            {
                  $this->load->view('portfolio1'); 

            }
        } 


        //----model----------
        function portfolio1($data)
        {
            //saving records
            $this->db->insert('portfolio1', $data); 
        }


     //------view page-----


   <?php echo form_open_multipart('Home/portfolio1'); ?>
    <div style="padding-top:10%; padding-left:30%">
        <div>
            <textarea name="first_content" rows="4" cols="50"></textarea>
            <span><?php echo form_error("first_content");?></span>
        </div><br>
        <div>
            <textarea name="second_content" rows="4" cols="50"></textarea>
            <span><?php echo form_error("second_content");?></span>
        </div><br>
        <div>
            <select name="type" multiple>
                <option value="*">All Works</option>
                <option value=".bootstrap">Creative</option>
                <option value=".html">Photography</option>
                <option value=".wordpress">Web Development</option>
            </select>
            <span><?php echo form_error("type");?></span>
        </div><br>
        <div>
            <input type="file" name="filename">
            <span><?php echo form_error("filename");?></span>
        </div><br>
      <button type="submit" class="btn btn-default">Submit</button>
    </div>
</form>

【问题讨论】:

  • 上传你的html代码。
  • 刚刚更新,先生请过目

标签: php codeigniter codeigniter-3 codeigniter-2


【解决方案1】:

像这样更改您的多选部分。

<select name="type[]" multiple>
    <option value="*">All Works</option>
    <option value=".bootstrap">Creative</option>
    <option value=".html">Photography</option>
    <option value=".wordpress">Web Development</option>
</select>

我已将名称从 type 更改为 type[],因此您将获得所有选定的选项。

更新

if ( $this->upload->do_upload('filename') )
            {
                //print_r($this->upload->data());die; 
                $data['first_content'] = $this->input->post('first_content');
                $data['second_content'] = $this->input->post('second_content');
                $data['type'] = implode(",",$this->input->post('type'));
                $data['filename'] = $this->upload->data('file_name');  

                //Transfering data to Model
                $this->Contact_model->portfolio1($data);
                //Redirecting to success page
                redirect(site_url('Home/portfolio1'));     
            }

现在它会将type 以逗号分隔的形式保存在您的表格中。

【讨论】:

  • 它不起作用,先生,这些值只是没有存储在数据库中
  • 在帖子中,您将获得选定值的数组,因此您必须将其转换为字符串,或者取决于您在表中如何处理。
  • 先生,我是这个 codeigniter 的新手,请你能有点 bref
  • 值未存储在数据库中
【解决方案2】:

所有值都在数据库中被删除,但问题在于下拉列表。当我尝试上传多选下拉列表时,仅存储最后选择的值

您能否提及您的多选是以哪个名称发布的,我找不到您的视图页面来检查您的属性在下拉列表中的提及方式

【讨论】:

  • 当您像这样在控制器中打印发布的值时 print_r($this->input->post("type")); 您将获得数组格式的值正如您提到的下拉名称类型 []。您的输出将是这样的 ** Array ( [0] => .bootstrap [1] => .html ) ** 。我对您的数据库结构有疑问,无论您是使用单独的表来存储此下拉表,还是将其存储在以逗号分隔的单个字段中?
  • im 使用逗号存储在单个字段中
  • 如果要存储在单独的表中,请在模型中使用 foreach,以便可以将所有选定的值存储在单独的行中如果要存储在同一个表中,请使用 implode("," ,$this->input->post("type"));函数将数组转换为用逗号分隔的字符串并将其存储在同一个表中。希望对你有帮助
  • implode(",",$this->input->post("type"));先生,我试过了,但它不起作用
  • $data['type'] 替换这个 $data['type'] = $this->input->post('type'); = implode(",",$this->input->post('type')); 。你不想改变任何东西。它会工作
【解决方案3】:

如果您的下拉框是多选的,那么您必须在选择属性的名称中使用数组。

<select name="type[]" multiple>

您将在 post 变量中获得所有选定的值,例如

<?Php $_POST["type"]; ?>

【讨论】:

  • 你能看看这个链接吗
【解决方案4】:

我以前也遇到过这个问题,但我在服务器端有一个解决方法。

通常你会得到你的数组值,在你的例子中,在 $_POST['type'] 中,对吗? 所以你想做的就是这样......

$type = implode(',', $_POST['type']);

并将其作为逗号分隔值保存到您的数据库中。 每次在表单中显示这些字段时,您会将它们转换回数组形式并循环遍历它们中的每一个,以便它们默认被选中。

$type = explode(',', $_POST['type']);

我将只使用 $_POST 变量来保持一致性,但我想你已经明白了。希望这会有所帮助!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多