[英]PHP - using foreach to store values of a session array to send to database
更新:不需要使用 foreach,但這是我知道訪問會話數組的唯一方法
我有一個包含多個值的會話數組。 我想將這些值插入到數據庫中。
這是我所做的:
我會使用 foreach 來獲取和顯示數組中的值,它正確地做但如果我在 foreach 循環之外調用變量,它只輸出最后一個值。
為什么我不在每個 for 循環中插入? 我不能,因為我試過了,它不會插入它,因為 OrderDetails.OrderID 可能不是 NULL,這意味着我不能在沒有 orderID 的情況下插入。
只是為了測試目的,我嘗試了一個嵌套的 foreach 循環,里面有插入,它正確顯示了所有內容,但它顯示的是產品 ID 的數量。
示例輸入:
[prodID] => array{
[0] => 25
[1] => 5
}
[qty] => array{
[0] => 3
[1] => 5
}
我給出的代碼將發送 5 個 prodID 和 5 個數量
我希望我的輸出是:
25,5 prodID 發送到數據庫
3,5 數量發送到數據庫
如果需要,我可以提供關於我嘗試的不同示例。
<?php
//first file
session_start();
$prodID = $_SESSION['prodID'];
$quantity = $_SESSION['qty'];
$Oquery = "select * from Orders";
$result = $db -> Oquery($query);
while($row = $result -> fetch()){
$orderID = $row['OrderID'];
}
foreach($prodID as $arrayProd){
}
foreach($quantity as $arrayQuantity){
}
$sql = "INSERT INTO OrderDetails (OrderID,ProductID,Quantity)
Values('$orderID','$arrayProd','$arrayQuantity')";
$exec = $db -> exec($sql);
?>
<?php
//second file
session_start();
$orderNum = $_GET['orderID'];
$query = "SELECT * FROM OrderDetails WHERE OrderID = $orderNum";
$result = $db -> query($query);
while($row= $result->fetch(PDO::FETCH_ASSOC)){
$prodID = $nrow['ProductID'];
$quantity = $nrow['Quantity'];
echo"ProdID<br>
$quantity<br>";
}
?>
你的方法有幾個問題:
您假設Orders
表中的Orders
將按照出現在$_SESSION['prodID']
和$_SESSION['qty']
數組中的相同順序進行檢索。 如果您的SELECT * FROM Orders
沒有ORDER BY
子句,您真的無法做出這樣的假設。
您假設Orders
表中的Orders
數與$_SESSION
的項目數完全匹配。
盡管存在這些(和其他)問題,但此解決方案可能對您有用:
<?php
session_start();
$prodID = $_SESSION['prodID'];
$quantity = $_SESSION['qty'];
$Oquery = "select * from Orders";
$result = $db -> Oquery($query);
$i = 0;
while($row = $result -> fetch()){
$orderID = $row['OrderID'];
$pid = $prodID[$i];
$qty = $quantity[$i];
// Should probably do some check here to ensure $prodID[$i] and $quantity[$i] are valid, before attempting the INSERT
$sql = "INSERT INTO OrderDetails (OrderID,ProductID,Quantity) VALUES ('$orderID','$pid','$qty')";
$exec = $db -> exec($sql);
$i++;
}
?>
如果我理解正確,您不需要在第一個 foreach 中為每個 foreach 設置第二個 foreach。 基本上, 1 foreach 就可以了。 例子:
foreach($prodID as $key => $data)
{
$sql = "INSERT INTO OrderDetails (OrderID,ProductID,Quantity)
Values('$orderID','$data','$qty[$key]')";
$exec = $db -> exec($sql);
}
這是空氣代碼,未經測試。 但這個想法應該會有所幫助。 如果您有問題,請回帖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.