簡體   English   中英

Codeigniter-僅在數據庫中不存在電子郵件時更新電子郵件

[英]Codeigniter - Update email only if the email doesn't exist in the database

我為我的用戶提供了一個更新頁面,他們可以在其中編輯其姓名,電子郵件和其他信息。

到目前為止,他們可以編輯所有內容。 包括他們的電子郵件。 他們可以輸入數據庫中已經存在的電子郵件,沒有任何問題。

我嘗試添加此表單驗證規則

$this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|is_unique[users.email]');

但這無濟於事,因為即使他們不想更改其電子郵件,如果用戶單擊“保存”按鈕,它將要求用戶輸入另一封電子郵件。

我只想這樣做,以便當他們單擊保存按鈕時,僅在用戶更改了電子郵件的情況下才更新電子郵件,並在保存之前檢查數據庫中是否不存在該電子郵件。

我曾嘗試這樣做,但沒有運氣。

我正在使用的代碼:

$first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $email = $this->input->post('email');
    $uid = $this->session->userdata('uid');

    //$query = $this->db->get('dayone_entries');
    $query = $this->db->query('SELECT uid, email FROM users');


    $sql = "UPDATE users SET first_name = '{$first_name}', last_name = '{$last_name}', email = '{$email}' WHERE uid = $uid LIMIT 1";
    $this->db->query($sql);

    if ($this->db->affected_rows() === 1) {

        return true;
    } else {
        return false;
    }

您可以嘗試以下代碼:

$this->form_validation->set_rules('email', 'lang:email', 'trim|required|valid_email|callback__is_unique_email[email]');

回調函數應如下所示:

public  function _is_unique_email($value, $field){
    $result = $this->db->where('uid !=', $this->session->userdata('uid'))
                    ->where($field, $value)
                    ->get('users')
                    ->row_array();

    if ($result) {
        $this->form_validation->set_message('_is_unique_email', $this->lang->line('_is_unique_'));
        return false;
    }

    return true;
}

您的Javascript文件:

$("#form_id").validate({
        rules: {
            email: {
                required: true,
                email: true,
                remote: {
                    type: "post",
                    url: "pathtocontroller/controller.php/checkEmail",
                 }
            }
        },
        messages: {
            email: {
                required: "Please enter Email!",
                email: "Please enter valid Email!",
                remote: "Email already not available!"
            }
        }

您的控制器文件:

function checkEmail() {
        $userArr = $this->input->post();
        $id = $this->session->userdata('id');//if you have stored id within session else pass it within remote function
        if (isset($userArr["email"])) {
            if ($id != '') {
                $ext_cond = "id !='" . $id . "'";
            }
            echo $this->your_model_name->getUserValidation('your_email_field_name', $userArr['email'], $ext_cond);
            exit;
        }
        exit;
    }

您的模型:

public function getUserValidation($usertype = '', $value = '', $cond = '') {

        if ($usertype != '' && $value != '') {
            $this->db->select($usertype);
            $this->db->from($this->main_table);
            if ($cond != '') {
                $this->db->where($cond);
            }

            if (is_array($usertype)) {
                foreach ($usertype as $key => $type_value) {
                    $this->db->where($type_value, $value[$key]);
                }
            } else {
                $this->db->where($usertype, $value);
            }

            $user_data = $this->db->get()->result_array();
//            echo $this->db->last_query();exit;
            if (is_array($user_data) && count($user_data) > 0) {
                return "false";
            } else {
                return "true";
            }
        } else {
            return "false";
        }
    }

使用驗證庫: http : //docs.jquery.com/Plugins/Validation/Methods/remote

您的javascript:

$("#yourFormId").validate({
        rules: {
            email: {
                required: true,
                email: true,
                remote: {
                    url: "checkmail.php",
                    type: "post"
                 }
            }
        },
        messages: {
            email: {
                required: "Please Enter Email!",
                email: "This is not a valid email!",
                remote: "Email already in use!"
            }
        }
    });

checkmail.php:

<?php
$registeredEmails = array('test1@test.com', 'test2@test.com', 'test3@test.com');

$requestedEmail  = $_POST['email'];

if( in_array($requestedEmail, $registeredEmails) ){
    echo 'false';
}
else{
    echo 'true';
}
?>

如果您使用codeigniter,則意味着將checkmail.php用作控制器函數。.您可以將$ registeredEmails數組值作為$ registeredEmails [] =“您的查詢結果在for循環中”傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM