2016-09-09 12 views
0

まずで使用された回数に応じて、変数を追加します:私が作るしようとしています私は私のコードを提供します...それは、foreachのすべての

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt1 = $conn->prepare("SELECT reference, price FROM ps_product_attribute WHERE id_product = ". implode(' AND ', $_POST['checkbox']) .""); 
    $stmt1->execute(); 
    $product = $stmt1->fetchAll(); 

    // Get Product Price 
    $stmt2 = $conn->prepare("SELECT * FROM ps_product WHERE id_product = ". implode(' AND ', $_POST['checkbox']) .""); 
    $stmt2->execute(); 
    $productPrice = $stmt2->fetchAll(); 

    foreach ($productPrice as $rowPrice) { 
     foreach ($product as $row) { 
      $Price = $rowPrice['price'] + $row['price']; 
      $NET = $Price; 
      $VAT = $Price * 0.2; 
      $Total = $Price + $VAT; 

      print '<tr>'; 
       print '<td>'. $row['reference'] .'</td>'; 
       print '<td>Product Name</td>'; 
       print '<td>'. $quantity .'</td>'; 
       print '<td>&pound;'. number_format((float)$Price, 2, '.', '') .'</td>'; 
      print '</tr>'; 
     } 
    } 

    echo ' 
     <tr> 
      <td style="border: 0;"></td> 
      <td style="border: 0;"></td> 
      <td><p style="font-weight: bold; float: right;">NET Amount</p></td> 
      <td><p style="float: right;">&pound;'. number_format((float)$NET, 2, '.', '') .'</p></td> 
     </tr> 
     <tr> 
      <td style="border: 0;"></td> 
      <td style="border: 0;"></td> 
      <td><p style="font-weight: bold; float: right;">VAT</p></td> 
      <td><p style="float: right;">&pound;'. number_format((float)$VAT, 2, '.', '') .'</p></td> 
     </tr> 
     <tr> 
      <td style="border: 0;"></td> 
      <td style="border: 0;"></td> 
      <td><p style="font-weight: bold; float: right;">Total</p></td> 
      <td><p style="float: right;">&pound;'. number_format((float)$Total, 2, '.', '') .'</p></td> 
     </tr> 
    '; 
} 

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

$conn = null; 

変数$ NETは、しかし、と等しくなります多くの行が価格で返されます。たとえば、id_productが8の場合、2つの製品£18.95と£21.00が返されます。現在、$ NETは£21.00に設定されていますが、£39.95です。

答えて

0

SQL文が正しく表示されない - $_POST['checkbox']が複数の項目を含む配列である場合、結果のSQLは正しく準備できないと思います。

例として、次の点を考慮してください

$_POST['checkbox']=array(1,2,3,4,5,6,7,8,9); 
$stmt2 = "SELECT * FROM ps_product WHERE id_product = ". implode(' AND ', $_POST['checkbox']); 
echo $stmt2; 

これは、のようなSQLを生成します:

SELECT * FROM ps_product WHERE id_product = 1 AND 2 AND 3 AND 4 AND 5 AND 6 AND 7 AND 8 AND 9 

をあなたはIN演算子を使用した場合、次のようにしかし、あなたは、SQLを構築できます。

$_POST['checkbox']=array(1,2,3,4,5,6,7,8,9); 
$stmt2 = "SELECT * FROM ps_product WHERE id_product IN (" . implode(',', $_POST['checkbox']) .");"; 
echo $stmt2; 

次のようなSQLを生成するもの:

しかし、関連する2つのテーブルを使用しているため、テーブルに参加して1つのクエリを作成する可能性があります。

(私はここで何かを見逃しているかもしれませんが)、その後で動作するように簡単にエンドループを作る必要があり、あなたはおそらく、このようなループを使用でき
$sql="select * from `ps_products` p 
    left outer join `ps_product_attribute` a on a.`product_id`=p.`product_id` 
    where p.`product_id` in (".implode(',',$_POST['checkbox']).");"; 

$TOTAL=0;$NET=0; 
while($rs = $stmt1->fetch(PDO::FETCH_OBJECT)){ 
    $price = $rs->price; 
    $VAT = $price * 0.2; 
    $NET += $price; 
    $TOTAL += ($price + $VAT); 
    /* other stuff */ 
} 
関連する問題