繁体   English   中英

无法将多选数据存储到数据库

[英]unable to store the multiselect data to database

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

    //----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>

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

您能否提及您的多选内容以哪个名称发布,而我找不到您的视图页面来检查下拉菜单中提及的属性

像这样更改您的多选零件。

<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[]因此您将获得所有选定的选项。

UPDATE

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保存为表格中的逗号分隔。

如果下拉框为multiselect,则必须在select属性名称中使用数组。

<select name="type[]" multiple>

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

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

我之前也遇到过这个问题,但是我在服务器端进行了工作。

通常,您会得到数组值,在您的情况下,该值在$ _POST ['type']中 ,对吗? 所以你想做的就是这样

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

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

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

我将只使用$ _POST变量来保持一致性,但我想您已经知道了。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM