使用 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->db->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] 中上传具有随机名称规则的图像