更新数据库记录时,回调函数的结果相反

时间:2015-12-17 15:30:43

标签: php codeigniter codeigniter-3

我一直在努力学习Codeigniter,在制作小型应用程序的过程中,我来到这一点,我必须更新数据库。

我已经使用验证插入了数据,但是当涉及到更新时,看起来它总是“FALSE”,因为那些记录已经在我正在编辑的DB中。结果,它不接受它。

在这里寻求帮助以克服这个问题。

验证(控制器):

$this->form_validation->set_rules('v_member_email', 'Email Address', 'trim|required|valid_email|callback_check_if_email_exists');

    public function check_if_email_exists($requested_email) {
    $email_available = $this->update_model->check_if_email_exists($requested_email);
    if ($email_available) {
    return TRUE;
    } else {
    return FALSE;
    }}

它始终返回“验证错误”,因为此电子邮件已在使用中。

型号:

function check_if_email_exists($email) {
$this->db->where('v_member_email', $email);
$result = $this->db->get('vbc_registered_members');
if ($result->num_rows() > 0){
return FALSE; //Email Taken
} else {
return TRUE; // Available
}}

2 个答案:

答案 0 :(得分:1)

是的,因为,电子邮件已经存在。

您需要做的就是,在更新时将is传递给回调,

callback_check_if_email_exists['.$id.']

Id是数据库ID。

在控制器中

public function check_if_email_exists($requested_email, $id) {
    $email_available = $this->update_model->check_if_email_exists($requested_email, $id);
    if ($email_available) {
        return TRUE;
    } else {
        return FALSE;
    }
}

在模型中

    if ($id) {
        $this->db->where('id !=', $id);
    }
    $this->db->where('email', $str);
    $res = $this->db->get('users');
    if ($res->num_rows()) {
        return false;
    } else {
        return true;
    }
}

我们在这里做的是,如果你将id传递给回调,那么

检查电子邮件是否存在,但此ID

除外

如果未通过ID,请仅检查电子邮件而不考虑id

答案 1 :(得分:0)

如果电子邮件存在,则在您的控制器中

返回true。如果不是,则返回false,但在模型中,如果存在则返回false,否则返回true。

$this->form_validation->set_rules('v_member_email', 'Email Address', 'trim|required|valid_email|callback_check_if_email_exists');

public function check_if_email_exists($requested_email) {
$email_available = $this->update_model->check_if_email_exists($requested_email);
// here you check if the return from the model is true or false if true the email exists otherwise the email not exists
if ($email_available) {
return TRUE; // here true mean the email is exists and not Available
} else {
return FALSE; // here it mean the email not exists and Available
}}

如果电子邮件存在,则应该在模型中返回true,以使其正常工作。

function check_if_email_exists($email) {
    $this->db->where('v_member_email', $email);
    $result = $this->db->get('vbc_registered_members');
    if ($result->num_rows() > 0){
        return true; // here true mean the email is exists and not Available
    } else {
        return false; // here it mean the email not exists and Available
    }
}