$_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 实际上从您的脚本中得到的
- 我认为您不需要字符串化
obj
- 尝试将 obj
直接传递给 $.post
函数。
$.post("updateAnswers.php", obj, function() {
//location.href = 'set2.php';
});
- 在 PHP 一侧,值
name
、email
、r1
等将直接位于 $_POST
数组中。所以你需要访问 $_POST['name']
等等。
echo "Name: ". $_POST['name']; //Show name value
var_dump($_POST); //Show all passed values
- 您的
$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);
}
});
我正在尝试将 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 实际上从您的脚本中得到的
- 我认为您不需要字符串化
obj
- 尝试将obj
直接传递给$.post
函数。
$.post("updateAnswers.php", obj, function() {
//location.href = 'set2.php';
});
- 在 PHP 一侧,值
name
、email
、r1
等将直接位于$_POST
数组中。所以你需要访问$_POST['name']
等等。
echo "Name: ". $_POST['name']; //Show name value
var_dump($_POST); //Show all passed values
- 您的
$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);
}
});