【问题标题】:CI - forgot password form validation to check if email address exists in DBCI - 忘记密码表单验证以检查数据库中是否存在电子邮件地址
【发布时间】:2012-05-06 13:05:15
【问题描述】:

我是使用 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

【问题讨论】:

    标签: forms validation codeigniter passwords


    【解决方案1】:

    您应该使用回调来检查电子邮件是否存在。因此,您的控制器将类似于...

    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 约定。

    http://codeigniter.com/user_guide/libraries/form_validation.html

    编辑: 我在 codeigniter3 中执行此操作时还面临另一个问题。您必须将消息字段名称命名为回调。所以而不是$this-&gt;form_validation-&gt;set_message('email_address', 'That email address don\'t exist, sucka!');

    这应该是

    $this-&gt;form_validation-&gt;set_message('_check_email_exists', 'That email address don\'t exist, sucka!');

    【讨论】:

    • 是的,我看到了这个回调函数,想知道这是否是最好的方法,你已经确认了,谢谢。
    【解决方案2】:

    您应该扩展MY_Form_validation,这样您的函数可以在任何形式上使用,而不仅仅是那些驻留在您的控制器中的形式。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2011-08-30
      • 1970-01-01
      • 2012-10-30
      • 2016-02-21
      • 2013-11-07
      • 2016-04-06
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多