![](/img/trans.png)
[英]Codeigniter controller prevent entire page from reloading when form is validating
[英]How to access data from form validating controller in codeigniter?
我按照教程制作了帶有驗證的注冊表單,其中包含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。
您只需要使用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');
dragu是正確的,但請使用以下格式:
$username = $this->input->post('username', TRUE);
TRUE告訴Codeigniter XSS clean,這是您絕對想要的安全功能。 這就是為什么您將XSS放在表單驗證中的原因。 從您的示例:
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[3]|max_length[16]|xss_clean|callback_username_check');
如果表單驗證失敗,則CI可以再次在表單中顯示結果。 在驗證中使用xss_clean會清除這些值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.