关于ci中的表单提交问题
codeIgniter是一种PHP开源框架,它会自带一些表单验证的功能,安全过滤等等。
这里的验证字段对应的是网页中的表单,而不是数据库中的字段,这一点要认清楚了。可以通过
$this->load->library('form_validation');
来加载验证辅助函数,通过
$this->form_validation->set_rules('username', 'Username', 'required');
来对username进行验证,这里的username对应的是表单中的属性,而不是数据库中username。
if ($_POST) {
//加载验证辅助函数
$this -> load -> helper(array('form', 'url'));
$this -> load -> library('form_validation');
//对表单进行过滤验证处理
$this->form_validation->set_rules('name', 'Name', 'trim|strip_tags|required|max_length[40]|xss_clean');
$this->form_validation->set_rules('company', 'Company Name', 'trim|strip_tags|max_length[150]|xss_clean');
$this->form_validation->set_rules('country', 'Country', 'trim|strip_tags|max_length[140]|xss_clean');
$this->form_validation->set_rules('email', 'Email', 'trim|strip_tags|required|max_length[140]|xss_clean');
$this->form_validation->set_rules('title', 'Title', 'trim|strip_tags|max_length[140]|xss_clean');
$this -> form_validation -> set_rules('phone', 'Telephone', 'trim|strip_tags|max_length[40]|xss_clean');
$this->form_validation->set_rules('desc', 'Message', 'trim|strip_tags|xss_clean');
if ($this -> form_validation -> run() == FALSE) {
redirect($_SERVER['HTTP_REFERER']);
} else {
//如果通过验证,将获取的数据保存
//获取过滤后的数据
$name = $this -> input -> post('name');
$company = $this -> input -> post('company');
$email = $this -> input -> post('email');
$phone = $this -> input -> post('phone');
$country = $this -> input -> post('country');
$title = $this -> input -> post('title');
$desc = $this -> input -> post('desc');
if (!$title) {
$title = "a new contact message has been arrived";
}
$data = array('name' => $name, 'company_name' => $company,
'email' => $email, 'country' => $country, 'title' => $title,
'tel' => $phone, 'message' => $desc);
$this -> db -> insert('contact', $data);
$this->session->set_flashdata('contact_success', 'your request has been sent successfully,
we will contact you via email in a short time!');
redirect($_SERVER['HTTP_REFERER']);
}
上面的代码是对表单进行验证的代码,表单的字段与数据库字段有一点点区别,对其进行验证时,要以表单字段为基准。而且获取数据,要在验证之后获取,否则保存的数据库的信息,还是过滤之前的信息,比如有空格,比如有<br>等等。这是一个注意点。
要能够正确的理解表单验证的原理,编程的时候,才不会出错。今天验证电话时,我用的是数据库中的字段tel,而不是表单中的字段phone,结果怎么用都没有效果。非常苦恼。