2012-11-14 102 views
0

我是新来jquery,试图添加一个验证规则到我的电子邮件输入。它检查电子邮件是否在数据库中。 我的html输入我试图添加验证规则。jquery验证远程方法

<input id="email" name="email" type="text" class="easyui-validatebox" validType="email" required="true" > 

MY JS

$("#regform").validate();//block below was nested in validate in OP 
$('input[name="email"]').rules("add", 
{ 
    remote : 
    { 
     url: 'checkMaila.php', 
     async: false, 
     type: "POST", 
     data: 
     { 
      email: function() 
      { 
       return $('input[name="email"]').val() 
      } 
     }  
    } 

}); 

我的PHP

<?php 

/*检查,如果电子邮件地址已经被注册*/

//连接使用的mysqli到DB

include 'conn.php'; 

if(isset($_POST['email'])) 
{ 
    //op had this line instead of the line below:$maila= $_POST['email'] 
    $maila = $mysqli->real_escape_string($_POST['email']); 
    //op line changed to one below $result = mysql_query("select * from user where email= '"+$maila+"';"); 
$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 
$result = $mysqli->query($sql); 
if($result->num_rows == 0){ 
    echo "true"; 
} 
else 
{ 
    echo "false"; 
} 

} 
else 
{ 
echo "false"; //invalid post var 
} 

?> 

更多信息: 我的内联验证规则正常工作。我的js代码是在外部js文件中包含其他使用jquery的js函数,它们工作。

+0

是什么问题搜索? – GBD

+0

你不应该在'.validate()'中嵌入'.rules()'。 – Sparky

+0

我已经尝试过与out out validate()和其他变体从一个帖子我在这里阅读它说它需要初始化验证。问题是,当我已经在数据库中的文本框中输入一个电子邮件应该显示错误信息“请修复此问题”。也有什么办法麻烦拍摄js问题我用try try不是很好的帮助。 –

回答

0

以下的答案必须是此更早的OP的修订:

https://stackoverflow.com/revisions/13380448/2


你不应该有嵌套的.validate().rules()As per documentation,.rules()也必须在之后之后出现.validate()被调用。

http://docs.jquery.com/Plugins/Validation/rules

$(document).ready(function() { 

    $("#regform").validate(); 

    // .validate(); must appear above .rules() 

    $('input[name="email"]').rules("add", { 
     remote : { 
      url: 'checkMaila.php', 
      async: false, 
      type: "POST", 
      data: { 
       email: function() { 
        return $('input[name="email"]').val() 
       } 
      }  
     } 
    }); 

}); 
0

您正在将$maila设置为布尔型(是否设置了$_POST['email'])。应该是:之前在SQL执行

$maila = $_POST['email']; 

而且在后期的电子邮件数据应该进行验证,并逃脱了,这是因为SQL注入。如果我输入10'; DROP TABLE user /*,则执行的查询如下所示:SELECT * FROM user WHERE email = '10'; DROP TABLE user /*'并且您的用户表将从数据库中删除。

验证它使用正则表达式来检查它是一个电子邮件地址格式。为了避免字符串使用real_escape_string()http://php.net/manual/en/mysqli.real-escape-string.php)。

你必须是你尝试使用+加入您的字符串,在PHP中你必须使用.另一个错误,所以

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'"; 

应该是:

$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 

MySQL作为这里使用: mysql_query已弃用,因此应使用PDOMysqli

在jQuery的还有一个问题,规则不应该被嵌套在验证,相反,它应该是这样的:

$("#regform").validate(); 

$('input[name="email"]').rules("add", { 
    ... 
+0

啊我可能已经看过这个我改变它,看看我的PHP是否有问题。 ty指出它。 –

+0

我知道的SQL注入和如何在PHP中反击它。我想学习jquery,所以我正在做这个小型注册表单。此代码不会在实况网站上发布。 –

0

提示:在您开始使用Ajax确保,你的PHP源工作发现,所以你可以在指定的内容错误(PHP | HTML | JS | CSS)更容易。

的第一个大错误,我已经看到了你的PHP代码:

$maila = isset($_POST['email']); 

你必须设置$迈拉为布尔值true或false,你想要的是

$maila = isset($_POST['email'])?$_POST['email']:''; 

第二个错误

$sql = "SELECT * FROM user WHERE email = '"+$maila+"'"; 

这是没有效的PHP(查看你的错误报告)字符串通过一个点连接

$sql = "SELECT * FROM user WHERE email = '".$maila."'"; 

最后但并非最不重要的,采取的SQL注入