2014-09-13 40 views
-1

我找不到代碼中的問題。它只向數據庫發送單個訂單。當我在我的購物車中訂購2件或更多件商品時,它只發送最後的訂單。我不知道如何在代碼中更改或添加一些語法。MySQLi和PHP只發送數據庫中的單個產品

這是我在checkout.php

<?php 
session_start(); 
echo '<h3>Your Order</h3>'; 
$current_url = base64_encode($url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
    if(isset($_SESSION['products'])){ 
    echo '<ol>'; 
    echo '<form action="checkout_with_us.php" method="POST">'; 
    $total = 0; 
    $cart_items = 0; 

     foreach($_SESSION['products'] as $cart_itm){ 
      $product_code = $cart_itm['code']; 
      $results = $mysqli->query("SELECT product_name,product_desc,price FROM products WHERE product_code='$product_code' LIMIT 1"); 
      $obj = $results->fetch_object(); 
       echo '<li>'; 
       echo 'Price: '.$currency.$obj->price; 
       echo '<h4>'.$obj->product_name.'(Code: '.$product_code.')</h4>'; 
       echo 'Qty: '.$cart_itm['qty']; 
       echo '</li>'; 

        $subtotal = ($cart_itm['price'] * $cart_itm['qty']); 
        $total = ($total + $subtotal); 
        $cart_items++; 
         echo '<input type="hidden" name="item_name" value="'.$obj->product_name.'">'; 
         echo '<input type="hidden" name="item_desc" value="'.$obj->product_desc.'">'; 
         echo '<input type="hidden" name="item_qty" value="'.$cart_itm["qty"].'">'; 
         echo '<input type="hidden" name="item_code" value="'.$product_code.'">';  
       } 
        echo '<strong>Sub Total: '.$currency.$total.'</strong>'; 
        echo '<input type="hidden" name="price" value="'.$total.'">'; 
        echo '</ol>'; 
        } 

//Here is the information of the customer 
echo 'Firstname: <input type="text" name="firstname"><br />'; 
echo 'Lastname: <input type="text" name="lastname"><br />'; 
echo 'Email: <input type="text" name="email"><br />'; 
echo '<input type="submit" value="Send Step">'; 

echo '</form>'; 
?> 

這裏是我的checkout.with_us.php代碼的代碼。此代碼是將信息發送到數據庫的橋樑。

<?php 
session_start(); 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$email = $_POST['email']; 
$order_name = $_POST['item_name']; 
$order_code = $_POST['item_code']; 
$order_qty = $_POST['item_qty']; 
$sub_total = $_POST['price']; 

$conn = mysqli_connect('localhost','root','','sampsix')or die('Could not connect'); 

$query = "INSERT INTO `sampsix`.`orders`(`firstname`,`lastname`,`email`,`OrderName`,`OrderCode`,`OrderQty`,`SubTotal`) VALUES('$firstname','$lastname','$email','$order_name','$order_code','$order_qty','$sub_total')"; 

mysqli_query($conn,$query); 

mysqli_close($conn); 

header('Location: checkout.php'); 
?> 
+0

您已經發布了這個http://stackoverflow.com/q/25821058/ – 2014-09-13 16:29:23

+0

是的先生。仍然我沒有答案來幫助我:( – 2014-09-13 16:32:12

+0

如果你想在一個'$ _POST ['xxx']''中有多個值,你需要將它設置爲一個數組:'$ _POST ['xxx'] []' – lexith 2014-09-13 16:34:18

回答

3

刪除你的其他問題,好嗎?

問題是你循環通過$_SESSION並每次使用相同的name值。您需要創建一個輸入數組。這裏有一個例子:

<?php 
echo '<h3>Your Order</h3>'; 
$current_url = base64_encode($url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
    if(isset($_SESSION['products'])){ 
    echo '<ol>'; 
    echo '<form action="checkout_with_us.php" method="POST">'; 
    $total = 0; 
    $cart_items = 0; 

     foreach($_SESSION['products'] as $cart_itm){ 
      $product_code = $cart_itm['code']; 
      $results = $mysqli->query("SELECT product_name,product_desc,price FROM products WHERE product_code='$product_code' LIMIT 1"); 
      $obj = $results->fetch_object(); 
       echo '<li>'; 
       echo 'Price: '.$currency.$obj->price; 
       echo '<h4>'.$obj->product_name.'(Code: '.$product_code.')</h4>'; 
       echo 'Qty: '.$cart_itm['qty']; 
       echo '</li>'; 

        $subtotal = ($cart_itm['price'] * $cart_itm['qty']); 
        $total = ($total + $subtotal); 
        $cart_items++; 
         echo '<input type="hidden" name="product['.$product_code.'][item_name]" value="'.$obj->product_name.'">'; 
         echo '<input type="hidden" name="product['.$product_code.'][item_desc]" value="'.$obj->product_desc.'">'; 
         echo '<input type="hidden" name="product['.$product_code.'][item_qty]" value="'.$cart_itm["qty"].'">'; 
         echo '<input type="hidden" name="product['.$product_code.'][item_code]" value="'.$product_code.'">';  
       } 
        echo '<strong>Sub Total: '.$currency.$total.'</strong>'; 
        echo '<input type="hidden" name="product['.$product_code.'][price]" value="'.$total.'">'; 
        echo '</ol>'; 
        } 

//Here is the information of the customer 
echo 'Firstname: <input type="text" name="firstname"><br />'; 
echo 'Lastname: <input type="text" name="lastname"><br />'; 
echo 'Email: <input type="text" name="email"><br />'; 
echo '<input type="submit" value="Send Step">'; 

echo '</form>'; 
?> 

您可以通過在product陣列循環趕上這樣的:

<?php 
$firstname = $_POST['firstname']; 
$lastname = $_POST['lastname']; 
$email = $_POST['email']; 

$conn = mysqli_connect('localhost','root','','sampsix')or die('Could not connect'); 

foreach($_POST['product'] as $product) 
{ 
    $order_name = $product['item_name']; 
    $order_code = $product['item_code']; 
    $order_qty = $product['item_qty']; 
    $sub_total = $product['price']; 

    $query = "INSERT INTO `sampsix`.`orders`(`firstname`,`lastname`,`email`,`OrderName`,`OrderCode`,`OrderQty`,`SubTotal`) VALUES('$firstname','$lastname','$email','$order_name','$order_code','$order_qty','$sub_total')"; 
    mysqli_query($conn,$query); 
} 



mysqli_close($conn); 

header('Location: checkout.php'); 
?> 

我不知道目的是表orders的產品,但與我的例子中會出現什麼被添加到這個表格中的相同firstname,lastname

+0

哈哈哈感謝上帝!這是做先生!你是一個很棒的老師。多個訂單已發送,最後一個訂單保存「小計」您是怎麼做的? :D – 2014-09-13 18:23:04

+0

終於嘿嘿。你的主要問題是你在哪裏使用每個'輸入'相同的'name'值。因爲它們都具有相同的名稱,所以只有最後一個值被傳遞。當你使用'[]'方括號時,你創建了一個信息數組,你可以在其中存儲多行。 – 2014-09-13 18:28:05

+0

啊哈!是的,我看到了我的錯誤。哈哈只是名字。我想發送每個對象中沒有數組。 Ahahaha謝謝你的美妙解釋。我還可以問一個問題。因爲我很困惑。將訂單發送到我的「order.php」後,如何查看多個訂單的表格信息同名。我在「order.php」中的代碼只能查看單個訂單。如果你有時間,你能看到我的代碼嗎? :) – 2014-09-13 18:34:20