5

私はプロではありませんが、PHP の使い方は知っています。Codeigniter は初めてです。

これらのチュートリアルを行っています: http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

ユーザー名をクリックすると編集ページに移動します。そのページの URL は index.php/users/edit/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/users/update

これまでのところ、このページのコントローラーは次のとおりです。

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();
        }

    }

今のところ、フォーム入力=名前ID=名前のユーザー「名前」の検証をテストしています

if ($this->form_validation->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
4

2 に答える 2

1

更新関数を使用する代わりに、編集関数内で検証を行うことができます。その場合、データはビューで引き続き使用でき、検証にエラーがある場合は、codeigniter が担当してフィールドを再入力します。検証に問題がなければ、次のステップに進みます

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);
         }
    }
}
于 2013-05-01T21:19:33.250 に答える
0
$this->load->view('pages/users_edit');

関数 update() 内で、検証後にビューをロードしますが、データ変数をそれに渡しません。したがって、ビューファイルでアクセスできる変数はありません..

関数 edit() と同じ方法で変数を設定する必要があります。

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

現在、変数 $data_user が設定されていないため、ループして使用することはできません..

于 2013-04-17T09:45:18.543 に答える