自定义验证连接到在localhost上工作但不在远程服务器上的数据库

时间:2016-11-03 12:21:02

标签: codeigniter

我创建了扩展CI_Form_validation的MY_Form_validation。我已经在Customer Controller中加载了库。客户模型中的validate_email函数在登录时检查客户是否存在。它在localhost上正常工作,但即使用户实际存在,该方法也始终在远程服务器上返回false。可能有什么不对?

我已经像这样加载了库

$this->load->library('form_validation');

登录电子邮件验证规则

  $validate_data = array(

        array(

            'field' => 'login_email',
            'label' => 'Email',
            'rules' => 'trim|required|validate_email|is_active|xss_clean'
        )
 );

My_Form_validation库

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {

public function __construct(){

    parent::__construct();        

}    

public function validate_email($field){

    $this->CI->load->model('customer_model');

    $email = $this->CI->customer_model->validate_email($field);

    if($email === true){

        return true;
    }else{

        $this->set_message('validate_email','The {field} does not exist');
        return false;
    }


}//end method validate_email
}
?>

验证电子邮件模型功能

public function validate_email($email){

    $sql = "SELECT `customer_id` FROM `customer` WHERE `email` = ? AND `status` != -1";
    $query = $this->db->query($sql,array($email));
    return ($query->num_rows() == 1) ? true : false;

}//end method validate_email

我喜欢使用-1代表我的数据库中已删除的帐户

我也在自动加载我的数据库

2 个答案:

答案 0 :(得分:0)

通过信任您对数据库中当前数据的说法,您的函数应该可以正常工作,但我建议您将模型验证功能更改为更类似于CodeIgniter方法的内容。

public function validate_email($email)
{
   $this->db->where('email', $email)
            ->where('status !=', '-1');

   $query = $this->db->get('customer');

   if($query->num_rows() > 0)
      return TRUE;
}

其次,创建一个函数以根据where条件检索所有结果。

public function getAllEmailsByEmail($email)
{
   $this->db->where('email', $email)
            ->where('status !=', '-1');

   return $this->db->get('customer')->result();
}

然后查看它返回的很多行。

print_r($this->CI->customer_model->getAllEmailsByEmail($field));

答案 1 :(得分:0)

我遇到了类似的问题。根据codeigniter database.php中的数据库配置,我注意到以下内容

 char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',

所以我删除了我的数据库并重新创建了它。将我的数据库排序规则更改为utf8_general_ci并将我的表格字符集从armscii8更改为utf8,一切正常