Php json_encode()在数据库表中插入多个字符串POST时出现问题
我使用jQuery添加新的输入。表中的每一行都包含几个输入,我想将数据作为数组添加到数据库中:Php json_encode()在数据库表中插入多个字符串POST时出现问题,php,codeigniter,json,Php,Codeigniter,Json,我使用jQuery添加新的输入。表中的每一行都包含几个输入,我想将数据作为数组添加到数据库中: <table> tr 1: <tr> <input name="name" value="Translate"> <input name="explanation" value="Searches"> <input name="tv" value="Email"> </tr> <br> tr 2: <tr>
<table>
tr 1: <tr>
<input name="name" value="Translate">
<input name="explanation" value="Searches">
<input name="tv" value="Email">
</tr>
<br>
tr 2: <tr>
<input name="name" value="Phone">
<input name="explanation" value="Chat">
<input name="tv" value="Business">
</tr>
tr 3: <tr>
<input name="user" value="jimi">
</tr>
</table>
这里的问题是,只有值“tr2”插入到数据库中。我希望将两个值(tr1和tr2)一起插入数据库中 我在数据库中有:
{"name":Phone,"explanation":Chat,"tv":Business}
我想要这个
{"name":Translate,"explanation":Searches,"tv":Email, "name":Phone,"explanation":Chat,"tv":Business}
更新:
如果每个tr(1和2)
中都有几个复选框
,并且其中一些复选框被选中,则如何将它们插入数据库中,如下所示:
tr 1:
tr 2:
tr 3:
我想在数据库中:
{"name":Phone,"explanation":Chat,"tv":Business}
[{“名称”:“翻译”、“解释”:“搜索”、“电视”:“电子邮件”、“复选框”:[“Mootools”、“PowerTools”]}、{“名称”:“电话”、“解释”:“聊天”、“电视”:“业务”、“复选框”:[“库”、“框架”}
]
由于行中的输入共享其名称,最后一行中的输入会重写其他输入的值。要克服这一问题,您需要使用
[]
分配名称,并迭代发布的数据:
<table>
tr 1: <tr>
<input name="name[]" value="Translate">
<input name="explanation[]" value="Searches">
<input name="tv[]" value="Email">
</tr>
<br>
tr 2: <tr>
<input name="name[]" value="Phone">
<input name="explanation[]" value="Chat">
<input name="tv[]" value="Business">
</tr>
tr 3: <tr>
<input name="user" value="jimi">
</tr>
</table>
$units = array();
$names = $this->input->post('name');
$explanations= $this->input->post('explanation');
$tvs= $this->input->post('tv');
//this works ONLY if you have equal number of names, explanations and tvs
foreach ($names as $idx=>$name){
$units[] = array(
'name'=>$name,
'explanation'=>$explanations[$idx],
'tv'=>$tvs[$idx]
);
}
$data = array('units'=>json_encode($units), 'user'=>$this -> input -> post('user'));
$this -> db -> insert('hotel_submits', $data);
事实上,您可以,但是您将很难生成和解析它
更新嗯,这很难。其思想是明确地为输入分配索引,即
tr1:name[0], explanation[0], tv[0], checkbox[0][],checkbox[0][],checkbox[0][]
tr2:name[1], explanation[1], tv[1], checkbox[1][],checkbox[1][],checkbox[1][]
循环就变成了
$checkboxes= $this->input->post('checkboxes');
foreach ($names as $idx=>$name){
$units[] = array(
'name'=>$name,
'explanation'=>$explanations[$idx],
'tv'=>$tvs[$idx],
'checkboxes'=>$checkboxes[$idx]
);
}
正如我要说的,让它们[]进来!这是一个完美主义者的免责声明。:)一个可能的改进是检查所有数组的长度是否相等,另一个改进是使用
进行迭代($i=0;$i是正确的。抱歉,我有新问题。请在第一篇文章中再次查看我的更新。没错,请回答最后一个问题:如何获取(select*from…
)这一行数据库中的唯一名称?此输出->翻译
&电话
tr1:name[0], explanation[0], tv[0], checkbox[0][],checkbox[0][],checkbox[0][]
tr2:name[1], explanation[1], tv[1], checkbox[1][],checkbox[1][],checkbox[1][]
$checkboxes= $this->input->post('checkboxes');
foreach ($names as $idx=>$name){
$units[] = array(
'name'=>$name,
'explanation'=>$explanations[$idx],
'tv'=>$tvs[$idx],
'checkboxes'=>$checkboxes[$idx]
);
}