簡體   English   中英

PHP - 使用 foreach 存儲會話數組的值以發送到數據庫

[英]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>";
}
?>

你的方法有幾個問題:

  1. 您假設Orders表中的Orders將按照出現在$_SESSION['prodID']$_SESSION['qty']數組中的相同順序進行檢索。 如果您的SELECT * FROM Orders沒有ORDER BY子句,您真的無法做出這樣的假設。

  2. 您假設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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM