php - Removing Items in Session Array -


i've been wracking brains 3 days , still can't find solution problem of removing items session array.

i'm learning php , how build shopping cart; know there frameworks want learn programming, solve problems , create things.

my problem this: placed 3 items in cart...

  1. cookies
  2. donuts
  3. cupcakes

when delete item in shopping cart, else down list (below item) deleted well. if remove donuts, cupcakes removed well. if remove cookies, whole list removed/cleared

but if start bottom (cookies) going list, works fine; remove 1 clicked.

here's code along other attempts. not styled yet, working on logic.

 <?php  session_start();  $prodid = $_post['prodid']; $quantity = $_post['quantity']; $empty= $_post['empty'];  $removed = $_post['remove'];     if (isset($empty ))     {     unset($_session['shop_cart']);     }   if (!isset($_session['shop_cart']))//checking if session set or empty    {       unset($_session['shop_cart']);       echo "cart empty";    } else    {       if(count($_session['shop_cart'])==null || count($_session['shop_cart'])==0 )       {          echo "cart empty";       }    }    /////// section i've been fiddling --am on right track     if (isset($removed))       {     foreach ($_session['shop_cart'] $cart_line_item => $item)        {         if($prodid==$item['prodid'])             {             unset($_session['shop_cart'][$cart_line_item]); ///9:47pm may 20, 2013              break;             }            }     } ///////////////////////////////////////////////////////////////////////////////////   //check if item in cart  foreach ($_session['shop_cart'] $cart_line_item => $item)     {     if ($item['prodid']==$prodid)         {         $quantity=0;     echo "in cart <br/>";         break;                    }     }  $cap=count($_session['shop_cart']); $_session['shop_cart'][$cap]['prodid']=$prodid; $_session['shop_cart'][$cap]['quantity']=$quantity; $_session['shop_cart'][$cap]['description']=$description;  //prevent items 0 quantity foreach ($_session['shop_cart'] $cart_line_item => $item)     {     if ($item['quantity'] == 0 || $item['quantity'] == null)         {         unset($_session['shop_cart'][$cart_line_item]);         break;         }     }       $total=0; //for price   if (isset($_session['shop_cart']))     {     for($i=0;$i<count($_session['shop_cart']);$i++)     {         $prodid=$_session['shop_cart'][$i]['prodid'];         $quantity=$_session['shop_cart'][$i]['quantity'];         $description=$_session['shop_cart'][$i]['description'];          $query = "select prodid, description, price products prodid = $prodid";         $result = mysqli_query($hook, $query);         $row = mysqli_fetch_assoc($result);          $prodid = $row['prodid'];         $price = $row['price'];         $description= $row['description'];          $subtotal = $price * $quantity;                     $total += $subtotal;  echo "$description($prodid)---quantity: $quantity--- $$price";        echo "<form action=\"$_server[script_name]\" method=\"post\" >"; echo "<input type=\"submit\" name=\"remove\" value=\"remove\">"; echo "<input type=\"hidden\" name=\"prodid\" value=$prodid />\n"; echo "<input type=\"hidden\" name=\"counter\" value=\"$i\"/>\n";  echo "</form>";  echo "--------------------------<br/><br/>";      }                                                                }  echo "total $total <br/><br/>";  echo '<pre>'. var_dump( $_session['shop_cart']).'<pre/>';  echo "<br/>";  echo "<form action=\"$_server[script_name]\" method=\"post\" >"; echo "<input type=\"submit\" name=\"empty\" value=\"empty cart \">"; echo "</form>";  ?>  

these versions of section of code yield same result

a.

$counter= $_post['counter']; echo "counter $counter";      if (isset($removed))     {        unset($_session['shop_cart'][$counter]);       continue;     } 

b.

if (isset($removed)) for($i=0;$i<count($_session['shop_cart']);$i++)     if($prodid==$_session['shop_cart'][$i]['prodid'])         {          $_session['shop_cart'][$i]=$quantity==0;            continue;         } 

c.

if (isset($removed)) for($i=0;$i<count($_session['shop_cart']);$i++)     if($prodid==$_session['shop_cart'][$i]['prodid'])       {         unset($_session['shop_cart'][$i]['prodid']);      //or         //unset($_session['shop_cart'][$i]);           continue;         } 

this doesn't work @ all

if (isset($removed)) { foreach ($_session['shop_cart'] $cart_line_item => $item)        {          if($prodid==$item['prodid'])             {             unset($_session['shop_cart']['prodid']);             unset($_session['shop_cart']['quantity']);             unset($_session['shop_cart']['description']);                        continue;             }     } } 

for @soyale:

is mean?:

if (isset($removed))   { foreach ($_session['shop_cart'] $cart_line_item => $item)    {     if($prodid==$item['prodid'])         {         unset($_session['shop_cart'][$cart_line_item]);         continue;         }        } } 

same result.

your problem lies here:

    for($i=0;$i<count($_session['shop_cart']);$i++)     {         $prodid=$_session['shop_cart'][$i]['prodid'];         $quantity=$_session['shop_cart'][$i]['quantity'];         $description=$_session['shop_cart'][$i]['description'];          $query = "select prodid, description, price products prodid = $prodid";         $result = mysqli_query($hook, $query);         $row = mysqli_fetch_assoc($result);          $prodid = $row['prodid'];         $price = $row['price'];         $description= $row['description'];          $subtotal = $price * $quantity;                     $total += $subtotal;  echo "$description($prodid)---quantity: $quantity--- $$price";        echo "<form action=\"$_server[script_name]\" method=\"post\" >"; echo "<input type=\"submit\" name=\"remove\" value=\"remove\">"; echo "<input type=\"hidden\" name=\"prodid\" value=$prodid />\n"; echo "<input type=\"hidden\" name=\"counter\" value=\"$i\"/>\n";  echo "</form>";  echo "--------------------------<br/><br/>";      }                                                                } 

you shuld use foreach instead for. why? because keys deleted when use unset. basic array i.e.

array (size=2)   0 =>      array (size=3)       'prodid' => string '1' (length=1)       'quantity' => string '2' (length=1)       'description' => null   1 =>      array (size=3)       'prodid' => string '2' (length=1)       'quantity' => string '2' (length=1)       'description' => null   2 =>      array (size=3)       'prodid' => string '3' (length=1)       'quantity' => string '2' (length=1)       'description' => null 

after deleting product prodid=2 this:

array (size=2)   0 =>      array (size=3)       'prodid' => string '1' (length=1)       'quantity' => string '2' (length=1)       'description' => null   2 =>      array (size=3)       'prodid' => string '3' (length=1)       'quantity' => string '2' (length=1)       'description' => null 

length of final table 2. when use for($i=0;$i<count($_session['shop_cart']);$i++) second product newer displayed (because keys). more there isn't row index 1 empy row placed there.

look @ lines:

$total=0; //for price   if (isset($_session['shop_cart']))     {     for($i=0;$i<count($_session['shop_cart']);$i++) //-> bad idea please change foreach     { 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -