jquery验证远程方法

时间:2012-11-14 14:11:52

标签: php jquery jquery-validate

我是jquery的新手,试图在我的电子邮件输入中添加验证规则。它会检查电子邮件是否在数据库中。 我的html输入我正在尝试添加验证规则。

<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函数,它们可以工作。

3 个答案:

答案 0 :(得分:0)

您正在将$maila设置为布尔值(是否设置了$_POST['email'])。应该是:

$maila = $_POST['email'];

post中的电子邮件数据也应该在sql中执行之前进行验证和转义,这是因为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中也存在一个问题,规则不应该嵌套在validate中,而应该是这样的:

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

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

答案 1 :(得分:0)

以下答案适用于早期版本的OP:

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


您不应将.rules()嵌套在.validate()内。在{/ em> .rules()被调用后,As per documentation.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()
                }
            }       
        }
    });

});

答案 2 :(得分:0)

提示:在开始使用ajax之前,请确保您的php源工作正常,这样您就可以更轻松地找到指定内容(php | html | js | css)中的错误。

我在你的php代码上看到的第一个重大错误:

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

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

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

第二个错误

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

这不是有效的php(查看错误报告)字符串通过点连接。

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

最后但并非最不重要的是,搜索sql-injections