Jump to content

Recommended Posts

Hello, I am having some trouble assigning a value to a variable inside a switch statement.  What I am trying to do here is trip an error if the user has already added an item in the shopping cart.  The While and Foreach loops work perfectly fine.  The problem is that the value of variable $error does not get passed outside of the case.  As a result, I cannot get the error message to display.  I really need to get this to work and any help is appreciated.  The code looks something like this:

 

switch ($action) {
case 'add' :
{
if ($_SESSION['CartID'] == "") 
   {
     
         $query = 'INSERT INTO ShopCart( UserID )VALUES("' . $UserID . '")'; 
             mysql_query($query, $db) or die(mysql_error($db));

	$Shop = 'SELECT ShopCartID FROM ShopCart WHERE UserID = "' . $UserID . '" ORDER BY ShopCartID ASC LIMIT 1';
         $Cart = mysql_query($Shop);
         $ShopCart = mysql_fetch_row($Cart);
         $_SESSION['CartID'] = $ShopCart[0];
   }
         $query = 'SELECT ProductID FROM ShopCartLine WHERE ShopCartID = "' . $_SESSION['CartID'] . '"';
		$result=mysql_query($query, $db) or die(mysql_error($db));

                      //$row = mysql_fetch_row( $result );
                       while($var = mysql_fetch_array($result))
                                          {
                       foreach ($var as $i) {
		             if ($i == $ProductID) {
			                 $error = 1; //TRIP THE ERROR HERE!
                                echo "<script type='text/javascript'>window.top.location='http://amarcy2.db-class.ids.uic.edu/shopcart.php';</script>";     
		                                   }
	                                    }
                                          }   
}

 

The code being used to display the error message is as follows:

 


if ($error == 1) {
echo '<p>You already have this item in your basket!</p>';
             }

PHP does not consider variables to be local to loops or if/switch statements ... only to functions. The problem you are having is probably because your switch is inside a function and the $error variable is inside another function.

 

a quick fix is using global variables (although using globals is generally bad practice)

 

instead of:

 

$error

 

use:

 

$GLOBALS['error']

Actually the code is definitely not in a function which is why I have no idea why it won't pass the value of $error outside of the switch case.  I also tried a global variable a number of times with no success.  Does anybody else know why this isn't working and or how to resolve the issue? :confused:

It is fairly likely that $ProductID is not set and if ($i == $ProductID) { is FALSE. What makes you think $error should be a 1?

 

You also don't need the foreach() loop because $var will only consist of one element, $var['ProductID'], because that is all your SELECT statement is returning.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.