我有一个简单的使用Codeigniter的crud应用程序。我还在努力学习这个框架。但我在更新控制器中收到错误,似乎无法找到它。
我得到的三个错误是:
严重性:警告
消息:缺少Customers :: update_customer()的参数1
文件名:controllers / customers.php
行号:67
严重程度:通知
消息:未定义的变量:id
文件名:controllers / customers.php
行号:94
最后一个是表单操作的结果。
严重程度:通知
消息:未定义的索引:id
文件名:views / edit_customer.php
行号:16
“method =”post“>
控制器:
function update_customer($id){
$data['success']=0;
if($_POST){
$data_customer=array(
'first_name'=>$_POST['first_name'],
'last_name'=>$_POST['last_name'],
'phone'=>$_POST['phone'],
'email'=>$_POST['email'],
'website'=>$_POST['website'],
'business_name'=>$_POST['business_name'],
'business_add'=>$_POST['business_add'],
'business_cityState'=>$_POST['business_cityState'],
'cc_type'=>$_POST['cc_type'],
'cc_number'=>$_POST['cc_number'],
'cc_exp'=>$_POST['cc_exp'],
'cc_cvd'=>$_POST['cc_cvd'],
'billing_add'=>$_POST['billing_add'],
'billing_zip'=>$_POST['billing_zip'],
'package'=>$_POST['package'],
'assigned_zip_code'=>$_POST['assigned_zip_code'],
'active'=>1
);
$this->customer->update_customer($id,$data);
$data['success']=1;
}
$data['customer']=$this->customer->get_customer($id);
$this->load->view('header');
$this->load->view('edit_customer',$data);
$this->load->view('footer');
}
MODEL:
function update_customer($id, $data){
$this->where('id', $id);
$this->db->update('customers', $data);
}
最重要的观点:
<?php if($success==1){ ?>
<div class="successAlert">This customer has been updated.</div>
<? } ?>
<div class="mainForm">
<?php echo validation_errors(); ?>
<form action="<?=base_url()?>customers/update_customer/<?=$customer['id']?>" method="post">
<label for="first_name">First Name:</label>
<input type="input" name="first_name" value="" /><br />
<hr>
答案 0 :(得分:1)
为什么要这样构建$data_customer
数组呢?除了添加的$_POST
键之外,最终结果看起来与'active'
完全相同。
如果你真的想要克隆数组,只需写:
$data_customer = $_POST;
$data_customer['active'] = 1;
当然,这对您提交给服务器的值的更改更具抵抗力。例如,如果您决定在将来发送中间名,则无需维护。
if($_POST)
... if($_POST)
将始终返回TRUE
,因为$_POST
是全局的,if
将始终执行。你最好使用CodeIgniter的$this->input->post()
,如果用户没有提交帖子数据,则返回FALSE
。
您需要将id
传递给update_customer()
函数。作为示例,这可以通过将POST请求发送到http://localhost/your_app/customers/update_customer/5
来完成。
或者,您可以使用<input type='hidden' name='id' value='5'/>
将ID作为隐藏值附加到表单中,然后在$this->input->post()
数组中检索它,并从{{1}中删除$id
参数}}
这将清除你的前两个错误。
您的视图中发生了最后一个错误,因为update_customer($id)
不包含$customer
的索引。使用id
检查$this->customer->get_customer($id)
的回复,找出原因。
答案 1 :(得分:0)
好像你没有将$ id参数传递给update()函数