繁体   English   中英

我在Codeigniter中设计了一个注册页面,但是我的表单验证不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM