I am using the form validation functionality — it currently doesn’t allow a user to enter incorrect username and password parameters when creating an account. But it’s meant to bounce the user back to the signup screen. Instead they’re brought through to the home screen, and if I use a username that’s been used before it goes into the database anyway.
Signup controller:
class Signup extends CI_Controller {
function Signup() {
parent::__construct();
$this->load->model('membership');
}
function index() {
$this->load->view('shared/header');
$this->load->view('account/signuptitle');
$this->load->view('account/signupview');
$this->load->view('shared/footer');
}
function register() {
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|trim');
$this->form_validation->set_rules('password', 'Password', 'required|md5|trim');
$this->form_validation->set_rules('username', 'Username', 'callback_usernameTaken');
$username = $this->input->post('username');
$password = $this->input->post('password');
if ($this->form_validation->run()) {
$this->membership->newUser($username, $password);
$this->session->set_userdata('status', 'OK');
$this->session->set_userdata('username', $username);
redirect('home');
}
if ($this->membership->usernameTaken($username)) {
$this->load->view('shared/header');
$this->load->view('account/signuptitle');
$this->load->view('account/signupview');
$this->load->view('shared/footer');
} else {
$this->load->view('shared/header');
$this->load->view('account/signuptitle');
$this->load->view('account/signupview');
$this->load->view('shared/footer');
}
}
}
I think the if ($this->membership->usernameTaken($username)) statement needs to arranged a certain way could it possibly be an else if statement?
Membership Model:
class Membership extends CI_Model {
function Membership() {
parent::__construct();
}
function newUser($username, $password) {
$newMember = array('username' => $username,
'password' => $password);
$insert = $this->db->insert('membership', $newMember);
}
function usernameTaken($username) {
$this->db->select('*')->from('membership')->where('username', $username);
$query = $this->db->get();
if ($query->num_rows > 0) {
return true;
} else {
return false;
}
}
Thanks for the help again folks — I’ve been looking at similar issues on this site but I just found them too confusing
I believe when the register function runs, only this part of the code is executed before redirection.
try doing something like this.
if ($this->form_validation->run() && !$this->membership->usernameTaken($username)) {
this way it wont redirect and proceed to execute lines below it.