PHP-使用foreach来存储会话数组的值以发送到数据库



更新:不需要使用foreach,但这是我所知道的访问会话数组的唯一方法

我有一个会话数组,其中包含多个值。我想将这些值插入数据库。

以下是我所做的:

我会使用foreach来获取和显示数组中的值,这是正确的,但如果我在foreach循环之外调用变量,它只输出最后一个值。

为什么我不在每个for循环中插入?我不能,因为我试过了,但它不会插入,因为OrderDetails.OrderID可能不为NULL,这意味着没有OrderID我无法插入。

为了测试的目的,我尝试了一个嵌套的foreach循环,里面有insert,它正确地显示了所有内容,但它显示的是产品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>";
}
?>

如果我理解正确的话,您不需要在第一个foreach中各有一个第二个foreach。基本上,一个前臂就可以了。例如:

foreach($prodID as $key => $data)
{
$sql = "INSERT INTO OrderDetails (OrderID,ProductID,Quantity)
Values('$orderID','$data','$qty[$key]')";
$exec = $db -> exec($sql);    
}

这是未经测试的空中代码。但这个想法应该会有所帮助。如果你有问题,请回复。

您的方法存在以下几个问题:

  1. 假设Orders表中的订单将按照与$_SESSION['prodID']$_SESSION['qty']阵列中出现的顺序相同的顺序检索。如果你的SELECT * FROM Orders中没有ORDER BY子句,你真的无法做出这样的假设。

  2. 您假设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++;
}
?>

最新更新