Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_encode()在数据库表中插入多个字符串POST时出现问题_Php_Codeigniter_Json - Fatal编程技术网

Php json_encode()在数据库表中插入多个字符串POST时出现问题

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>

我使用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>
<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]
    );
}