2013-04-17 25 views
5

私はプロではありませんが、PHPの周りを知っています。私はCodeigniterを初めて使用しています。Codeigniterフォーム投稿と検証

は、これらのチュートリアルを通過されて:http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

OK、私は編集ページに移動するユーザー名をクリックすると、ユーザーが一覧表示されますページ、そのページのビーイングのURLを持っている:ユーザー/ index.phpを/編集/ 1(1はユーザーID)

編集ページでは、このフォームにはいくつかの部分が含まれており、各部分はDB内の異なる表から取り込まれます。以下のように編集のための私のコントローラは、次のとおりです。

function edit() { 

     //load model 
     $this->load->model('users_model'); 

     //assign user data from DB 
     $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
     //get users Password, using username from above 
     $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

     $data['page_content'] = 'pages/users_edit'; 
     $this->load->view('template/template', $data); 
    } 

お知らせ: $data['data_user']

私は、その後に、フォームを移入することができます $data['data_user_password']は、別のテーブルからユーザーのパスワードが含まれている名前、ユーザー名、電子メールなどのユーザーデータが含まれていますusers_edit.php、これはすべて正常に動作します。私は、次のようにして、このデータにアクセスしてい :

if (is_array($data_user)) { 
    foreach($data_user as $user) 
    { 
     $userID   = $user->id; 
     $userName  = $user->Name; 
     $userUserName = $user->UserName; 
     $userMail  = $user->Mail; 
     $userDepartment = $user->Department; 
     $userWorkPhone = $user->WorkPhone; 
     $userHomePhone = $user->HomePhone; 
     $userMobile  = $user->Mobile; 

    } 
} 
//user password 
if (is_array($data_user_password)) { 
    foreach($data_user_password as $user) 
    { 
     $userPassword = $user->value; 
    } 
} 

Name: 
<?php echo form_input('name', set_value('name', $userName), 'id="name" class="inputLong"'); ?> 

私が投稿した場合、私が送信している:これまでにこのページのindex.phpを/ユーザー/更新

私のコントローラは、次のとおりです。今の

function update() { 

     echo '<pre>'; 
     print_r($_POST); 
     echo '</pre>'; 
     //exit(); 

     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('name', 'Name', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('pages/users_edit'); 
     } 
     else 
     { 
      $this->index(); 
     } 

    } 

、私はちょうど私が私が(の$ this - > form_validation->場合を処理していないと思うユーザーが「名前」フォームの入力=名ID =名

の検証をテストしていますrun()== FALSE )その部分が正しくフォームにデータが含まれていれば、渡され、インデックスにリダイレクトされます。名前を空白のままにすると、正しく編集ページが処理されません。またはわかりません。 post配列を使ってリロードされ、関数edit()のように$ dataを渡さないようにします。

名フィールドが必要です:戻るそれはvalidation_errorsを示すべきであるフォームページ、その上映に

これは、その上映PHPエラー、あらかじめ入力されなければならないフィールドの残りのために、しかし、正しいです:あなたの検証の後、)あなたの機能更新(インサイド

A PHP Error was encountered 

Severity: Notice 

Message: Undefined variable: userUserName 

Filename: pages/users_edit.php 

Line Number: 50 
+0

はい、これでフォームのページがロード行います= "name"> – Mark

+0

"serUserName"変数を定義していることを確認してください。 '$ data_user'の中の – Suleman

+0

のように、あるユーザのデータを受け取った場合は、それをループしないでください。 –

答えて

0
$this->load->view('pages/users_edit'); 

ますビューをロードしますが、データ変数にはパスしません。だから、あなたはあなたのビューファイルにアクセスできる任意の変数を持っていません。..

あなたは、変数あなたの関数の編集と同様に()を設定する必要があります。

$this->load->view('template/template', $data); 

を現在ありません変数を$ data_userに設定してループすることはできません。

+0

ビデオチュートリアルとユーザーガイド:http://ellislab.com/codeigniter/user-guide/libraries/form_validation.htmlで私は理解できません。彼らはページをリロードしていません。彼らはCodeigniterがあなたのためにそれを世話すると言うビデオ.. ??これは、フォームを再度ロードする前に、投稿されたデータで$ data ['data_user']と$ data ['data_user_password']の配列を再構築する必要があることを意味します。 – Mark

+0

編集ページに行くと、ユーザーデータでコントローラー - > EDIT()関数をロードします。フォームを送信すると、そのユーザーデータが設定されていないController - > UPDATE()関数に送信されます。それにアクセスしない:) – Svetoslav

1

あなたの検証機能は、更新機能を持たずに編集機能の中で行うことができます。検証にエラーがあると、codeigniterはあなたのフィールドを再投入するために担当します。 <入力されたID =「名前」クラス=「inputLong」タイプ=「テキスト」値=「マーク」名:検証がOKであれば、あなたはあなたの次のステップ

function edit() { 

    //load model 
    $this->load->model('users_model'); 

    //assign user data from DB 
    $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
    //get users Password, using username from above 
    $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

    $data['page_content'] = 'pages/users_edit'; 
    $this->load->view('template/template', $data); 

    //is the form submitted 
    if(form submit){ 
     if ($this->form_validation->run() == TRUE) 
     { 
      $this->index(); 
     } 
     else 
     { 
     $this->load->view('pages/users_edit', $data); 
     } 
    } 
} 
関連する問題