Codeigniter中的Jquery Validator插件已经存在的电子邮件不起作用

时间:2018-08-24 18:26:55

标签: php codeigniter jquery-validate

我正在Codeigniter中使用jquery验证程序插件,我想检查电子邮件字段中是否已存在给定的电子邮件。我已经按照Jquery验证程序文档中提供的说明完成了所有必要的操作,但是在Codeigniter中无法正常工作。有人可以协助我解决这个问题吗?

<script>

    $(document).ready(function () {

        $("#signupFrm").validate({
            rules: {
                customer_contactNumber: {
                    required: true,
                    digits: true,
                    minlength: 10,
                    maxlength:14
                },
                customer_email: {
                    required: true,
                    email: true,
                    remote: {
                        url: "<?php echo base_url(); ?>index.php/account/register_email_exists",
                        type: "post",
                    }
                },
            },
            messages: {
                customer_contactNumber:{
                    required: "Please enter your Contact Number",
                    minlength: "Contact number should not be lesser than 10 digits",
                    maxlength: "Contact number should not be higher than 14 digits",
                    digits: "Please enter numbers Only"
                },
                customer_email:{
                    required: "Please enter your email",
                    email: "Please enter a valid email",
                    remote: "Email already exist"
                },
            }
        });

    });

</script>

注册表格

<div class="form-group has-feedback">
    <input type="email" class="form-control" placeholder="Email" id="customer_email" name="customer_email">
    <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>

控制器

function register_email_exists()
{
    if (array_key_exists('customer_email',$_POST))
    {
        $email=$_POST["customer_email"];

        $this->load->model("Email_auth");

        $this->Email_auth->verifyEmailExist($email);

        if ($this->Email_auth->verifyEmailExist($email) == TRUE)
        {
            echo json_encode("FALSE");
        }
        else
        {
            echo json_encode("TRUE");
        }
    }
}

Email_auth.php

<?php

class Email_auth extends CI_Model {

    function verifyEmailExist($email) 
    {
        $this->db->select('customer_id');

        $this->db->where(array("customer_email" => $email));

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

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

1 个答案:

答案 0 :(得分:1)

此答案假设您的远程CodeIgniter PHP函数正在正确查询数据库。

  1. 除非您除了要发送该字段之外的其他信息,否则根本不需要data参数。默认情况下,该字段的值已发送。

    删除所有这些内容:

    data:{
        customer_email: function() { 
            return $("#customer_email").val();
        }
    }
    
  2. 您的布尔值必须用引号引起来。在"true""false"的情况下,无论有没有json_encode(),它都可以工作。但是,如果要发送消息字符串而不是"false",则必须使用json_encode()

    echo json_encode("true");

    echo "true";

  3. 最后,如果您在CodeIgniter中启用了CSRF保护,则必须在data参数中发送隐藏令牌的值。同样,您将不会发送customer_email字段的值,因为默认情况下已经发送了该值。 (将csrftoken下方的标记替换为您的令牌的实际name。)

    data: {
        csrftoken: function() {
            return $('input[name="csrftoken"]').val();
        }
    }