我正在尝试使用MySQL
更新Codeigniter
表。
我的型号代码是:
function update_customer_records($updatedrow)
{
$this->db->where('id',$this->input->post('id'));
$this->db->update('customers',$updatedrow);
}
我的观点是:
$attributes=array(
'name'=>'updatecustomer',
'id'=>'updatecustomer',
);
echo form_open('masterdata/manage_customers',$attributes);
?>
<table>
<tr>
<td> </td><td> </td><td>Customer Name</td><td>postalcode</td>
<tr>
<?php if(isset($records)) : foreach ($records as $row) : ?>
<tr>
<td>
<?php echo anchor('masterdata/customers_updated/'.$row->id, img(array('src'=>'images/delete_icon.png','border'=>'0','alt'=>'Delete'))); ?>
</td>
<td>
<input type=checkbox name="editcustomer[]" id="editcustomer[]" value="<?php echo $row->id ?>">
</td>
<td>
<input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->customer_name ; ?>" >
</td>
<td>
<input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
</td>
</tr>
<?php endforeach ; ?>
</table>
<input type="submit" value="Update Selected">
<?php else : ?>
<h2> No Records Found</h2>
<?php endif; ?>
<?php echo form_close(); ?>
我的控制器是:
function manage_customers()
{
$data['title']="Manage Customers";
//query model to get data results for form
$data=array();
if($query=$this->model_master_data->get_records()){
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_manage_customers",$data);
$this->load->view("master_data/view_master_data_footer");
$editcustomer = $this->input->post('editcustomer');
if(isset($editcustomer)){
//begin outputting id of selected checkbox
foreach ($editcustomer as $row) :
echo $row;
$updatedrow=array(
'id'=>$row,
'postalcode'=>'44444'
);
$this->model_master_data->update_customer_records($updatedrow);
endforeach;
}
我有两个问题:
一如既往地感谢您。
答案 0 :(得分:2)
首先,我在表单中找到了两个具有相同名称和ID的字段(如下所示),在一个字段中设置了它的值customer_name
,在另一个字段中设置了postalcode
。< / p>
<td>
<input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->customer_name ; ?>" >
--^^--
</td>
<td>
<input type="text" name="customername_<?php echo $row->id ?>" id="customername_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
--^^--
</td>
所以我认为(可能)根据它的值,第二个字段的名称和id应为postalcode
。
此外,您不必担心foreach
循环,因为循环内的代码只有在表单上有复选框时才会运行,因为未提交未选中的复选框但您可以检查使用以下代码运行循环
if( $this->input->post('editcustomer') != false )
{
foreach ($editcustomer as $row)
{
// code here
}
}
如果找不到if
或未随表单提交,则editcustomer
条件将返回false。此外,您的表单中没有id
字段,在这种情况下您无法使用$this->input->post('id')
,因此如果您需要检查模型的where clause
中的复选框ID,那么您可以使用
在控制器中:
if( $this->input->post('editcustomer') != false )
{
$this->load->model('model_master_data');
foreach ($editcustomer as $row_id)
{
$data = array( 'postalcode' => '44444' );
$this->model_master_data->update_customer_records( $row_id, $data );
}
}
我认为你不需要传递'id'=>$row,
因为你可能不想更新这个字段。此外,您应该在更新记录之前使用form validation检查表单输入(您可以设置绑定用户输入邮政编码所需的邮政编码字段)。
在模型中:
function update_customer_records( $id, $data )
{
$this->db->where( 'id', $id );
$this->db->update( 'customers', $data );
}
所以它会做这样的事情(伪代码)
update the customers table set `postalcode` = '44444' where `id` = $id
更新 我想你也可以使用update_batch。
在控制器中:
if( $this->input->post('editcustomer') != false )
{
$data = array();
foreach ($editcustomer as $row_id)
{
$data[] = array( 'id' => $row_id, 'postalcode' => '44444';
}
$this->load->model('model_master_data');
$this->model_master_data->update_customer_records( $data );
}
在模型中:
function update_customer_records( $data )
{
$this->db->update_batch('customers', $data, 'id');
}
答案 1 :(得分:1)
使用"Codeigniter update mysql table from form with CI"重复主题?
如果未选中复选框,如何停止foreach运行。
如果未选中复选框,则无需停止foreach运行。
因为$editcustomer
变量只包含复选框。
如何正确地将数组传递给模型以便更新运行?
你的模特错了。它应该是:
public function update_customer_records($updatedrow)
{
$this->db->update('customers', $updatedrow);
}
你不需要写$this->db->where('id',$this->input->post('id'));
(这是错误的,因为你不能在你的模型中使用$ this-&gt; input-&gt; post()),因为你已经通过{{1} } id
。
编辑:对不起,我太快读了你的代码!
$updaterow
......是对的。或者,您可以用更短的方式编写它:
function update_customer_records($updatedrow)
{
$this->db->where('id',$this->input->post('id'));
$this->db->update('customers',$updatedrow);
}