【发布时间】:2018-07-31 12:33:08
【问题描述】:
在将数据插入数据库之前,我正在尝试检查数据库中是否存在电子邮件或用户名。由于我不明白的原因,尽管使用了 email_exists 和 username_exists 函数,但在插入数据时,数据库会为用户名和电子邮件字段抛出字段非唯一错误。
username_exists 和 email_exists 函数获取与表单提交的用户名或电子邮件匹配的任何用户名或电子邮件。如果存在用户名或电子邮件,则函数返回 true,否则返回 false。当两个函数都返回 false(即数据库中不存在用户名和电子邮件)时,它将表单数据插入数据库。
任何帮助都会很棒!
控制器功能
public function register(){
if($this->session->userdata('loggedIn') == TRUE){
$this->session->set_flashdata('error_msg', 'please log out to access this page ');
echo 'Please log out to access this page!...';
sleep(2);
redirect('index.php/user/dashboard');
}
$data['session_data'] = array(
'userID' => $this->session->userdata('userID'),
'loggedIn' => $this->session->userdata('loggedID')
);
$this->load->view('navigation');
$this->load->view('register', $data);
echo 'registration page - ';
if($this->input->post('register')){
$this->form_validation->set_rules('username', 'username', 'required');
$this->form_validation->set_rules('email', 'email', 'required|valid_email');
$this->form_validation->set_rules('password', 'password', 'required');
$user_details = array(
'username' => strip_tags($this->input->post('username')),
'email' => strip_tags($this->input->post('email')),
'password' => strip_tags($this->input->post('password'))
);
if($this->form_validation->run() == true){
$username_exists = $this->user_model->username_exists($user_details[0]);
$email_exists = $this->user_model->email_exists($user_details[1]);
if($username_exists == false && $email_exists == false) {
$this->user_model->add_user_account($user_details);
echo 'user added successfully: '. $user_details[0];
$this->session->set_flashdata('success_msg', 'SUCCESSFULLY ADDED USER, username and email do not already exist!... ');
sleep(2);
redirect('index.php/user/login');
} else {
echo 'username or email already exists! try again!...';
$this->session->set_flashdata('error_msg', 'ERROR OCCURRED - username or email exists!...');
sleep(2);
redirect('index.php/user/register');
}
} else {
echo 'error occured, try again!...';
$this->session->set_flashdata('error_msg', 'ERROR OCCURRED- something didn\'t work');
sleep(2);
redirect('index.php/user/register');
}
}
}
模型函数
public function add_user_account($user_details){
$this->db->insert('user_account', $user_details);
}
public function username_exists($username){
$this->db->select('username');
$this->db->from('user_account');
$this->db->where('username', $username);
$query = $this->db->get();
if($query->num_rows() > 0){
return true;
} else {
return false;
}
}
public function email_exists($email){
$this->db->select('email');
$this->db->from('user_account');
$this->db->where('email', $email);
$query = $this->db->get();
if($query->num_rows() > 0){
return true;
} else {
return false;
}
}
【问题讨论】:
-
你为什么要使用 echo "some message" 然后 sleep() 然后使用显示相同消息的 flash 消息执行重定向。如果它是用于调试的,最好在重定向之前输入一个退出(“这是我的消息”),因为你正在处理它。只是一个想法!
-
顺便说一句,由于您使用的是 codeigniter,您可能会使用他们的 html_escape() 而不是条形标签
-
您的问题得到解答了吗?
标签: php codeigniter registration