我使用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>
tr 1的值为:翻译&amp; 搜索&amp; 电子邮件
tr 2的值为:电话&amp; 聊天&amp; 商家
tr 3的值是: jimi
我在json_encode()
和tr 1
上使用tr 2
对数据进行编码并将其一起插入数据库。 tr 3
不在该数组中,它是单独的值:
$data = array(
'units' => json_encode(
array(
'name' => $this -> input -> post('name'),
'explanation' => $this -> input -> post('explanation'),
'tv' => $this -> input -> post('tv')
)
),
'user' => $this -> input -> post('user')
);
$this -> db -> insert('hotel_submits', $data);
这里的问题是只有值“tr 2”插入到数据库中 我希望将值(tr 1和tr 2)一起插入数据库中。
我在数据库中:
{"name":Phone,"explanation":Chat,"tv":Business}
我想要这个
{"name":Translate,"explanation":Searches,"tv":Email, "name":Phone,"explanation":Chat,"tv":Business}
更新
如果每个checkbox
中有多个tr (1 & 2)
,其中一些checked
,则如何在数据库中插入(它们),如下所示:
<table>
tr 1:
<tr>
<input name="name" value="Translate">
<input name="explanation" value="Searches">
<input name="tv" value="Email">
<input type="checkbox" name="checkbox[]" value="Mootools" checked>
<input type="checkbox" name="checkbox[]" value="PowerTools" checked>
<input type="checkbox" name="checkbox[]" value="Read">
</tr>
tr 2:
<tr>
<input name="name" value="Phone">
<input name="explanation" value="Chat">
<input name="tv" value="Business">
<input type="checkbox" name="checkbox[]" value="Clientcide">
<input type="checkbox" name="checkbox[]" value="Library" checked>
<input type="checkbox" name="checkbox[]" value="Framework" checked>
</tr>
tr 3:
<tr>
<input name="user" value="jimi">
</tr>
</table>
我想要数据库:
[{“name”:“翻译”,“解释”:“搜索”,“电视”:“电子邮件”,
"checkbox":["Mootools","PowerTools"]
},{“姓名”:“电话”,“解释”:“聊天“,”电视“:”商家“,"checkbox":["Library","Framework"}
]
答案 0 :(得分:1)
由于行中的输入共享其名称,因此最后一行中的输入会重写其他输入的值。要解决此问题,您需要使用[]
指定名称并迭代发布的数据:
<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);
这段代码并不理想,但应该有效,所以这是一个很好的起点。此外,您无法拥有json_encode
所需的内容,因此它看起来像
[{name:..., explanation:..., tv:...},{name:..., explanation:..., tv:...}]
事实上你可以,但是你很难生成和解析它。
更新,这很难。我们的想法是明确地为您的输入分配索引,即
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]
);
}