我使用url ?action=add
将项目添加到购物车中。我尚未初始化变量$count
,并且正在遇到以下错误:
Notice: Undefined index: count in C:wampwwwcart.php on line 31
Notice: Undefined index: count in C:wampwwwcart.php on line 32
我知道我需要定义$计数变量。($ count = 0;)但是我不希望该页面刷新,并且每次用户在用户向购物车中添加新项目时,会话变量重置为0。$计数需要在下一页上用作计数器。我该怎么做?
这是我的案例代码:
switch($action) {
case "add":
if (isset($_SESSION['cart'][$comic_id])) {
$count=$_SESSION['count']; //LINE 31
$_SESSION['count']++; //LINE 32
$_SESSION['cart'][$comic_id]++;
} else {
$_SESSION['cart'][$comic_id] = 1;
}
break;
添加if(!isset($ _ session ['count']))$ _session ['count'] = 1;
<?php
if(!isset($_SESSION)) {
session_start();
}
$total = 0;
$page = 'cart';
$dbname = "crystal_fusion";
$dbhost = "127.0.0.1";
$dbuser = "root";
$dbpwd = "";
$link = mysql_connect($dbhost, $dbuser, $dbpwd);
mysql_select_db($dbname);
if(isset($_GET['comic_id'])){
$comic_id = $_GET['comic_id'];
} else {
$comic_id = NULL;}
$action = $_GET['action'];
if($comic_id && !productExists($comic_id)) {
die("We apologise, but we can't seem to find the comic you were looking for!!!");
}
if (!isset($_SESSION['count'])) $_SESSION['count'] = 1; //added as suggested - now output is correct when adding multiples of 1 item. However, the count is wrong if more than 1 item is added.
switch($action) {
case "add":
if (isset($_SESSION['cart'][$comic_id])) {
$count=$_SESSION['count'];
$_SESSION['count']++;
$_SESSION['cart'][$comic_id]++;
} else {
$_SESSION['cart'][$comic_id] = 1;
}
break;
case "remove":
if (isset($_SESSION['cart'][$comic_id])) {
$_SESSION['cart'][$comic_id]--;}
if($_SESSION['cart'][$comic_id] == 0) unset($_SESSION['cart'][$comic_id]);
break;
case "empty":
unset($_SESSION['cart']);
session_destroy();
break;
}
require('header.php');
require('sidebar.php');
if (isset($_SESSION['cart'][$comic_id])){
echo "<table border="0" padding="10" width="80%">";
echo "<td colspan="1" align="left"><a href="title.php">Continue Shopping</a></div>";
echo "<td colspan="6" align="right"><a href="$_SERVER[PHP_SELF]?action=empty" onclick="return confirm('Crystal Fusion: Are you sure you wish to empty your cart?');">Empty Cart</a></td>"; //empty cart link --Sam
echo "<tr height="20px">";
echo "<tr height="20px">";
echo "<td align=center>Image</td><td align=center>Title</td><td align=center>Description</td><td colspan=3 align=center>Copies (+/-)</td><td align=center>Price</td>";
echo "<tr height="20px">";
foreach($_SESSION['cart'] as $comic_id => $qty) {
$sql = sprintf("SELECT title, description, cost, image_thumbnail
FROM comic
WHERE comic_id = %d;",$comic_id);
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0) {
list($name, $description, $price, $image_thumbnail) = mysql_fetch_row($result);
$cost = $price * $qty;
$total = $total + $cost;
$cost = number_format($cost,2);
$total = number_format($total,2);
$description = substr($description, 0, 250);
echo "<br><tr>";
echo "<td width="10px" align="center"><img height=100 align=center src="$image_thumbnail">";
echo "<td align="center">$name</td>";
echo "<td width="40%" align="center">$description...<a href=comic_dyn.php?comic_id=$comic_id>More Info</td>";
echo "<td width="30px" align="center"><a href="$_SERVER[PHP_SELF]?action=add&comic_id=$comic_id">+<br></a><td align="center">$qty <td width="20px" align="center"><a href="$_SERVER[PHP_SELF]?action=remove&comic_id=$comic_id">-</a></td>";
echo "<td align="right">$$cost</td>";
echo "</tr>";
}
}
echo "<br><tr><tr height=100px>";
echo "<td><td><td colspan="4" align="right">Total:</td>";
echo "<td width="60px" align="right">$$total</td>";
echo "<tr><td colspan="7" align="right"><a href="checkout_html.php">Proceed to Checkout</a>";
echo "<tr height="50px">";
echo "</table>";
}else{
echo "Your cart is currently empty.";
echo "<br><br><td colspan="1" align="left"><a href="title.php">Continue Shopping</a></div>";
}
$_SESSION['totnamqty'][]=$name . " " . $qty . " " . $price;
function productExists($comic_id) {
$sql = sprintf("SELECT * FROM comic WHERE comic_id = %d;", $comic_id);
return mysql_num_rows(mysql_query($sql)) > 0;
}
?>
检查以下:
- 您必须初始化会话使用
session_start();
作为第一个。 - 在分配或执行SOM操作之前,请确保
$_SESSION['count']
存在并初始化。
在使用某个地方$_SESSION['count']
之前,您必须初始化它。我认为您没有做到这一点,这就是为什么您会收到通知。
请参阅以下链接以获取更多会话信息:
W3Schools -PHP会话
(我会发布php.net手册页,但我是新手,只能发布2个链接)
您也可能要过渡到使用$ _ post变量,而不是通过URL传递密钥值对:
php.net- $ _post