【问题标题】:JQuery Duplicate Email ValidationJQuery 重复电子邮件验证
【发布时间】:2016-10-25 19:28:10
【问题描述】:

我刚刚开始学习编程,并且在这个问题上被困了好几个小时。我有一个要求提供电子邮件的注册表单,如果电子邮件已经注册,它应该检查 mysql 数据库。我目前正在尝试使用 Jquery 验证器插件中的远程方法,但我似乎无法使其工作。

emailcheck.php

<?php
include_once 'dbconnect.php';
$email = $_POST['CusEadd'];
$query = "SELECT CusEadd FROM customer WHERE CusEadd='$email'";
$result = mysql_query($query);
$count = mysql_num_rows($result);

if($count>0){
    echo json_encode(FALSE);
}
else {
    echo json_encode(TRUE);
}

?>

form-validation.js

CusEadd: {  
            required:true,
            email:true,
            remote:"emailcheck.php"
        }

【问题讨论】:

  • 如果你使用 jQuery validate 插件,我相信它会默认发出 GET 请求,如果你想要的话,你必须指定 POST
  • 特别是如果您刚刚开始学习编程,请不要使用 PHP 的 mysql_* 函数。它们在 PHP 5.5 中被弃用,因为它太旧以至于不再接收安全更新,并在 PHP 7 中完全删除。相反,使用 PDO 或mysqli_*
  • 是的。我肯定会停止使用 mysql 并学习如何使用 PDO。谢谢大家!

标签: php jquery mysql validation


【解决方案1】:

jQuery Validate 的 documentation 声明

服务器端资源通过 jQuery.ajax (XMLHttpRequest) 和 获取与已验证名称对应的键/值对 元素及其作为 GET 参数的值。

服务器端响应必须 是一个 JSON 字符串,对于有效元素必须为“true”,并且可以是 无效元素为 "false"、未定义或 null

您正在检查 $_POST['CusEadd'],并假设您有一个具有该名称的元素,您仍然必须将 POST 指定为方法

CusEadd: {  
    required:true,
    email:true,
    remote: {
        url  : "emailcheck.php",
        type : "POST"
    }
}

另外,您希望返回字符串“true”,而不是 PHP 布尔值,后者通常会转换为数字

if($count>0){
    echo json_encode("false");
}
else {
    echo json_encode("true");
}

并且不要在生产代码中使用mysql_*,只需将'OR 1=1 之类的内容传递给POST 变量,您的代码就会容易受到SQL 攻击

【讨论】:

  • 谢谢!!非常感谢!你是一个真正的救星。而且我要删除mysql并改用mysqli。再次感谢您!
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 2014-11-22
  • 2011-07-16
  • 2018-07-30
  • 2018-05-30
  • 2011-06-21
  • 2013-09-25
  • 2013-01-18
相关资源
最近更新 更多