我真的不明白为什么我的代码无效。我只是从表单中获取值,我想使用JSON和AJAX将它们插入到数据库中。有什么我做错了吗?
$(document).ready(function() {
$("#insert").click(function() {
var email = $("#email").val();
var password = $("#password").val();
var name = $("#name").val();
var bio = $("#bio").val();
var postData = {"email":email,"password":password,"name":name,"bio":bio};
$.ajax({
type: "POST",
dataType: "json",
url: "http://**************/php-code/insert.php",
data: {myData:postData},
crossDomain: true,
cache: false,
beforeSend: function() {
$("#insert").val('Connecting...');
},
success: function(data) {
if (data == "success") {
alert("inserted");
$("#insert").val('submit');
} else if (data == "error") {
alert("error");
}
}
});
return false;
});
});
位于服务器上的PHP文件:
include "db.php";
if(isset($_POST['myData'])) {
$email=$_POST['email'];
$password=$_POST['password'];
$name=$_POST['name'];
$bio=$_POST['bio'];
$q=mysqli_query($con,"INSERT INTO 'user' ('email','password','name', 'bio') VALUES ('$email','$password','$name','$bio')");
if($q)
echo "success";
else
echo "error";
}
答案 0 :(得分:1)
您的插入查询应如下所示:
$q=mysqli_query($con,"INSERT INTO `user` (`email`,`password`,`name`, `bio`) VALUES ('$email','$password','$name','$bio')");
注意使用(`)而不是(')
并且建议使用prepared statement而不是过去的语句来阻止sql排出
$q=mysqli_prepare($con,"INSERT INTO `user` (`email`,`password`,`name`,`bio`) VALUES (:email,:password,:name,:bio)");
mysqli_stmt_bind_param($q, "ssss", $email, $password, $name, $bio);
mysqli_stmt_execute($q);
并且在你的ajax中你指定你需要更改它或者需要再次更新你的php代码,
如果你需要保留你的ajax,那么php应该如下:
$email=$_POST['myData']['email'];
$password=$_POST['myData']['password'];
$name=$_POST['myData']['name'];
$bio=$_POST['myData']['bio'];
如果你想保留你的php,那么你的ajax应该如下:
var postData = {"myData":postData,"email":email,"password":password,"name":name,"bio":bio};
然后这一行
data: {myData:postData},
应如下:
data: postData,
答案 1 :(得分:1)
您的数据不需要与'myData:...'一起发送。
它已经是一个键值对格式,可以发送了。
只需将data: {myData:postData},
替换为data: postData,
在你的PHP代码中删除支票myData
,只检查你想要的字段。 (电子邮件,密码等)
if(isset($_POST['myData'])) {
如评论中所述,您的代码非常容易受到攻击,应该使用预先准备好的语句!