0

我正在使用 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';
            }
    }
4

1 回答 1

1

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

第 1 步:回显(或打印)出你能做的。在您的逻辑中添加回显,就像您拥有的那样://email 已被使用也回显出 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,甚至从其他来源发布。您必须将这些数据视为“脏”数据,因为它很容易被篡改。

于 2014-02-19T17:27:16.173 回答