1

ユーザーがメンバーになり、最小限のプロファイルを持つことができるサイトを構築しています。それにもかかわらず、このユーザーが自分の記録 (自己紹介、電子メール、電話番号など) を更新したい場合は、「プロファイルの編集」リンクが必要です。クリックすると、そのユーザーのデータベース レコードから値が入力された入力フィールドがフォームに読み込まれます。フィールドの値を変更し、[変更を保存] をクリックすると、それらがデータベースにコミットされます。

何度かやってみましたが、失敗し続けました。以下は、データをフォームにロードしようとしたコードです。

public function load_edit()
    {
        //check user logged in 
        if(($this->session->userdata('username')!=""))
        {
            $data;
            $result = $this->profileModel->load_user_editable_data($this->session->userdata('username'));
            //check user data loaded successfully
            if(isset($result))
            {
                //get the user information and store to $data array 
                foreach($result as &$value)
                {
                    $data = $value; 
                }

                $this->load->view('profile_edit', $data);
            }
        }else{
            $this->login();
        }       
    }

データベーステーブルのレコードを更新するには:

public function update_edit()
    {

         $this->form_validation->set_rules('fullname', 'الاسم الكامل', 'isset|required|alpha_dash');


        if(isset($_POST))
        {
            //check user logged in 
            if(($this->session->userdata('username')!=""))
            {
                //check that there are no form validation errors
                if($this->form_validation->run() == FALSE)
                {   
                    $data = $this->profileModel->load_user_editable_data($this->session->userdata('username'));
                    $this->load->view('profile_edit', $data);
                }else{
                    $result = $this->profileModel->update_profile($this->session->userdata('username'));
                    if($result){

                        $this->load->view('profile_edit', $result);             
                    }
                }
            }
        }else{
            $this->load->view('error');
        }   
    }

上記のコードの実行で直面した主な問題は、何らかの形で update_edit を実行すると、フィールドの条件が満たされているにもかかわらず、フォームの検証に失敗したことが常に通知されることです。

事前に助けてくれてありがとう:)

4

2 に答える 2

0

1 つのコントローラー関数でそれを行うことができ、より簡単に行うことができます。

public function edit($user_id = null) {

        $data['url'] = "edit/$user_id"; // URL
        $this->load->vars($data); // Load URL for FORM
        $user = $this->profileModel->get_user($user_id); // Select USER by ID

    if($this->input->post('save')) {
        $this->form_validation->set_rules('username', 'Username', 'required');
        if($this->form_validation->run()) {

            $user['username'] = $this->input->post('username'); // Get new username
            $this->profileModel->edit($user); // Edit
            // redirect somewhere. Edit done!
        }
    }

    $this->load->view('content', 'profile_edit', $user);
}

これが簡単な例です。セッションID、またはパラメータ付きのIDでそれを行うことができます(私がしたように)。

ご理解いただけると幸いです

于 2013-04-12T20:11:11.490 に答える