$_POST 未设置 AJAX Post 值

$_POST not being set with AJAX Post value

我正在尝试将 JSON 对象发送到 .php 文件。令我困扰的是我的 POST 值似乎没有进入 PHP 的 $_POST 数组。这是我的代码:

jQuery:

$("#submit").click(function(){
    var obj = { //create json object to be sent
        "name": $("#name").val(),
        "email": $("#email").val(),
        "r1": $("#r1").val(),
        "r2": $("#r2").val(),
        "r3": $("#r3").val(),
        "intr1": $("#q1").val(),
        "intr2": $("#q2").val(),
        "intr3": $("#q3").val(),
        "set": "set1"
    };

    var jsonObj = JSON.stringify(obj);

    $.post(
        "updateAnswers.php",
        jsonObj,
        function() {
            //location.href = 'set2.php';
        }
    );
})

PHP:

if (isset($_POST["jsonObj"])) { // value is empty
    $obj = json_decode($_POST['jsonObj'], true);

    $name = $obj['name'];
    $email = $obj['email'];

    $db = mysqli_connect("localhost", "root", "", "concurs");
    $sql="INSERT into players values ('$name', '$email', '0', '0', '0')";
    mysqli_query($db, $sql);
}

提前致谢!

您在 obj 上使用 stringify,然后将其传递给 ajax 函数。 但是 ajax 函数期望对象作为对象而不是字符串。 所以只需删除 var jsonObj = JSON.stringify(obj); 并使用 obj

此外,您还必须检查

  • 名字
  • 电子邮件
  • r1
  • ...

在您的 php-脚本中而不是 jsonObj 因为那是 php 实际上从您的脚本中得到的

  1. 我认为您不需要字符串化 obj - 尝试将 obj 直接传递给 $.post 函数。
$.post("updateAnswers.php", obj, function() {
        //location.href = 'set2.php';
});
  1. 在 PHP 一侧,值 nameemailr1 等将直接位于 $_POST 数组中。所以你需要访问 $_POST['name'] 等等。
echo "Name: ". $_POST['name']; //Show name value
var_dump($_POST); //Show all passed values
  1. 您的 $sql 字符串不检查 SQL 注入。您必须(至少)用两个单引号替换单引号,例如:
 $sql = "INSERT into players values ('".str_replace("'","''", $name). "', '".str_replace("'","''", $email). "', '0', '0', '0')";

这与 AJAX() 发送:

$.ajax({
   type: 'POST',
   url: 'updateAnswers.php',
   data: {'jsonObj': jsonObj},
   success: function(msg) {
     alert(msg);
   }
});