[英]I'm designing a signup page in codeigniter but my form validation is not working
这是我的代码:
控制器/register.php
function register() {
$this->load->view('pages/register');
}
function validation() {
$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('email', 'Email', 'trim|required|is_unique[register1.email]');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
if ($this->form_validation->run() == FALSE) {
$this->load->view('pages/register');
} else {
$data = array(
'name' => $this->input->post('name'),
'email' => $this->input->post('email'),
'pass' => $this->input->post('password')
);
$result = $this->register_m->registration($data);
}
型号/register_m.php
function registration($data) {
foreach($data as $key => $value){
$a = explode(',', $key)[0];
}
$this->db->select('*');
$this->db->from('register1');
$this->db->where('email',email);
$this->db->limit(1);
$query = $this->db->get();
if ($query->num_rows() == 0) {
$this->db->insert('register1', $data);
if ($this->db->affected_rows() > 0) {
return true;
}
} else {
return false;
}
}
现在的问题是我不知道如何验证我的电子邮件。 该电子邮件是否已经注册过。 您能否也请访问我的代码,以告诉我在编码过程中是否出错。
使用is_unique[register1.email]
将为您查找register1表中的事件。 如果存在,它将标记错误。 请参阅用户指南中的表单验证错误。
所以在您的模型中,您有一个很大的错误...
注意:这未经测试
$this->db->where('email',email); // what is email? a constant??
function registration($data) {
// Does the email address already exist
$this->db->select('*');
$this->db->from('register1');
$this->db->where('email', $data['email']); // email is already in your data array
$this->db->limit(1);
$query = $this->db->get();
if ($query->num_rows() == 0) {
// No so we can save it
$this->db->insert('register1', $data);
if ($this->db->affected_rows() > 0) {
return TRUE;
}
} else {
// The email address already exists so leave
return FALSE;
}
}
而且您实际上并不需要在模型中再次检查电子邮件地址,但这取决于其他人可能会称呼它为无害……我不知道。
更新:需要考虑的事情...在传递数组时,您应该真正测试像'email'这样的索引确实存在。 在数据库更新和插入等中使用它之前,您应该测试所有期望的$ data条目是否存在。虽然在设计时,如果您对$ data条目有误,它将显示出来,以便您进行修复。 。
由于此注释代码缩进将是一个好主意。
在CodeIgniter中进行验证非常容易实现。
$this->form_validation->set_rules('name', 'Name', 'trim|required');
$this->form_validation->set_rules('email', 'Email', 'trim|required|is_unique[register1.email]');
$this->form_validation->set_rules('password', 'Password', 'trim|required');
Codeigniter将允许您将验证代码放入配置中。 为此,您需要在config
文件夹中创建form_validation.php
。
该文件如下所示。
$config = array(
'your_login_validation' => array(
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'required|trim'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|is_unique[register1.email]',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'trim|required'
)
)
);
and
function validation() {
if ($this->form_validation->run('your_login_validation') == TRUE) {
// this will directly check the validation and gives the error if fail.
} else {
// To back to view.
}
}
我还注意到,您正在创建一个post变量数组,分别获取每个post数据。 所以我建议您使用$data = $this->input->post();
它将立即为您提供所有发布数据。 因此,您的控制器将如下所示:
function validation() {
if ($this->form_validation->run('your_login_validation') == TRUE) {
$this->load->view('pages/register');
} else {
$data = $this->input->post();
$result = $this->register_m->registration($data);
if($result == TRUE){
// If you are doing login then you can set a session here
}
}
}
// Your model code
function registration($data) {
//You don't need to check email exists or not again. Codeigniter validation `is_unique` will take care of it.
$this->db->insert('register1', $data);
// You can use [ $this->db->last_query(); ] to chekc the last query execution for better understanding.
// Also you can get last inserted id by using [ $last_inserted_id = $this->db->insert_id(); ]
if ($this->db->affected_rows() > 0) {
return TRUE;
}
} else {
// The email address already exists so leave
return FALSE;
}
}
为了进行验证,您还可以访问CodeIgniter文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.