2014-09-13 3 views
-1

Je ne peux pas trouver où est le problème à mon code. Il n'envoie que des commandes uniques à la base de données. Quand je commande dans mon panier 2 ou plus que des articles, il envoie seulement la dernière commande. Je n'ai aucune idée de comment je peux changer ou ajouter de la syntaxe dans mon code.MySQLi et PHP envoie uniquement des produits uniques sur la base de données

Voici mon code dans 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>'; 
?> 

Et voici mes codes checkout.with_us.php. Ce code est le pont pour envoyer les informations à la base de données.

<?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

Vous a publié ce billet déjà http://stackoverflow.com/q/25821058/ –

+0

Oui, monsieur. Je n'ai toujours pas de réponse pour m'aider :( –

+0

si vous voulez avoir plusieurs valeurs dans un '$ _POST ['xxx']' vous devez le configurer comme un tableau: '$ _POST ['xxx'] []' – lexith

Répondre

3

Supprimer votre autre question, d'accord?

Le problème est que vous bouclez $_SESSION et utilisez la même valeur name chaque fois. Vous devez créer un tableau de vos entrées. Voici un exemple:

<?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>'; 
?> 

Vous pouvez prendre cela en boucle dans votre tableau 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'); 
?> 

Je ne sais pas quel est le but de la table orders mais avec mon exemple, les produits seront être ajouté à ce tableau avec le même firstname, lastname, etc.

+0

Hahaha Dieu merci! C'est fait monsieur! tu es un professeur génial. Les multiples commandes ont été envoyées et la dernière commande contient le "Sous Total" Comment avez-vous fait cela? : D –

+0

Enfin hehe. Votre principal problème était de savoir où utiliser la même valeur 'name' pour chaque' input'. Parce qu'ils ont tous le même nom, seule la dernière valeur est transmise. Lorsque vous utilisez les '[]' crochets vous créez un tableau d'informations, vous pouvez stocker plusieurs lignes. –

+0

Aha! Oui, je vois mon erreur. haha juste le nom. Il n'y a pas de tableau dans chaque objet que je veux envoyer. Ahahaha Merci pour cette merveilleuse explication. Puis-je encore poser une question. Parce que je suis confus. Après que j'envoie l'ordre à mon « order.php », comment puis-je afficher les informations de table d'ordre multiple avec le même nom. Mon code dans "order.php" est seulement capable d'afficher la commande unique. Pouvez-vous voir mon code si vous avez un moment? :) –

Questions connexes