From: Shawn McKenzie on
Ron Piggott wrote:
> The code I have so far for orders is below. When a product hasn't been
> added it does what I want it to --- in giving the message "Your shopping
> cart is empty". When a product is added, but then the user changes
> their mind I use the following lines of code to remove the selection:
>
> UNSET($_SESSION['order'][$reference]['quantity']);
> UNSET($_SESSION['order'][$reference]);
>
> It still leaves the variable $_SESSION['order'] as an array, even if
> there are no selections in it. The PHP command is_array is useless of
> weed out when there are no products.
>
> What I would like to have happen is if the shopping cart is empty then
> the message "Your shopping cart is empty" be displayed 100% of the time.
> How do I achieve this? What changes to my code below need to happen?
>
> <?php
> if ( isset($_SESSION['order']) ) {
> #customer has begun creating order
>
> foreach ($_SESSION['order'] AS $key => $value ) {
> echo "Product: " . $key . " Quantity: " .
> $_SESSION['order'][$key]['quantity'] . "<br>\r\n";
> }
>
> } else {
> #no products selected
>
> echo "<ul class=\"lists\">\r\n";
> echo "<li>Your shopping cart is empty</li>\r\n";
> echo "</ul>\r\n";
>
> }
>

Or use unset, but unset the entire order: unset($_SESSION['order'])

--
Thanks!
-Shawn
http://www.spidean.com
From: Jim Lucas on
Ron Piggott wrote:
> The code I have so far for orders is below. When a product hasn't been
> added it does what I want it to --- in giving the message "Your shopping
> cart is empty". When a product is added, but then the user changes
> their mind I use the following lines of code to remove the selection:
>
> UNSET($_SESSION['order'][$reference]['quantity']);
> UNSET($_SESSION['order'][$reference]);
>
> It still leaves the variable $_SESSION['order'] as an array, even if
> there are no selections in it. The PHP command is_array is useless of
> weed out when there are no products.
>
> What I would like to have happen is if the shopping cart is empty then
> the message "Your shopping cart is empty" be displayed 100% of the time.
> How do I achieve this? What changes to my code below need to happen?
>
> <?php
> if ( isset($_SESSION['order']) ) {
> #customer has begun creating order
>
> foreach ($_SESSION['order'] AS $key => $value ) {
> echo "Product: " . $key . " Quantity: " .
> $_SESSION['order'][$key]['quantity'] . "<br>\r\n";
> }
>
> } else {
> #no products selected
>
> echo "<ul class=\"lists\">\r\n";
> echo "<li>Your shopping cart is empty</li>\r\n";
> echo "</ul>\r\n";
>
> }
>

Try this

<?php

....

if ( isset($_SESSION['order']) && # Does it exist
is_array($_SESSION['order']) && # Is it an array
count($_SESSION['order']) > 0 # Does it have at least 1 element
) {

#customer has begun creating order
foreach ($_SESSION['order'] AS $key => $value ) {
echo "Product: {$key} Quantity: {$_SESSION['order'][$key]['quantity']}<br>\r\n";
}

} else {
#no products selected
echo "<ul class=\"lists\">\r\n";
echo "<li>Your shopping cart is empty</li>\r\n";
echo "</ul>\r\n";
}


....

?>

> -----Original Message-----
> From: Martin Scotta <martinscotta(a)gmail.com>
> To: ash(a)ashleysheridan.co.uk
> Cc: ron.piggott(a)actsministries.org, PHP General
> <php-general(a)lists.php.net>
> Subject: Re: [PHP] Array
> Date: Sat, 24 Oct 2009 11:50:14 -0300
>
>
>
> On Sat, Oct 24, 2009 at 7:59 AM, Ashley Sheridan
> <ash(a)ashleysheridan.co.uk> wrote:
> On Sat, 2009-10-24 at 06:57 -0400, Ron Piggott wrote:
>
> > The following line gives me an error message when there aren't
> any
> > values in the array --- how do I accommodate this?
> >
> > Warning: Invalid argument supplied for foreach()
> >
> > foreach ($_SESSION['order'] AS $key => $value ) {
> >
> >
>
>
>
>
> Do an isset() on $_SESSION['order'] first to determine if the
> variable
> even exists, then do is_array() to determine if it's an array or
> not
> before trying to iterate it. My guess is that $_SESSION['order']
> isn't
> an array all the time.
>
>
>
> Thanks,
> Ash
> http://www.ashleysheridan.co.uk
>
>
>
>
> foreach works with array and instances.
> Unless the class implements Transversable, it's public properties are
> used on the loop.
>
>
> foreach($object as $prop => $value )
> //php translates the foreach into something like this...
> foreach(get_object_vars($object) as $prop => $value )
>


--
Jim Lucas

"Some men are born to greatness, some achieve greatness,
and some have greatness thrust upon them."

Twelfth Night, Act II, Scene V
by William Shakespeare