1

I am adding items to a cart using URL ?action=add. I have not initialised the variable $count and am getting the following errors:

Notice: Undefined index: count in C:\wamp\www\cart.php on line 31

Notice: Undefined index: count in C:\wamp\www\cart.php on line 32

I know I need to define the $count variable. ($count = 0;) But I dont want the page to refresh and have the SESSION variable reset to 0 every time a user adds a new item to the cart. The $count needs to be used as a counter on the next page. How can I do this?

Here is my case code:

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;  

After adding 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;
    }
?>

3 Answers 3

1

Check these:

  1. You have to initialize sessions using session_start(); as the very first.
  2. Make sure that the $_SESSION['count'] exists and initialized before assigning or performing som operation on it.
Sign up to request clarification or add additional context in comments.

4 Comments

Yes session_start is initialised. If I set $_SESSION['count'] = 0; Then the count will be set to 0 each time the page refreshes. I do not want this to happen.
Initialization of $count and $_SESSION variables?
Is there any way around this ?
One way is to, show your full PHP code, if you don't have any issues. :) So that we can see where you have gone wrong. :)
0

Before using somewhere $_SESSION['count'] you have to initialize it. i think you didn't done it and that's why you are getting the notices.

7 Comments

Yes, but if I initialise it to 0, the count will reset to 0 each time the page is refreshed.
@Sam: So, only set it if it's not already set. if (!isset($_SESSION['count'])) $_SESSION['count'] = 0;
initialize the $_SESSION['count']=1 if the user is in login state
if my answer is useful please click my answer as correct answer and please up vote my answer.. thank you dude..
check why the count is incrementing... or if you don't want to increment the count and keep it constant define it as a constant
|
0

Please refer to the following links for more session information:

W3Schools - PHP Sessions

(I would post the PHP.net manual page but I'm new and can only post 2 links)

Also you may also want to transition to using the $_POST variable instead of passing key value pairs through the URL:

PHP.net - $_POST

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.