我有一个带有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');
}
型号:
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>
1。您正在为以下键克隆数组键:坏
为什么要像这样构建$data_customer
阵列?除了添加了'active'
密钥之外,最终结果看起来与$_POST
完全相同。
如果你真的想克隆阵列,只需写:
$data_customer = $_POST;
$data_customer['active'] = 1;
当然,这对您提交给服务器的值的更改也更有抵抗力。例如,如果您决定在将来发送中间名,则无需维护。
2.if($_POST)
if($_POST)
将始终返回TRUE
,因为$_POST
是全局的,if
将始终执行。最好使用CodeIgniter的$this->input->post()
,如果用户没有提交帖子数据,它会返回FALSE
。
3.你的错误
您需要将一个id
传递到update_customer()
函数中。例如,这可以通过向http://localhost/your_app/customers/update_customer/5
发送POST请求来实现。
或者,您可以使用<input type='hidden' name='id' value='5'/>
将id附加为表单中的隐藏值,然后在$this->input->post()
数组中检索它,并从update_customer($id)
中删除$id
参数。
这将清除你的前两个错误。
最后一个错误出现在您的视图中,因为$customer
不包含id
的索引。使用var_dump()
检查来自$this->customer->get_customer($id)
的响应以找出原因。
似乎没有将$id参数传递给update()函数