Поскольку входные данные в ваших строках имеют общие имена, входные данные в последней строке перезаписывают значения других входных данных.Чтобы преодолеть это, вам нужно присвоить имена с помощью []
и перебрать опубликованные данные:
<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]
);
}