1 回答

TA貢獻1875條經驗 獲得超5個贊
讓我們分解你的代碼。
這是json:
[
{
"item_cat":"Stationary",
"items":[
{
"item_name":"A4 Paper",
"qty":"2"
},
{
"item_name":"Test Paper",
"qty":"6"
}
],
"total":"2"
},
{
"item_cat":"Computer Accessory ",
"items":[
{
"item_name":"Power pack",
"qty":"2"
}
],
"total":"1"
},
{
"item_cat":"Material",
"items":[
{
"item_name":"T-Shirt",
"qty":"3"
},
{
"item_name":"Cap",
"qty":"5"
}
],
"total":"2"
}
]
現在沒有 SQL 的數組循環(以確保它按預期工作):
$data = json_decode($json, true);
$len = count($data);
for($i =0; $i< $len; $i++){
$item_length = count($data[$i]['items']);
for($c=0; $c < $item_length; $c++){
foreach ($data[$i]['items'][$c] as $key => $value ) {
$qty = '';
if($key == "qty"){
$qty = $data[$i]['items'][$c];
}
if($key == 'item_name'){
$item_name = "$value";
}
這里的問題是:非人類變量名稱以及不正確使用 JSON 對象。
首先,讓我們將變量重命名為可讀的名稱。
例子:
$data[$i]
將是$catalog_entry
(對象)$data[$i]['items']
將是$catalog_entry_items
(數組)$data[$i]['items'][$c]
將是$catalog_entry_item
(一件物品,一個物體)
讓我們用新變量更改代碼:
$data = json_decode($json, true);
$len = count($data);
for($i =0; $i< $len; $i++) {
$catalog_entry = $data[$i];
$catalog_entry_items = $data[$i]['items'];
for($c=0; $c < sizeof($catalog_entry_items); $c++) {
$catalog_entry_item = $data[$i]['items'][$c];
$qty = $catalog_entry_item['qty'];
$item_name = $catalog_entry_item['item_name'];
echo $item_name . ' : ' . $qty . "\n"; // <-- this is for testing
}
}
運行此代碼并查看預期結果:
A4 Paper : 2
Test Paper : 6
Power pack : 2
T-Shirt : 3
Cap : 5
很好,現在我們有了qty和item_name。
我們來查詢一下。首先看看你的代碼:
$sql= $db->query("SELECT `stock` from `inventory` WHERE `item_name` = '$item_name'");
while ($sql1 = $sql->fetch_assoc()) {
$stock = $sql1['stock'];
}
兩個奇怪的事情:1)可能的 SQL 注入,2)$stock用新值多次替換變量(如果我們有超過 1 行的項目inventory)。
無論如何,如果這段代碼有效(我無法檢查),那么我們進入下一部分:
if ($stock > $qty ) {
$stock_balance = $stock - $qty;
$quantity = (int)$qty;
$db->query("UPDATE `inventory` SET `stock` = (`stock` - '$quantity') WHERE `item_name` = '$item_name'");
} else {
echo "<h3> This Operation Not Allowed: Stock Balance Is Less Than The Request <h3>";
}
首先,不必要地轉換為整數,因此刪除行$quantity = (int)$qty;并放入$stock_balance查詢中。我們將有:
if ($stock >= $qty ) {
$stock_balance = $stock - $qty;
$db->query("UPDATE `inventory` SET `stock` = $stock_balance WHERE `item_name` = '$item_name'");
} else {
echo "<h3> This Operation Not Allowed: Stock Balance Is Less Than The Request <h3>";
}
……好吧……不只是你累了,所以我現在就結束吧。詢問是否有什么不正確或不理解的地方。
- 1 回答
- 0 關注
- 125 瀏覽
添加回答
舉報