将JSON发送到位于服务器上的PHP文件

时间:2017-03-06 13:15:55

标签: php json ajax database

我真的不明白为什么我的代码无效。我只是从表单中获取值,我想使用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";
 }

2 个答案:

答案 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'])) {

如评论中所述,您的代码非常容易受到攻击,应该使用预先准备好的语句!