Bagus Bala Bagus Bala - 4 months ago 26
PHP Question

Can't Confirm an Email Account Codeigniter

i'm new in Codeigniter. I'm try to make login and registration user with email address. Link activation has been sended to user , and if user want to active their account its always failed to confirm the account.
Any help ?

Here is my code.

My Model

class Voter_model extends CI_Model
{


function __construct()
{
// Call the Model constructor
parent::__construct();
}

//get the username & password from tbl_usrs
function get_user($username, $password)
{
$sql = "select * from user where username = '" . $username . "' and password = '" . $password . "' and status = '1'";
$query = $this->db->query($sql);
return $query->num_rows();
}


//insert into user table
function insertUser($data)
{
return $this->db->insert('user', $data);
}

//send verification email to user's email id
function sendEmail($to_email)
{
$from_email = '@gmail.com'; //change this to yours
$subject = 'Aktivasi Akun';
$message = 'Dear'. $username .'<br /><br />Please click on the below activation link to verify your email address.<br /><br />
'. site_url('voter/voter_register/verify/'.md5($to_email)) . '<br /><br /><br />Thanks<br />Admin, Gus bala';

//configure email settings
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.googlemail.com'; //smtp host name
$config['smtp_port'] = '465'; //smtp port number
$config['smtp_user'] = $from_email;
$config['smtp_pass'] = ''; //$from_email password
$config['mailtype'] = 'html';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$config['newline'] = "\r\n"; //use double quotes
$this->email->initialize($config);

//send mail
$this->email->from($from_email, 'Admin Evoting');
$this->email->to($to_email);
$this->email->subject($subject);
$this->email->message($message);
return $this->email->send();
}

//activate user account
function verifyEmailID($key)
{
$data = array('status' => 1);
$this->db->where('md5(email)', $key);
$this->db->update('user', $data);
}


and my controller for the user.

<?php
class Voter_register extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('form','url'));
$this->load->library(array('session', 'form_validation', 'email'));
$this->load->database();
$this->load->model('Voter_model');
}

function index()
{
$this->register();
}



function register()
{
//set validation rules

$this->form_validation->set_rules('email', 'Email ID', 'trim|required|valid_email|is_unique[user.email]');
$this->form_validation->set_rules('password', 'Password', 'trim|required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm Password', 'trim|required');

//validate form input
if ($this->form_validation->run() == FALSE)
{
// fails
$this->load->view('voter/voter_register');
}
else
{
//insert the user registration details into database
$data = array(
'fname' => $this->input->post('fname'),
'lname' => $this->input->post('lname'),
'email' => $this->input->post('email'),
'password' => $this->input->post('password'),
'username' => $this->input->post('username')
);

// insert form data into database
if ($this->Voter_model->insertUser($data))
{
// send email
if ($this->Voter_model->sendEmail($this->input->post('email')))
{
// successfully sent mail
$this->session->set_flashdata('msg','<div class="alert alert-success text-center">Registrasi Sukses, silakan cek e-mail Anda untuk melakukan konfirmasi dan aktivasi akun.</div>');
redirect('admin_voter');
}
else
{
// error
$this->session->set_flashdata('msg','<div class="alert alert-info text-center">Registrasi Sukses, gagal mengirim e-mail verifikasi.</div>');
redirect('admin_voter');
}
}
else
{
// error
$this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error. Please try again later!!!</div>');
redirect('admin_voter');
}
}
}

function verify($hash)
{
$this->load->helper('url');
$this->load->model('voter_model');

if ($this->voter_model->verifyEmailID($hash))
{

$this->load->view('voter/voter_aktivasiok');
}
else
{

$this->load->view('voter/voter_aktivasifail');
}
}
}
?>


Thanks for help me.

Answer

Note that $key is already MD5 converted in verifyEmailID() method than this will convert email in MD5 twice.

$this->db->where('md5(email)', $key); // $key already MD5

Because, you are using md5() function in your URL here:

site_url('voter/voter_register/verify/'.md5($to_email))

In your code, if you remove md5() method from your WHERE clause this will work as:

$this->db->where('email', $key);