2016-03-20 27 views
0

foreachループからSQLに複数の値を挿入するにはどうすればよいですか?mysqliにforeachループから複数の値を挿入

(私は最後の値をすべて挿入していません.SQLに値を追加すると、foreachループでは1つの値しか挿入されません) 注文IDとしてSQLに一意の番号を追加する方法あなたが他の情報が必要な場合は、各挿入? ここに私のコードは...

<?php include'header_nav.php'; ?> 


<div class="mainContent_u"> 
<h1> Your shopping Chart<br/>contains ...</h1> 

<table class="show_cart"> 
<tr> 
<th><strong><h3>Book Title</strong></h3></th> 
<th><strong><h3>Quantity</strong></h3></th> 
<th><strong><h3>Price</strong></h3></th> 
<th><strong><h3>Total</strong></h3></th> 
</tr> 

<?php 

require 'connect_db.php'; 
$totalPrice = 0; 

foreach($_POST as $name => $value){ 

    if(is_numeric($value) && $value != 0 && $name != "submit"){ 

     $sql = "SELECT id,book, price from add_item WHERE id = ".$name; 
     $result=mysqli_query($con,$sql);  
     $row = mysqli_fetch_assoc($result); 
     $price = $row['price'] * $value; 
     $price = number_format($price,2); 
     $totalPrice = $totalPrice + $price; 
     $totalPrice = number_format($totalPrice,2); 
     $qty = $value; 
      $sql = "INSERT INTO orders (order_id,book_name, quantity, price_pb, price_total) VALUES ('" . $row['id'] . "','" . $row['book'] . "','" . $qty . "','" . $row['price'] . "','" . $price . "')"; 

    echo "<tr>"; 
    echo "<td>".$row['book']."</td><td>".$value."</td><td>€".$row['price']."</td><td>€".$price."</td>"; 
    echo "</tr>"; 
    } 
} 
    echo "</table>"; 
    echo "<strong><h3>Total Price: €".$totalPrice."</h3></strong>"; 

?> 
    <p><strong>Review your shopping cart and then proceed to checkout.</strong></p> 


    <a href="checkout.php"><button class="submit" >Proceed to Checkout</button></a> 


    </div> 
<?php include'footer.php'; ?> 

で知らせてください。

そしてaswell、なぜこのelseステートメントが機能していません。

foreach($_POST as $name => $value){ 

if(is_numeric($value) && $value != 0 && $name != "submit"){ 

    $sql = "SELECT id,book, price from add_item WHERE id = ".$name; 
    $result=mysqli_query($con,$sql);  
    $row = mysqli_fetch_assoc($result); 
    $price = $row['price'] * $value; 
    $price = number_format($price,2); 
    $totalPrice = $totalPrice + $price; 
    $totalPrice = number_format($totalPrice,2); 
    $qty = $value; 
     $sql = "INSERT INTO orders (order_id,book_name, quantity, price_pb, price_total) VALUES ('" . $row['id'] . "','" . $row['book'] . "','" . $qty . "','" . $row['price'] . "','" . $price . "')"; 

echo "<tr>"; 
echo "<td>".$row['book']."</td><td>".$value."</td><td>€".$row['price']."</td><td>€".$price."</td>"; 
echo "</tr>"; 
}else {header('location:all_books.php');} 
} 

ありがとう、

答えて

0

あなたのやっていることは、データベースにたくさんのリクエストを出すことです。私は次のようなことをします:

//first create something like: $id_seq= '(1,2,3,56,7674,234)'; 
$id_seq = implode(',',$POST); 
//okay I didn't clean up the Post, but you'll get the picture hopefully :) 

//Then pull your request in one go: 
$sql = 'SELECT id,book, price from add_item WHERE id IN (' . $id_seq . ')'; 

このようにして、データベースをたくさん保存します。私はそれがあなたのforeachメソッドを使用するよりも(データベースのパフォーマンスのように)安価であるかどうかはわかりませんが、それはもっと素敵なコーディングです。その後

やったあなたのforeachの中であなたのようなデータの新しいリストを計算する:あなたがHTMLを印刷している場合がありますので、それは動作しません

else {header('location:all_books.php');} 
} 

:あなたのリダイレクト-質問については

foreach ($list as $rec){ 
    $price = $rec['price'] * $_POST[$rec['id']]; 
    //complete your price and insert it in the orders-table 
} 

をループの早い段階。いずれかのHTMLを印刷するか、リダイレクトを使用しますが、両方を使用しないでください。リダイレクトする前にチェックをしなければなりません。 EDIT:あなたのスクリプトの上部にhtmlを印刷したので、リダイレクトは機能しません。

0

代わりにPDOを使用してください。 SQLインジェクション攻撃の頭痛を軽減します。

<?php include'header_nav.php'; ?> 

<div class="mainContent_u"> 
<h1> Your shopping Chart<br/>contains ...</h1> 

<table class="show_cart"> 
<tr> 
    <th><strong><h3>Book Title</strong></h3></th> 
    <th><strong><h3>Quantity</strong></h3></th> 
    <th><strong><h3>Price</strong></h3></th> 
    <th><strong><h3>Total</strong></h3></th> 
</tr> 

<?php 

    require 'connect_db.php'; 
    $totalPrice = 0; 

    foreach($_POST as $name => $value){ 

    if(is_numeric($value) && $value != 0 && $name != "submit"){ 

    $sql = "SELECT id,book, price from add_item WHERE id = ".$name; 
    $result=mysqli_query($con,$sql);  
    while($row = mysqli_fetch_assoc($result)) { 
     $price = $row['price'] * $value; 
     $price = number_format($price,2); 
     $totalPrice = $totalPrice + $price; 
     $totalPrice = number_format($totalPrice,2); 
     $qty = $value; 
     $sql = "INSERT INTO orders (order_id,book_name, quantity, price_pb, price_total) VALUES ('" . $row['id'] . "','" . $row['book'] . "','" . $qty . "','" . $row['price'] . "','" . $price . "')"; 
     mysqli_query($con, $sql); 
     echo "<tr>"; 
     echo "<td>".$row['book']."</td><td>".$value."</td><td>€".$row['price']."</td><td>€".$price."</td>"; 
     echo "</tr>"; 
     } 
    } 
} 
echo "</table>"; 
echo "<strong><h3>Total Price: €".$totalPrice."</h3></strong>"; 

    ?> 
    <p><strong>Review your shopping cart and then proceed to checkout.  </strong></p> 


<a href="checkout.php"><button class="submit" >Proceed to Checkout</button></a> 


</div> 
<?php include'footer.php'; ?> 
+0

'mysqli'も文を準備しています。 – HddnTHA

0

$sql = "SELECT id,book, price from add_item WHERE id = ".$name;手動でリクエストすると、いくつかの行が表示されますか?

+0

こんにちはみんな...私の問題を解決する努力をしてくれてありがとう、しかし私はそれを解決する...私はデータベース内のすべての注文を追加し、セッションID = sessionid()...をはるかに簡単に表示するセッションを使用 – Rogi

関連する問題