-1

Codeigniterを使用した単純なクラッドアプリケーションがあります。私はまだフレームワークを学ぼうとしています。しかし、Update Controllerでエラーが発生し、それを見つけることができないようです。

私が得ている3つのエラーは次のとおりです。

重大度:警告
メッセージ: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.キーの配列キーを複製しています:悪い

$data_customerなぜこのような配列をわざわざ構築するのですか?$_POST最終結果は、追加されたキーを除いて、とにかく同じように見え'active'ます。

本当にアレイのクローンを作成したい場合は、次のように記述してください。

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

もちろん、これはサーバーに送信する値の変更に対してもはるかに耐性があります。たとえば、将来ミドルネームを送信することにした場合、メンテナンスは不要です。

2 if($_POST)...。

if($_POST)はグローバルであるTRUEため、常に戻ります。は常に実行されます。ユーザーが投稿データを送信しなかった場合に返されるCodeIgniterを使用することをお勧めします。$_POSTif$this->input->post()FALSE

3.あなたのエラー

id関数にを渡す必要がありupdate_customer()ます。http://localhost/your_app/customers/update_customer/5これは、例として、POSTリクエストをに送信することで実現できます。

または、を使用してフォームに非表示の値としてIDを添付し、<input type='hidden' name='id' value='5'/>それを配列で取得して、からパラメータ$this->input->post()を削除することもできます。$idupdate_customer($id)

これで最初の2つのエラーが解消されます。

$customerのインデックスが含まれていないため、最後のエラーがビューで発生していますid$this->customer->get_customer($id)使用による応答var_dump()を調べて、理由を確認してください。

于 2012-10-02T20:07:51.803 に答える
0

$ idパラメータをupdate()関数に渡していないようです

于 2012-10-02T19:10:49.577 に答える