2016-07-27 11 views
1

セッション(ゲストユーザ)にアイテムを格納し、カートにアイテムを表示しようとしています。私はセッションがログファイルに存在して見ることができます:ここでセッションにアイテムが保存されていません

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";}} 

が、これは、製品の単一のビューの上にある、私はセッションにアイテムを投稿することができます私のコードです:

$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']; 
     } 

    } 

セッションはヘッダーに設定されているので、どのページに関係なく常に開始されます。

私のカートは以下のように見えますが、ここでは多くのことが起こっていますが、本質的にアイテムはバスケットに表示されていません。

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

そして、ここでアクションポストを形です:

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

どこにも$ _SESSIONには何も保存されていません。セッションからREADINGのインスタンスが1つしかありません(foreachループ)。 –

+0

@MarcB私の謝罪は私の更新された質問をご覧ください。 – PhpDude

+1

基本的なデバッグ:セッションが実際に正常に開始されたかどうかを確認しましたか?あなたはちょうど "ヘッダー"と言うが、あまり意味はない。 '<?php session_start(); ?>はヘッダ内にありますが、依然として "ヘッダは既に送られています"という警告です。 –

答えて

1

if (isset($_POST['addToBasket'])) {session_start() を使用する他に、セッションがアクティブであることを確認してください。

関連する問題