使用 codeigniter 将具有相同输入名称的表单输入插入数据库行

Posted

技术标签:

【中文标题】使用 codeigniter 将具有相同输入名称的表单输入插入数据库行【英文标题】:Insert form inputs with the same input name into database rows using codeigniter 【发布时间】:2017-03-20 18:41:21 【问题描述】:

我有一个具有相似表单输入名称的表单,我想将它插入到数据库表的不同行中。但是当我提交表单时,不会插入具有相似表单输入名称的输入。

这是我的看法

<div class="row">

          <div class="col-xs-12">
            <div class="item-block">
              <div class="item-form">

                <button class="btn btn-danger btn-float btn-remove"><i class="ti-close"></i></button>

                <div class="row">
                  <div class="col-xs-12 col-sm-6">
                    <div class="form-group">
                      <input type="text" name="skills_name[]" class="form-control" placeholder="Skill name, e.g. html">
                    </div>
                  </div>

                  <div class="col-xs-12 col-sm-6">

                    <div class="form-group">
                      <div class="input-group">
                        <input type="text" name="skills_proficiency[]" class="form-control" placeholder="Skill proficiency, e.g. 90">
                        <span class="input-group-addon">%</span>
                      </div>
                    </div>

                  </div>
                </div>

              </div>
            </div>
          </div>

          <div class="col-xs-12 duplicateable-content">
            <div class="item-block">
              <div class="item-form">

                <button class="btn btn-danger btn-float btn-remove"><i class="ti-close"></i></button>

                <div class="row">
                  <div class="col-xs-12 col-sm-6">
                    <div class="form-group">
                      <input type="text" name="skills_name[]" class="form-control" placeholder="Skill name, e.g. HTML">
                    </div>
                  </div>

                  <div class="col-xs-12 col-sm-6">

                    <div class="form-group">
                      <div class="input-group">
                        <input type="text" name="skills_proficiency[]" class="form-control" placeholder="Skill proficiency, e.g. 90">
                        <span class="input-group-addon">%</span>
                      </div>
                    </div>

                  </div>
                </div>

              </div>
            </div>
          </div>

          <div class="col-xs-12 text-center">
            <br>
            <button class="btn btn-primary btn-duplicator">Add experience</button>
          </div>


        </div>

      </div>
    </section>
    <!-- END Skills -->

控制器:

function _get_skills_data()

    $data4['skills_name'] = $this->input->post('skills_name', TRUE);
    $data4['skills_proficiency'] = $this->input->post('skills_proficiency', TRUE);
    $session_data = $this->session->userdata('logged_in');
    $data4['user_id'] = $session_data['user_id'];

    return $data4;



if ($this->form_validation->run($this) == FALSE)
            
                    $this->add_resume();
            
            else
            

                    $data4 = $this->_get_skills_data();


                    $this->User_model->insert_resume('skills',$data4);

                    $this->session->set_flashdata('message', '<div class="alert alert-success">Resume Added</div>');


                    redirect('user/manage_resume', 'refresh');
            

型号:

function insert_resume($table, $data)

$query = $this->db->insert($table, $data);
return $this->db->insert_id();

请问我做错了什么,我已经阅读了一些对我不起作用的问题。谢谢!

【问题讨论】:

首先忘记 CI 尝试在核心 php 和 html 中制作表单,然后发布表单,然后在 ci 中尝试 在模型中写 echo $this-&gt;db-&gt;last_query()return 之前。查看构建了什么查询。 帖子skills_name[] 以数组形式出现,您需要循环数组并以这种方式构建插入脚本。目前我认为您正在尝试将数组插入数据库。 是的,我正在尝试将数组插入不同的数据库行。我试过循环,我得到数组到字符串的转换错误 echo $this->db->last_query() 不起作用 【参考方案1】:

根据 Blinkydamo 的评论,您需要遍历您的帖子数据,因为您尝试将这些作为数组插入

试试这样的:

function _get_skills_data()

    $arrData = array();
    $arrPostSkillsName = $this->input->post('skills_name', TRUE);
    $arrPostSkillsProficiency = $this->input->post('skills_proficiency', TRUE);
    $session_data = $this->session->userdata('logged_in');

    $count = count($arrPostSkillsName);

    for($i=0;$i<$count;$i++)
    
        $arrItemData = array();
        $arrItemData['skills_name'] = $arrPostSkillsName[$i];
        $arrItemData['skills_proficiency'] = $arrPostSkillsProficiency[$i];
        $arrItemData['user_id'] = $session_data['user_id'];

        $arrData[] = $arrItemData;
    

    return $arrData;

和你的第二个控制器函数 sn-p

if ($this->form_validation->run($this) == FALSE)

    $this->add_resume();

else

    $arrData = $this->_get_skills_data();
    foreach($arrData AS $arrItemData)
    
        $this->User_model->insert_resume('skills',$arrItemData);
    
    $this->session->set_flashdata('message', '<div class="alert alert-success">Resume Added</div>');
    redirect('user/manage_resume', 'refresh');

【讨论】:

但是它在数据库中添加了一个额外的空输入,它可能来自哪里 我不知道-您必须打印出数组-但我认为问题是,您将html表单中的字段留空;也许你检查一下 _get_skills_data 函数是否设置了数据 谢谢@sintakonte

以上是关于使用 codeigniter 将具有相同输入名称的表单输入插入数据库行的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个

如何在 [codeigniter] 中上传具有随机名称规则的图像

使用 codeigniter 在数据库中获取具有相同值的列

如何使用多个具有相同名称的表单输入?

如何在 Codeigniter 中组合具有相同页眉和页脚的视图页面?

使用 Laravel 测试两个具有相同输入名称的表单