【问题标题】:$_POST not being set with AJAX Post value$_POST 未使用 AJAX Post 值设置
【发布时间】:2015-01-25 13:38:17
【问题描述】:

我正在尝试将 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 进行字符串化 - 尝试将其直接传递给 $.post 函数。
  • 尝试 var_dump()print_r() 第一个 $_POST 数组并检查您从脚本中得到了什么。
  • 是的,这就是我的建议。
  • 没有名为jsonObj的键,因为这只是JS变量的名称,与PHP无关。了解客户端和服务器端之间的区别
  • 在下面查看我的完整答案。一旦你删除了字符串化的东西,你的 PHP 端仍然有问题。

标签: php jquery ajax post


【解决方案1】:
  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')";

【讨论】:

  • 用双引号代替单引号并不能防止 SQL 注入。
  • 真的吗?黑客无法利用该代码漏洞来结束 sql 语句并注入新语句?这是第一步,最基本的步骤是防止它。仅此一项并不能完全阻止它。这就是我写“(至少)”的原因。
  • 谢谢!效果很好! :)
  • 你必须(至少)正确绑定参数。
  • 是的,我明白了。这不是关于 SQL 注入的问题,所以我认为没有必要在这里列出完整的教程。我只是提到它是为了让 OP 知道将变量名简单地放在 SQL 语句的双引号内是有问题的。
【解决方案2】:

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

你还要检查

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

在您的 php 脚本中而不是 jsonObj,因为这就是 php 从您的脚本中实际得到的内容

【讨论】:

    【解决方案3】:

    这与 AJAX() 发送:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2016-02-07
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多