【问题标题】:jQuery Remote validationjQuery远程验证
【发布时间】:2011-07-07 20:57:49
【问题描述】:

我对 jQuery 远程验证有疑问。我正在检查电子邮件是否已注册,远程验证是否有效,但它只显示值 - 真或假,我无法提交表单。

jQuery 代码:

$("#form").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: "check-email.php"

    }
  }
}); 

检查-mail.php 代码:

$email = trim(strtolower($_REQUEST['email']));


$checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");  

if(mysql_num_rows($checkemail) == 1)
{
$valid = 'false';
}
else
{
$valid = 'true';
} //end of $checkemail if statemant


echo json_encode($valid);

【问题讨论】:

    标签: jquery validation


    【解决方案1】:

    对于那些无法使用上述技术进行远程验证的人,以下是我的两分钱,可以帮助确保您走上正轨。

    1)。它仅适用于 v1.6.1 及更高版本。坚持使用最新版本的 jQuery http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

    2)。选择“同步”远程执行,默认为异步。将异步设置为 false。

    $("#form").validate({
      rules: {
        email: {
          required: true,
          email: true,
          remote: { url:"check-email.php", async:false }
        }
      }
    });
    

    【讨论】:

      【解决方案2】:
      $checkemail = mysql_query("SELECT * FROM users WHERE email = '".$email."'");  
      

      永远永远 永远这样做。这是asking for trouble:SQL 注入,随机错误(单引号在电子邮件地址中有效,顺便说一句)。

      parameterized queries,使用它们。只是多了几行代码,但它是像谷仓门一样宽的安全漏洞和安全的数据库交互之间的区别。

      if(mysql_num_rows($checkemail) == 1)
      {
      $valid = 'false';
      }
      else
      {
      $valid = 'true';
      }
      

      是一种非常冗长的说法

      $valid = mysql_num_rows($checkemail) == 1;
      

      根据文档,远程验证的响应是 JSON 编码的 boolean,而不是 JSON 编码的 string

      你有"true""false",它们会变成"\"true\"""\"false\""json_encode(),这是错误的。实际的truefalse 将变为"true""false",这是正确的。

      将响应内容类型设置为 JSON 也可能是个好主意:

      header('Content-type: application/json');
      

      【讨论】:

      • 无用的语义,但它让我愣了一秒。我想你想要:$valid = mysql_num_rows($checkemail) == 0;
      • @Kijana 我不确定这里的“无用语义”是什么。不,我不是这个意思。
      • “无用的语义”是我提出来的。 $valid = mysql_num_rows($checkemail) == 1; - 当它等于 1 时,$valid 不会为真,这与 OP 代码所说的相反?
      • 我不知道mysql_num_rows 做了什么,所以我只是猜测。在这里是为了 jQuery 而不是服务器代码。
      • @Kijana 是的,当服务器返回一行时,$valid 将是 true。对我来说有点道理。我的假设/有根据的猜测是该表包含有效地址,而不是无效地址。毕竟,有有限的有效字符串和无限的无效字符串,所以我怀疑 OP 弄错了。应该指出这一点。
      【解决方案3】:

      当需要布尔值时,它可能只是返回字符串。不妨试试以下方法:

      if(mysql_num_rows($checkemail) == 1)
      {
      $valid = false;
      }
      else
      {
      $valid = true;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 2013-01-20
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多