我创建了扩展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代表我的数据库中已删除的帐户
我也在自动加载我的数据库
答案 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
,一切正常