1

2 つのビューと 1 つのコントローラーを使用して、検証付きの登録フォームを作成するためのチュートリアルに従いました。

これをコントローラーに書きました:

function index()
{
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[3]|max_length[16]|xss_clean|callback_username_check');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|matches[passconf]|md5');
    $this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('register_form');
    }
    else
    {
        $this->load->view('register_success');

        $data = array(
        'IDUser' => NULL ,
        'Username' => "$username" ,         
        'Password' => 'password' ,
        'Email' => 'email' ,
        'Gender' => 'gender' ,
        'Birthday' => 'bday' ,
        );

        $this->db->insert('Accounts', $data);

    }


}

まず、機能する SQL 挿入を実行します。その後、検証。それにもかかわらず、データベースからロードされた値は検証からのものではありません。代わりに、それらは配列内の同じプレーン テキストです。

POST を使用してフォーム/ビューから値を直接取得したくありません。それは無意味です。私は何をしますか?私は Codeigniter を初めて使用し、OOP PHP にはあまり詳しくありません。

4

2 に答える 2

2

Codeigniter Input クラスを使用するだけです: http://ellislab.com/codeigniter/user-guide/libraries/input.html

だからあなたの場合:

$username = $this->input->post('username');
$password = $this->input->post('password');
$passconf = $this->input->post('passconf');
$email    = $this->input->post('email');
于 2013-08-09T17:25:21.610 に答える
0

dragu は正しいですが、次の形式を使用してください:

 $username = $this->input->post('username', TRUE); 

TRUE は、間違いなく必要なセキュリティ機能である XSS clean に codeigniter を指示します。それが、フォーム検証に XSS clean を入れる理由でもあります。年の例から:

 $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[3]|max_length[16]|xss_clean|callback_username_check');

フォームが検証に失敗した場合、CI は結果をフォームに再度表示できます。検証で xss_clean を使用すると、これらの値が消去されます。

于 2013-08-09T23:52:33.183 に答える