Я работаю над проектом onlinestore. В моем коде корзина будет перечислять только 1 элемент. Например, когда я нажимаю кнопку «Добавить в корзину» под iphone 5s, он будет прыгать в корзину и показывать мне Iphone 5 с 1 количеством. Однако, когда я снова нажимаю Samsung, он перезапишет Iphone 5s и покажет мне только Samsung.
Вот код для продукта:
<div> <image src="ip5s.jpg"> <p><font color="blue">  Iphone 5S</font></p> <p><font color="red">  RM1999</font></p> <p><form name="addcart" method="post" action="processcart.php"> <input type="submit" name="addtocart" value="Add to cart" > <input type="hidden" name="product_id" value="1234" /> <input type="hidden" name="quantity" value="1" /> </form> </p> </div>    <div > <image src="s4.png"> <p><font color="blue">  Samsung Galaxy S4</font></p> <p><font color="red">  RM1999</font></p> <p><form name="addcart" method="post" action="processcart.php" > <input type="submit" name="addtocart" value="Add to cart"> <input type="hidden" name="product_id" value="1235" /> <input type="hidden" name="quantity" value="1" /> </form> </p> </div>
Вот processcart.php:
<?php session_start(); include_once("config.php"); $_SESSION['pid']=$_POST['product_id']; $_SESSION['qty']+=$_POST['quantity']; $_SESSION['cart']=true; sleep(2); echo "Add to cart successful"; header("refresh:1;url=cart.php"); exit(); ?>
Вот cart.php:
<?php if (!isset($_SESSION['cart'])) echo "<p>Your shopping cart is empty!</p>"; elseif (isset($_SESSION['cart'])) { define("DB_HOST", "localhost"); define("DB_NAME", "onlinestore"); define("DB_USER", "root"); define("DB_PASSWORD", ""); $tblname = "products"; mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); mysql_select_db(DB_NAME); $proid = $_SESSION['pid']; $query = "SELECT * from $tblname where product_id='$proid'"; $result = mysql_query($query); $count = mysql_num_rows($result); echo "<table>"; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<tr><td>" . $row['product_name'] . "</td><td>" . $row['product_price'] . "</td></tr>"; echo $_SESSION['qty']; } echo "</table>"; mysql_free_result($result); mysql_close(); } ?>
$_SESSION['pid']=$_POST['product_id'];
– это, вероятно, каждый раз заменяет продукт в корзине. Должен быть массив продуктов.
редактировать:
из
$_SESSION['pid']=$_POST['product_id']; $_SESSION['qty']+=$_POST['quantity'];
в
if(! isset($_SESSION['product'])) { $_SESSION['product'] = array(); } $_SESSION['product'][$_POST['product_id']] = $_POST['quantity'];
Затем отредактируйте свою обработку, чтобы пропустить сеанс и получить каждый продукт.
Изменить: вам следует использовать $_SESSION['cart']['products'] = array();
поскольку это имеет большее значение в организационной стороне ваших vars: Produacts находятся в телеге, и как таковая часть вашей телеги.
edit2:
Так я организовал тележку, основанную на использовании $ _SESSION ['cart'] ['products'] для хранения продуктов. Примечание: непроверенный код; Вероятно, есть некоторые опечатки. Просто пройдите это и попытайтесь понять логику:
// Move these into a different file, so you only have it once. // Then use require_once('DatabaseConnection.php'); define("DB_HOST", "localhost"); define("DB_NAME", "onlinestore"); define("DB_USER", "root"); define("DB_PASSWORD", ""); mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); mysql_select_db(DB_NAME); if (!isset($_SESSION['cart'])) { echo "<p>Your shopping cart is empty!</p>"; } else { $tblname = "products"; require_once('DatabaseConnection.php'); $prodids = array(); foreach($_SESSION['cart']['products'] as $id => $qntity) { $prodids[] = $id; } $prodids = implode(',', $prodids); $query = "SELECT * from $tblname where product_id in ($prodids) "; $result = mysql_query($query) or die(mysql_error()); echo "<table>"; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<tr><td>" . $row['product_name'] . "</td><td>" . $row['product_price'] . "</td></tr>". $_SESSION['cart']['products'][$row['product_id']]; } echo "</table>"; mysql_free_result($result); mysql_close();