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 输入类: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 告诉 codeigniter 清除 XSS,这是您绝对想要的安全功能。这也是为什么您将 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 回答