我在CodeIgniter中提交我的帖子表单,但我只是提交了最后一个表格行。 这里有人知道为什么吗?
HTML看起来像这样:
<form action="<?php echo base_url()."index.php/admin/myform"; ?>" method="post">
<table>
<?php foreach($arrays as $row) { // 10 times <tr></tr> ?>
<tr>
<td><input type="hidden" name="id" value="<?php echo $row->id; ?>"><input type="text" name="colOne" value="<?php echo $row->ColOne; ?>"> <input type="text" name="colTwo" value="<?php echo $row->ColTwo; ?>"></td>
</tr>
<?php } ?>
<tr>
<td align="center"><input style="width:100%;" type="submit" name="submit" value="Save"></td>
</tr>
</table>
</form>
这是Controller内容: $ data = array();
if(isset($_POST['submit'])) {
$sql = $this->db->query("UPDATE myWebApp
SET ColOne = '".$this->input->post('colOne')."',
ColTwo = '".$this->input->post('colTwo')."'
WHERE id = ".$this->input->post('id'));
if($sql) {
$data = array('Status' => $this->input->post());
// $this->input->post() contains always only the last array (the 10th) instead of all ten arrays
} else {
$data = array('Status' => 'No success. Sorry.');
}
}
答案 0 :(得分:2)
您的输入全部共享&#34;名称&#34;属性:
<tr>
<td><input type="hidden" name="id"...
</tr>
对于HTML,它是计数输入的名称。如果要避免覆盖,则需要将名称设置为动态。
也许有人这样?
<tr>
<td>
<input type="hidden" name="id_<?php echo $row->id; ?>" value="<?php echo $row->id; ?>">
<input type="text" name="colOne_<?php echo $row->id; ?>" value="<?php echo $row->ColOne; ?>">
<input type="text" name="colTwo_<?php echo $row->id; ?>" value="<?php echo $row->ColTwo; ?>">
</td>
</tr>
...假设$ row-&gt; id是数据库唯一ID。
答案 1 :(得分:0)
您的所有字段都具有相同的名称,因此它们都被覆盖。您需要将名称更改为id[]
(依此类推)。 []
使PHP将其视为一个数组。
<td>
<input type="hidden" name="id[]" value="<?php echo $row->id; ?>">
<input type="text" name="colOne[]" value="<?php echo $row->ColOne; ?>">
<input type="text" name="colTwo[]" value="<?php echo $row->ColTwo; ?>">
</td>
这样做会使$this->input->post('colOne')
,$this->input->post('colTwo')
和$this->input->post('id')
成为数组。