我是PHP的新手,并且无法用这种语言理解关于将POST请求中的数据传递给PHP的几点。这是我对我的代码和问题的一点描述:
我有一些序列化数组,它被转换为JSON并需要通过ajax发送到PHP,所以我可以使用数组中的这些值将它们插入到数据库中。
这是我的代码:
验证函数,我只获取所有经过验证的表单(填充表单)中的值,因为其中一些值可能是空的。我正在使用。 serializeArray()对这些表单进行编码,然后我将它们转换为JSON,因为在此函数结束时我需要返回一个数组,以便我可以在ajax POST中使用它。 / p>
// Validate forms
function validateForms() {
var formData = [];
$('#add-items form').each(function () {
var itemFormId = $(this).attr('id');
if ($(this)[0].checkValidity() == false) {
console.log("Empty forms: " + itemFormId);
} else {
console.log("Filled forms: " + itemFormId + "\n");
var formDataX = $(this).serializeArray();
switch (itemFormId) {
case 'equippable-item-form':
formDataX.push({name: 'item-type', value: "equippable"});
break;
case 'weapon-form':
formDataX.push({name: 'equippable-item-type', value: "weapon"});
break;
case 'armor-form':
formDataX.push({name: 'equippable-item-type', value: "armor"});
break;
}
formData.push(...formDataX);
}
});
formData = JSON.stringify(formData);
console.log(formData);
return formData;
}
以下是简短版本的ajax POST:
formData = validateForms();
$.ajax({
type: 'POST',
url: 'php/admin.php',
data: { items_data: formData },
success: function (data) {
data = $.parseJSON(data);
$("#status-message").text(data.message);
},
});
PHP代码,我正在获取此POST并尝试解码此JSON:
if (isset($_POST['items_data'])) {
$data = json_decode(stripslashes($_POST['items_data']),true);
$status = testNewItem($data['item-name-input'], $data['price-input'], $data['item-level-input'], $data['required-level-input']);
}
// Print the status
if ($status):
echo json_encode(["message" => $status]);
endif;
这是我的database.php中的代码,我将值插入数据库:
function testNewItem($itemName, $price, $itemLevel, $reqLevel)
{
$conn = connection();
$conn->query("INSERT INTO item (`name`, `price`, `item_level`, `required_level`) VALUES ('" . $itemName . "', $price, $itemLevel, $reqLevel)");
$conn->errorInfo();
$status = "Successfully inserted new item into the database!";
return $status;
$conn = null;
}
我的JSON的简短版本:
[{
"name": "item-name-input",
"value": "asdasd"
}, {
"name": "price-input",
"value": "2"
}, {
"name": "item-level-input",
"value": "4"
}, {
"name": "required-level-input",
"value": "2"
}]
问题:我不知道我是否正确解码了这个JSON数组,但是在POST成功后我无法打印它。此外,我不知道如何将这些值从 $ data 传递到名为 testNewItem 的函数中,该函数应该将此值插入数据库中(如果我放入此函数,则此函数可正常工作手动固定值)。我尝试了很多解决方案,我在这里找到了stackoverflow,但找不到我在做错的地方。
如果有人能帮助我,我会非常感激。
答案 0 :(得分:1)
目前你的json有这样的结构
Array
(
[0] => Array
(
[name] => item-name-input
[value] => asdasd
)
[1] => Array
(
[name] => price-input
[value] => 2
)
[2] => Array
(
[name] => item-level-input
[value] => 4
)
[3] => Array
(
[name] => required-level-input
[value] => 2
)
)
以你想要的方式访问它,你必须将json数组转换为键值格式。这可以这样做
$json_data = json_decode(stripslashes($_POST['items_data']),true);
$data = [];
foreach ($json_data as $item) {
$data[$item['name']] = $item['value'];
}
或者如果您不想使用循环
$data = array_combine(
array_column($data, 'name'),
array_column($data, 'value'));
答案 1 :(得分:0)
你的json正被转换为一个阵列,下面有更多的数组。
您正尝试使用$ data访问它,但您需要执行$ data [0]才能访问第一个数组。
$ data [0] [' name'] = item-name-input