我正在使用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';
}
}
答案 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,甚至可以从替代源发布。您必须将此数据视为“脏”,因为它很容易被篡改。