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...
- cookies
- donuts
- 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
Post a Comment