0

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

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

我的

$("#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连接数据库

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

4

3 回答 3

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", {
    ...
于 2012-11-14T14:20:06.367 回答
0

以下答案适用于 OP 的这个更早的版本:

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


你不应该.rules()嵌套在.validate(). 根据文档.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()
                }
            }       
        }
    });

});
于 2012-11-14T14:20:24.860 回答
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

于 2012-11-14T14:23:13.917 回答