为存在两次的值创建foreach

时间:2015-11-04 11:47:49

标签: php

我在SELECT表格中有以下ProductName s QuantityorderDetails声明。见下文:

try {       
    $stmt = $conn->prepare("SELECT ProductName, Quantity FROM orderDetails WHERE OrderID = :OrderID");
    $stmt->bindParam(':OrderID', $_SESSION['newOrderID'], PDO::PARAM_INT);
    $stmt->execute();
    $_POST['ProductName'] = $stmt->fetch(PDO::FETCH_ASSOC); 
}

catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

如果$_POST['ProductName']['ProductName']不止一次存在,我该如何根据它创建一个foreach循环?

到目前为止我尝试了什么......

foreach($_POST['ProductName']['ProductName']) {

}

这不起作用......

我做错了什么?

完整代码:

try {       
    $stmt = $conn->prepare("SELECT ProductName, Quantity FROM orderDetails WHERE OrderID = :OrderID");
    $stmt->bindParam(':OrderID', $_SESSION['newOrderID'], PDO::PARAM_INT);
    $stmt->execute();
    array_push($_POST["ProductName"], $stmt->fetch(PDO::FETCH_ASSOC));
}

catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

// echo $_POST['ProductName']['ProductName'];
// echo $_POST['ProductName']['Quantity'];

try {       
    $stmt1 = $conn->prepare("SELECT Stock FROM products WHERE ProductName = :ProductName");
    $stmt1->bindParam(':ProductName', $_POST['ProductName']['ProductName']);
    $stmt1->execute();
    $_POST['Stock'] = $stmt1->fetch(PDO::FETCH_ASSOC); 
}

catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

// echo $_POST['Stock']['Stock'];

$_POST['DEDUCT'] = $_POST['Stock']['Stock'] - $_POST['ProductName']['Quantity'];

try {       
    $stmt2 = $conn->prepare("UPDATE products SET Stock = :Stock WHERE ProductName = :ProductName");
    $stmt2->bindParam(':Stock', $_POST['DEDUCT']);
    $stmt2->bindParam(':ProductName', $_POST['ProductName']['ProductName']);
    $stmt2->execute();
}

catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

2 个答案:

答案 0 :(得分:1)

您可以使用函数$rows创建一个名为(例如fetchAll())的新数组,其中包含所有已获取的数据(fetch()仅检索下一行)。 / p>

最直接的方法如下:

try {       
    $stmt = $conn->prepare("SELECT ProductName, Quantity FROM orderDetails WHERE OrderID = :OrderID");
    $stmt->bindParam(':OrderID', $_SESSION['newOrderID'], PDO::PARAM_INT);
    $stmt->execute();

    //Add all returned values to an array called "$rows"
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
}

catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}

然后,如果您想稍后访问该数据,您可以执行以下操作:

foreach($rows as $row){
    var_dump($row); //Show the data in the row to double-check
}

答案 1 :(得分:0)

您可以使用foreach创建数组:

$newval_arr = array(); 
foreach($_POST['ProductName']['ProductName'] as $key=>$value) {
  if(!in_array($value,$newval_arr) || empty($newval_arr))
  {
     $newval_arr[] = $value;
  }
}

然后你可以在foreach中使用$ newval_arr

foreach($newval_arr as $key=>$value)
{
  //Your code herer
}