-1

我有一个带有 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>
4

2 回答 2

1

1. 你正在为 key: bad 克隆一个数组键

为什么要$data_customer像这样构造数组?$_POST除了添加的'active'密钥之外,最终结果看起来与任何方式都相同。

如果您真的想克隆数组,只需编写:

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

当然,这也更能抵抗您提交给服务器的值的变化。例如,如果您决定将来发送中间名,则它需要零维护。

2. if($_POST)...

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

3. 你的错误

您需要将 an 传递idupdate_customer()函数。例如,这可以通过向 发送 POST 请求来完成http://localhost/your_app/customers/update_customer/5

或者,您可以将 id 作为隐藏值附加到表单中<input type='hidden' name='id' value='5'/>,然后在$this->input->post()数组中检索它并$idupdate_customer($id).

这将清除您的前两个错误。

最后一个错误发生在您的视图中,因为$customer不包含id. $this->customer->get_customer($id)检查使用的响应var_dump()以找出原因。

于 2012-10-02T20:07:51.803 回答
0

似乎您没有将 $id 参数传递给您的 update() 函数

于 2012-10-02T19:10:49.577 回答