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 & 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>";
}
どこにも$ _SESSIONには何も保存されていません。セッションからREADINGのインスタンスが1つしかありません(foreachループ)。 –
@MarcB私の謝罪は私の更新された質問をご覧ください。 – PhpDude
基本的なデバッグ:セッションが実際に正常に開始されたかどうかを確認しましたか?あなたはちょうど "ヘッダー"と言うが、あまり意味はない。 '
<?php session_start(); ?>はヘッダ内にありますが、依然として "ヘッダは既に送られています"という警告です。 –