Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms CI-忘记密码表单验证以检查数据库中是否存在电子邮件地址_Forms_Validation_Codeigniter_Passwords - Fatal编程技术网

Forms CI-忘记密码表单验证以检查数据库中是否存在电子邮件地址

Forms CI-忘记密码表单验证以检查数据库中是否存在电子邮件地址,forms,validation,codeigniter,passwords,Forms,Validation,Codeigniter,Passwords,我刚开始使用Codeigniter,需要设置表单验证规则和自定义验证消息,以检查以忘记密码表单提交的数据库中是否存在电子邮件地址。如果电子邮件地址存在,则发送电子邮件;如果不存在,则应重新加载表单,将字段值设置为用户输入的值,并提供电子邮件地址不存在的错误 我在控制器中有以下内容 public function forgot_password() { $this->form_validation->set_rules('email_address','Email Addres

我刚开始使用Codeigniter,需要设置表单验证规则和自定义验证消息,以检查以忘记密码表单提交的数据库中是否存在电子邮件地址。如果电子邮件地址存在,则发送电子邮件;如果不存在,则应重新加载表单,将字段值设置为用户输入的值,并提供电子邮件地址不存在的错误

我在控制器中有以下内容

public function forgot_password()
{
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email');

    if($this->form_validation->run() == FALSE)
    {
        $this->forgot_password_form();
    }
    else
    {
        $this->load->model('membership_model');
        if($query = $this->membership_model->val_forgot_password())
        {
            $data['main_content'] = 'forgot_password_sent';
            $this->load->view('includes/template', $data);
        }
        else
        {
            $this->form_validation->set_message('email_address','The email address you provided does not exist.');
            $this->forgot_password_form();
        }
    }
}
在模型中

public function val_forgot_password()
{
    $this->db->where('email_address', $this->input->post('email_address'));
    $query = $this->db->get($this->members);

    if($query->num_rows == 1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
表格是

<?php

echo form_open('login/forgot_password');
echo "Email Address: " . form_input('email_address', set_value('email_address', ''));
echo br(2);
echo form_submit('submit','Send Email');
echo form_close();
echo br(1);

echo validation_errors('<p>Error: ');

?>

当使用有效的电子邮件地址提交表单时,它会正确地转到成功页面,但如果电子邮件地址不存在,它会重新加载表单,但不会给出错误信息


请帮忙D

您应该使用回调来检查电子邮件是否存在。所以你的控制器应该是

public function forgot_password()
{
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email|callback__check_email_exists');

    if($this->form_validation->run() == FALSE)
    {
       // VALIDATION ERRORS, SHOW VIEWS
    }
    else
    {
      // ALL IS GOOD, UPDATE EMAIL, AND REDIRECT TO CURRENT URL
    }
}
public function _check_email_exists($email)
{
  // LOAD AND USE YOUR MODEL TO CHECK EMAIL EXISTS HERE
  if ( ! $email_exists )
  {
    $this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!');
    return FALSE;
  }
  else
  {
    return TRUE;
  }
}
您的回调(仍在控制器中)类似于

public function forgot_password()
{
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email|callback__check_email_exists');

    if($this->form_validation->run() == FALSE)
    {
       // VALIDATION ERRORS, SHOW VIEWS
    }
    else
    {
      // ALL IS GOOD, UPDATE EMAIL, AND REDIRECT TO CURRENT URL
    }
}
public function _check_email_exists($email)
{
  // LOAD AND USE YOUR MODEL TO CHECK EMAIL EXISTS HERE
  if ( ! $email_exists )
  {
    $this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!');
    return FALSE;
  }
  else
  {
    return TRUE;
  }
}
所有这些都在这里的优秀CI文档中有详细说明,如果您是新手,我建议您遵守CI惯例

编辑:在codeigniter3中执行此操作时,我还面临另一个问题。您必须将消息字段名命名为回调。因此,与其使用
$this->form\u validation->set\u message('email\u address','该电子邮件地址不存在,sucka!')

这应该是


$this->form\u validation->set\u message(“检查电子邮件存在”,“该电子邮件地址不存在,混蛋!”)

您应该扩展
我的表单验证
,这样您的函数可以用于任何表单,而不仅仅是控制器中的表单。

是的,我看到了这个回调函数,想知道这是否是最好的方法,您已经确认了这一点,谢谢。