Codeigniter 3 注册应用程序:让用户知道电子邮件已经存在
Codeigniter 3 registration application: let user know email already exists via a flash message
我已经使用 Codeigniter 3 创建了一个注册和登录应用程序。
注册表单验证确保用户 table 中的每个 电子邮件 都是 唯一的 ,如下图所示:
而不是电子邮件字段下方的"The Email field must contain a unique value",我想要一条快速消息让用户知道提供的电子邮件已经存在并且he/she应该登录 而不是 注册 :
我在 if 语句 中使用 $email_exists
函数,但该函数本身不存在 还.
我想在 $email_exists
函数中使用 CI 的 is_unique
。我该怎么做?
这是实现所需功能的好方法吗?
我的 signup()
函数如下所示:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
$this->load->view('signup');
if ($email_exists) {
$this->session->set_flashdata("email_exists", "The email address you provided already exists. Please signup.");
}
}
}
代替 $this->load->view('signup');
使用 redirect('controller/method')
并在重定向前设置您的即显消息 $this->session->set_flashdata("signup_failure", "Email alredy exist");
替换您的以下 else 条件
else {
$this->load->view('signup');
}
有
else {
$this->session->set_flashdata("signup_failure", "Email address <?php echo $this->input->post('email'); ?> alredy exist in our database");
redirect('signup');
}
如果你坚持使用验证函数来做,你可以很容易地像这样调用它:
$this->form_validation->is_unique($email, 'users.email')
根据源文件文档,is_unique
函数期望第一个参数是要匹配的字符串,第二个参数是 table
。field
。
完整代码:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
$email = $this->input->post('email');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
if (!$this->form_validation->is_unique($email, 'users.email')) {
$this->session->set_flashdata("email_exists", "The email address you provided already exists. Please signin.");
redirect('signin');
}
$this->load->view('signup');
}
}
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', );
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]',
array('required' => 'Email is Required.'),
array('is_unique' => 'Email Already exist.')
);
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run() != FALSE)
{
$email = $this->input->post('email');
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated ,$verification_key , $active))
{
// Create a view for Check Email in View.
$this->load->view('Check_Email_view');
}
else
{
$signup_failure="Something Went Wrong Please Sign Up again.";
$this->load->view('signup',$signup_failure, true);
// in view Use Isset($signup_failure)
}
}
else
{
$this->load->view('signup');
}
}
这就是我要找的:如果注册详细信息提供并且有效,请注册新用户,除非提供的电子邮件地址he/she已经存在于数据库中,在这种情况下,而不是显示验证错误(记住:所有数据,包括电子邮件是 有效),敦促用户登录并重定向到登录页面。
注册用户 John Doe,该用户已注册:
您被重定向到登录页面并"invited"登录。
这是代码:
在 Usermodel.php
文件中:
public function email_exists($email)
{
$query = $this->db->get_where('users', ['email' => $email]);
return $query->num_rows() > 0;
}
在 Signup.php
文件中:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required|matches[password]');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
// Load user model
$this->load->model('Usermodel');
// If email does not already exist in the database
// signup new user
if (!$this->Usermodel->email_exists($email)) {
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
// unless sigup does not fail for whatever reason
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
// If email is already in the database
// urge user to sign in (redirect to signup page too)
$this->session->set_flashdata("email_exists", "The email address $email already exists in the database. Please signin.");
redirect('signin');
}
} else {
$this->load->view('signup');
}
}
非常感谢所有的帮助!
我已经使用 Codeigniter 3 创建了一个注册和登录应用程序。
注册表单验证确保用户 table 中的每个 电子邮件 都是 唯一的 ,如下图所示:
而不是电子邮件字段下方的"The Email field must contain a unique value",我想要一条快速消息让用户知道提供的电子邮件已经存在并且he/she应该登录 而不是 注册 :
我在 if 语句 中使用 $email_exists
函数,但该函数本身不存在 还.
我想在 $email_exists
函数中使用 CI 的 is_unique
。我该怎么做?
这是实现所需功能的好方法吗?
我的 signup()
函数如下所示:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
$this->load->view('signup');
if ($email_exists) {
$this->session->set_flashdata("email_exists", "The email address you provided already exists. Please signup.");
}
}
}
代替 $this->load->view('signup');
使用 redirect('controller/method')
并在重定向前设置您的即显消息 $this->session->set_flashdata("signup_failure", "Email alredy exist");
替换您的以下 else 条件
else {
$this->load->view('signup');
}
有
else {
$this->session->set_flashdata("signup_failure", "Email address <?php echo $this->input->post('email'); ?> alredy exist in our database");
redirect('signup');
}
如果你坚持使用验证函数来做,你可以很容易地像这样调用它:
$this->form_validation->is_unique($email, 'users.email')
根据源文件文档,is_unique
函数期望第一个参数是要匹配的字符串,第二个参数是 table
。field
。
完整代码:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
$email = $this->input->post('email');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
if (!$this->form_validation->is_unique($email, 'users.email')) {
$this->session->set_flashdata("email_exists", "The email address you provided already exists. Please signin.");
redirect('signin');
}
$this->load->view('signup');
}
}
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', );
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]',
array('required' => 'Email is Required.'),
array('is_unique' => 'Email Already exist.')
);
$this->form_validation->set_rules('password', 'Password', 'required|matches[cpassword]');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run() != FALSE)
{
$email = $this->input->post('email');
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
$this->load->model('Usermodel');
// Create account
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated ,$verification_key , $active))
{
// Create a view for Check Email in View.
$this->load->view('Check_Email_view');
}
else
{
$signup_failure="Something Went Wrong Please Sign Up again.";
$this->load->view('signup',$signup_failure, true);
// in view Use Isset($signup_failure)
}
}
else
{
$this->load->view('signup');
}
}
这就是我要找的:如果注册详细信息提供并且有效,请注册新用户,除非提供的电子邮件地址he/she已经存在于数据库中,在这种情况下,而不是显示验证错误(记住:所有数据,包括电子邮件是 有效),敦促用户登录并重定向到登录页面。
注册用户 John Doe,该用户已注册:
您被重定向到登录页面并"invited"登录。
这是代码:
在 Usermodel.php
文件中:
public function email_exists($email)
{
$query = $this->db->get_where('users', ['email' => $email]);
return $query->num_rows() > 0;
}
在 Signup.php
文件中:
public function signup()
{
$this->form_validation->set_rules('first_name', 'First name', 'required');
$this->form_validation->set_rules('last_name', 'Last name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('cpassword', 'Confirm password', 'required|matches[password]');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
if ($this->form_validation->run()) {
$first_name = $this->input->post('first_name');
$last_name = $this->input->post('last_name');
$email = $this->input->post('email');
$password = $this->input->post('password');
$date_created = date('Y-m-d H:i:s');
$date_updated = date('Y-m-d H:i:s');
$verification_key = md5($email);
$active = 0;
// Load user model
$this->load->model('Usermodel');
// If email does not already exist in the database
// signup new user
if (!$this->Usermodel->email_exists($email)) {
if ($this->Usermodel->user_register($first_name, $last_name, $email, $password, $date_created, $date_updated, $verification_key, $active)) {
$this->session->set_flashdata("signup_sucess", "Your account was created. Your have to activate it before you can signin. We have send you an activation email at $email.");
} else {
// unless sigup does not fail for whatever reason
$this->session->set_flashdata("signup_failure", "We ware unable to create your account");
}
redirect('signup');
} else {
// If email is already in the database
// urge user to sign in (redirect to signup page too)
$this->session->set_flashdata("email_exists", "The email address $email already exists in the database. Please signin.");
redirect('signin');
}
} else {
$this->load->view('signup');
}
}
非常感谢所有的帮助!