2016-07-27 15 views
1

Ich versuche, Elemente in einer Sitzung (Gastbenutzer) zu speichern und die Elemente in einem Einkaufswagen anzuzeigen. Ich kann die Sitzung gibt es in der Protokolldatei:Elemente, die nicht in Sitzung gespeichert werden

products|a:1:{i:0;a:6:{s:3:"img";s:62:"http://localhost/eCommerce%20Project/uploads/womens/w_nike.jpg";s:2:"id";s:1:"3";s:4:"name";s:11:"womens nike";s:5:"price";s:2:"14";s:3:"sku";s:3:"456";s:11:"description";s:20:"Womens Nike trainers";}} 

Hier ist mein Code, der mir den Artikel der Sitzung zu schreiben erlaubt, dies ist ein auf einer einzigen Ansicht des Produkts:

$product_id = $_GET['product_id']; 
$sql = "SELECT * FROM Products WHERE product_id = $product_id"; 
    $result = $conn->query($sql); 

    if($result->num_rows > 0){ 
     while($row = $result->fetch_assoc()){ 
      echo '<img src=' . $row['product_img'] . ' />'; 
      echo '<div class="title">'. $row['product_name'] .'</div>'; 
      echo '<div class="title">'. $row['product_price'] .'</div>'; 
      echo '<div class="title">'. $row['product_sku'] .'</div>'; 
      echo '<div class="title">'. $row['product_description'] .'</div>'; 
      echo '<div class="title">'. $row['gender'] .'</div>'; 
      echo '<form action="addToCart.php" method="post"> 
        <input type="hidden" name="product_img" value="' . $row['product_img'] . '" /> 
        <input type="hidden" name="product_id" value="' . $row['product_id'] . '" /> 
        <input type="hidden" name="product_name" value="' . $row['product_name'] . '" /> 
        <input type="hidden" name="product_price" value="' . $row['product_price'] . '" /> 
        <input type="hidden" name="product_sku" value="' . $row['product_sku'] . '" /> 
        <input type="hidden" name="product_description" value="' . $row['product_description'] . '" /> 
        <button name="addToBasket">Add to basket</button> 
        </form>'; 

      $gender = $row['gender']; 
     } 

    } 

Die Sitzungen werden in der Kopfzeile festgelegt, so dass immer gestartet wird, egal auf welcher Seite Sie sich befinden.

Mein Einkaufswagen sieht wie folgt aus, es ist viel los hier, aber im Wesentlichen wird der Artikel nicht im Warenkorb angezeigt.

$sum = 0; 

foreach ($_SESSION['products'] as $product) { 
    $name = $product['name']; 
    $id = $product['id']; 
    $price = $product['price']; 
    $img = $product['img']; 
    $sku = $product['sku']; 
    $description = $product['description']; 

    echo '<a href="single_product.php?product_id=' . $product['id'] . '">'; 
    echo "<img src='$img'><br />"; 
    echo "Product: $name<br />"; 
    echo "Price: $price | ID: $id<br />"; 
    echo "$description"; 
    echo '</a><br /><br />'; 
    echo '<form action="removeItem.php" method="post"> 
      <input type="hidden" name="product_id" value="' . $product['id'] . '" /> 
      <button name="removeItem">Remove</button> 
      </form>';  

    $sum += $price; 

} 

if($product == 0){ 
    echo 'Sorry no items in basket <a href="/eCommerce%20Project/">Continue shopping</a>'; 
} 

    echo "<h4>Sub total £" . $sum . "</h4>"; 

    // Calulating delivery costs 
    $deliveryCharge = 0; // Initial value 
    if($sum > 50 || $product == 0){ // If more than £50 deliver is 0 
     $deliveryCharge = 0; 
    } else if($sum < 50){ // If less than £50 delivery is £15 
     $deliveryCharge = 15; 
    }; 

    // Output of delivery cost 
    echo "<h4>Delivery £" . $deliveryCharge . "</h4>";  

    // Calculation for working out 20% on top of price 
    $percentage = 20; 
    $totalPrice = $sum; 
    $totalPrice = ($percentage/100) * $totalPrice; 

    // Calculation to find totals for price + vat + delivery 
    $totalPriceWithVat = $sum + $totalPrice + $deliveryCharge; 

    // Output full total 
    echo "<h4>Total (Inc. VAT &amp; Delivery) £" . $totalPriceWithVat . "</h4>"; 

    echo '<button>Checkout</button>'; 

Und hier ist die Form, die Aktionen der Post:

if (isset($_POST['addToBasket'])) { 
    $_SESSION['products'][] = array(
     'img' => $_POST['product_img'], 
     'id' => $_POST['product_id'], 
     'name' => $_POST['product_name'], 
     'price' => $_POST['product_price'], 
     'sku' => $_POST['product_sku'], 
     'description' => $_POST['product_description'] 
    ); 
echo "<script type='text/javascript'> window.location='basket.php'; </script>"; 
} 
+2

Nirgendwo drin hast du jemals etwas in $ _SESSION gespeichert. Sie haben nur eine Instanz von READING aus der Sitzung (eine foreach-Schleife). –

+0

@MarcB Entschuldigung bitte sehen Sie meine aktualisierte Frage. – PhpDude

+1

Basic Debugging, dann: Haben Sie überprüft, ob die Sitzung tatsächlich erfolgreich gestartet wurde? Sie sagen nur "im Header", aber nicht viel. ' ist "in der Kopfzeile", ist aber immer noch eine Warnung "Kopfzeilen bereits gesendet". –

Antwort

1

sicher sein, dass Sitzung aktiv ist, sonst session_start() vor if (isset($_POST['addToBasket'])) { verwenden.