使用验证电子邮件注册,但提交时插入双重数据


registers with the verification email , but when submitted insert double data

仍然继续我发布的项目。注册验证电子邮件时遇到了一些麻烦。当前运行正常:注册验证电子邮件,发送到电子邮件目的地。但我看到数据库中有两个插入的数据(提交时(相同。我的剧本有什么问题吗?

这是我的控制器

function submit() {
    $_POST['dob'] = $_POST['year'].'-'.$_POST['month'].'-'.$_POST['day'];
    $firstname = $this->input->post('firstname');
    $lastname = $this->input->post('lastname');     
    $password = $this->input->post('password');
    $email = $this->input->post('email');
    $dob = $this->input->post('dob');
    $jkl = $this->input->post('jkl');   
    $lastlogin = $this->input->post('lastlogin');       
    $data = array(
        'firstname' => $firstname,
        'lastname' => $lastname,
        'password' => $password,
        'email' => $email,  
        'dob' => $dob,
        'jkl' => $jkl,
        'lastlogin' => $lastlogin,
        'active' => 0
    );
    $this->m_register->add_account($data);  
    $id = $this->m_register->add_account($data);
    $encrypted_id = md5($id);
    $this->load->library('email');
    $config = Array(
    'protocol' => 'smtp',
            'smtp_host' => 'ssl://smtp.gmail.com',
            'smtp_port' => 465,
            'smtp_user' => '*******@*****.com ',
            'smtp_pass' => '**********',
            'mailtype'  => 'html', 
            'charset' => 'utf-8',
            'wordwrap' => TRUE
        );      
           $this->load->library('email', $config);
           $this->email->set_newline("'r'n");
           $email_setting  = array('mailtype'=>'html');
           $this->email->initialize($email_setting);
           $this->email->from('*****@******.COM', 'RRR');
           $this->email->to($email);
           $this->email->subject('Confirmation Email');
           $this->email->message("WELCOME TO RRRR <br><p></p>Hallo $firstname $lastname <br><br><br><p>Terimakasih telah melakuan registrasi dengan:<br><br><p>
                       Username   = $email<p>
                       Password   = $password
                       <br><br>
                       <p>
                       untuk memverifikasi akun silahkan klik tautan dibawah ini</p><br><br>"
                       .site_url("login/register/verification/$encrypted_id")."
                       <br><br><br>
                       <p></p><br>
                       <p>Thanks</p>Admin ");

    if($this->email->send())
    {
    $data = array ( 'isi' => 'login/vsuccess');
            $this->load->view('layout/wrapper',$data);
    }else
    {
    $data = array ( 'isi' => 'login/vgagal');
            $this->load->view('layout/wrapper',$data);
    }

}   

这是我的型号

    function add_account($data){
        $this->load->database();
        $this->db->insert('user',$data);
        return  mysql_insert_id();
    }
$this->m_register->add_account($data);  
$id = $this->m_register->add_account($data);

检查代码中的这两行,删除:

$this->m_register->add_account($data(;

它会起作用的。

我不完全理解这个问题,但你有没有注意到你似乎在数据库中插入了两次数据?

$this->m_register->add_account($data);  
$id = $this->m_register->add_account($data);

因为您要调用ad_account((两次。

$this->m_register->add_account($data);  
$id = $this->m_register->add_account($data);
$this->m_register->add_account($data);  
$id = $this->m_register->add_account($data);

显然,您在数据库中插入$data两次:(

$this->m_register->add_account($data);调用m_register模型中的add_account()函数。使用$id = $this->m_register->add_account($data);,您可以第二次调用它,但也可以捕获返回的数据。这应该是您在数据库中看到这两个插入的原因。

删除第一个调用,只留下$id = $this->m_register->add_account($data);,应该可以解决问题。

我建议在您的控制器中添加表单验证,您可以使用电子邮件的回调函数来检查该电子邮件是否已存在于您的用户表中。这样,用户就不能用同一封电子邮件注册两次。