gpt4 book ai didi

javascript - 如何将 JSON 解码为 PHP 数组/变量

转载 作者:行者123 更新时间:2023-12-03 04:16:24 25 4
gpt4 key购买 nike

我对 PHP 还很陌生,无法理解这种语言中关于从 POST 请求获取数据到 PHP 的一些事情。这是我对我的代码和问题的一些描述:

我有一些序列化数组,它已转换为 JSON,需要通过 ajax 发送到 PHP,因此我可以使用数组中的这些值将它们插入到数据库中。

这是我的代码:

验证函数,我只从所有经过验证的表单(填写的表单)中获取值,因为其中一些可能故意为空。我使用 .serializeArray() 对此表单进行编码,然后将它们转换为 JSON,因为在此函数结束时我需要返回一个数组,以便我可以在 ajax POST 中使用它。

// 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 上找到的解决方案,但找不到我哪里做错了。

如果有人能帮助我,我将非常感激。

最佳答案

目前你的 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'));

关于javascript - 如何将 JSON 解码为 PHP 数组/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com