使用JQuery和PHP进行表单验证无效

时间:2014-02-19 16:53:22

标签: php jquery ajax ajaxform jqueryform

我正在使用jquery验证我的表单,并且在表单没有错误之后,我想将数据插入到数据库中,但由于某些原因,它无法正常工作。你能帮我找出我的错误。谢谢,

JQuery是

$.post('register_user.php',
                    {
                    'name' : name,
                    'email' : email,
                    'password': password
                    }, 
                    function(data) {
                            if(data == "success"){
                                alert("success");
                            } else if(data == "fail"){
                                alert("fail");
                            }
                    });

PHP

            $name = $_POST['name']; //else assign it a variabl
         $email = $_POST['email'];
        $password = $_POST['password'];

    $sql = "SELECT email FROM users WHERE LOWER(email) = '" . $email . "'";
    $result = mysql_query($sql) or die("Could not get email: " . mysql_error());

    if(mysql_num_rows($result) > 0) {
        //email is already taken
    }
    else {
        $query = mysql_query("INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')") or die(mysql_error());
        $result2 = mysql_result($query);
        if((mysql_affected_rows($result2) ==1){
            echo 'success';
        } else {
            echo 'fail';
            }
    }

1 个答案:

答案 0 :(得分:1)

我还没有足够的代表发表评论,所以我不得不把它作为答案。

第1步: 回声(或打印)你能做什么。 在您的逻辑中添加回声,例如您所拥有的://已经收到电子邮件 还要回显POST变量。

如果它们看起来都很好,您应该尝试回应您的查询。 例如。复制您的查询行,如:

$query = mysql_query("INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')")

然后将其粘贴并更改为:

echo "INSERT INTO `users` ( `name`, `email`, `password`) VALUES ( '$name', '$email', '$password')";

然后,如果这看起来很糟糕,那就是你的查询..你当然可以通过phpmyadmin或ssh直接测试mysql中的输出到你的服务器并通过控制台运行命令(如果它们给你shell访问)

如果你设法让这个工作,正如其他人评论的那样:mysqli或pdo应该是你的下一步。你还需要做一些基本的东西,即使这会照顾mysql注入。

您仍然可以使用XSS以及电子邮件末尾的空格(用户经常会这样做,当他们复制内容并将其插入表单中时)。

您可以通过PHP中的一些辅助函数来解决其中的一些问题,例如:

function cleanData($data) {
    return strip_tags(trim($data));
}

这是我的一个非常简单的示例,您还可以在函数中添加其他参数,例如外壳。然后你可以切换外壳并执行strtolower,strtoupper,ucwords(strtolower(等等)然后你可以简单地将你的变量包装在函数中: - )

顺便说一下。电子邮件我会检查正则表达式。也不要让JS /客户端代码进行输入验证,因为它很容易操作DOM,甚至可以从替代源发布。您必须将此数据视为“脏”,因为它很容易被篡改。