更新控制器/未定义变量时出现Codeigner错误



我有一个带有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()函数

最新更新