更新控制器/未定义变量上的Codeigniter错误

时间:2012-10-02 19:00:00

标签: php codeigniter

我有一个简单的使用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>

2 个答案:

答案 0 :(得分:1)

1。你正在克隆密钥的数组键:坏

为什么要这样构建$data_customer数组呢?除了添加的$_POST键之外,最终结果看起来与'active'完全相同。

如果你真的想要克隆数组,只需写:

$data_customer = $_POST;
$data_customer['active'] = 1;

当然,这对您提交给服务器的值的更改更具抵抗力。例如,如果您决定在将来发送中间名,则无需维护。

2。 if($_POST) ...

if($_POST)将始终返回TRUE,因为$_POST是全局的,if始终执行。你最好使用CodeIgniter的$this->input->post(),如果用户没有提交帖子数据,则返回FALSE

3。你的错误

您需要将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()函数