wmguk Posted March 26, 2009 Share Posted March 26, 2009 Hey, I have a DB of products, and there is a field called postid basically in the cart if you order up to 20 items with postid =1 then postage charge is £10, if you order more then in multiples of 20, it increases by £10 I have some code but it doesnt work... if($postid == 1) { $res = count($postid); echo $res; } else { } if there are 2 items in my cart with postid = 1 then $res should be 2 but currently it reads 11.... how can i get this to display correctly? also, if I have 4 x ITEM1 (postid = 1) and 3 x ITEM2 (postid = 1) i need to get it to say oh, thats 7 items, not 2 items.... can this be done also? Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/ Share on other sites More sharing options...
wmguk Posted March 26, 2009 Author Share Posted March 26, 2009 this is the whole code on the page function showCart() { global $db; $cart = $_SESSION['cart']; $bus_name = $_REQUEST['bus_name']; if ($cart) { $items = explode(',',$cart); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; } $output[] = '<form action="cart.php?action=update" method="post" id="cart">'; $output[] = '<table width="750" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000"><tr>'; $output[] = '<td width="90" bordercolor="#000000" bgcolor="#000000" class="tblheader"> </td>'; $output[] = '<td bordercolor="#000000" bgcolor="#000000" class="tblheader">CODE</td>'; $output[] = '<td bordercolor="#000000" bgcolor="#000000" class="tblheader">DESCRIPTION</td>'; $output[] = '<td width="80" bordercolor="#000000" bgcolor="#000000" class="tblheader">PK SIZE</td>'; $output[] = '<td width="80" bordercolor="#000000" bgcolor="#000000" class="tblheader">PRICE</td>'; $output[] = '<td width="40" align="center" bordercolor="#000000" bgcolor="#000000" class="tblheader">QTY</td>'; $output[] = '<td bordercolor="#000000" bgcolor="#000000" class="tblheader"> </td>'; $output[] = '<td bordercolor="#000000" bgcolor="#000000" class="tblheader">Postage </td>'; $output[] = '</tr>'; foreach ($contents as $id=>$qty) { $sql = "SELECT * FROM products WHERE code = '".$id."'"; $result = $db->query($sql); $row = $result->fetch(); extract($row); $output[] = '<td><a href="cart.php?action=delete&bus_name='.$bus_name.'&id='.urlencode($id).'">Remove</a></td>'; $output[] = '<td class="main">'.$id.' </td>'; $output[] = '<td class="main">'.$name.' </td>'; $output[] = '<td class="main">'.$size.' </td>'; $output[] = '<td class="main">£'.$price.' </td>'; $output[] = '<td class="main" align="center" class="main"><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>'; $output[] = '<td>£'.sprintf('%04.2f',($price * $qty)).' </td>'; $output[] = '<td>'.$postid.' </td>'; if($postid == 1) { $res = count($postid); echo $res; } $total += $price * $qty; $output[] = '</tr>'; } $output[] = '</table>'; $output[] = '<p>Grand total: <strong>£'.sprintf('%04.2f',$total).'</strong></p>'; //UPDATE CART $output[] = '<input name="bus_name" type="hidden" value="'.$bus_name.'">'; $output[] = '<div><input type="submit" name="updateorder" value="Update Order"/></div>'; $output[] = '</form>'; //SAVE ORDER $output[] = '<hr color=FF6600>'; $output[] = 'To place your order, you need to have a Purchase Order. If you dont already have your purchase order then click on Save Order. This will enable you to save your order and return to it at a later date by clicking the saved orders linked on the main page after login.'; $output[] = '<form action="save_order.php" method="post" name="save">'; $output[] = '<input type="submit" name="saveorder" value="Save Order"/>'; $output[] = '</form>'; //MAKE ORDER WITH PO NUMBER $output[] = '<hr color=FF6600>'; $output[] = 'If you already have your purchase order number please enter it below and click place order.'; $output[] = '<form action="order.php" method="post" name="order" id="order">'; $output[] = 'Purchase Order Number: <input name="ponum" id="ponum" type="text" style="width: 120px;" ><br>'; $output[] = '<input type="submit" name="placeorder" value="Place Order" onclick="return Check()"/>'; $output[] = '</form>'; } else { $output[] = '<p>Your shopping cart is empty.</p>'; } return join('',$output); } Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794286 Share on other sites More sharing options...
kittrellbj Posted March 26, 2009 Share Posted March 26, 2009 It may be better to if ($postid == 1) { $postid_count++; } Then echo it outside of the loop. I'm not sure what $postid is referring to, really, though. If it is a category key or product key, then it is not counting the items ordered, but the key itself. But, the above example should work. Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794323 Share on other sites More sharing options...
wmguk Posted March 26, 2009 Author Share Posted March 26, 2009 hey, in the DB i have a field called postid - this is either 1, 2, 3 or 4... what i then need to do is simply add up all the postid = 1 in a count so i get 5 x number 1 7 x number 2 etc etc etc... ive got this so far, //CALCULATE POSTAGE if ($postid == 1) { $postid_count++; $idc = $postid_count + $qty; echo "Amount for " . $idc ; } but its not working, as i have two items in my cart, i have item1 x 7 (postid = 1) item2 x 3 (postid = 1) but when i count where postid = 1 the result echo'd is Amount for 8 Amount for 5 obviously it should be 10.... any ideas? Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794570 Share on other sites More sharing options...
MadTechie Posted March 26, 2009 Share Posted March 26, 2009 wouldn't it be easier to do the count via MySQL ? i assume grouping wouldn't be a problem! <?php $res = 0; foreach ($contents as $id=>$qty) { $sql = "SELECT * , count(`postid`) as Counter FROM `products` WHERE code = '$id' GROUP BY `postid`"; $result = $db->query($sql); $row = $result->fetch(); extract($row); if($postid == 1) { $res += ($Counter*$qty); //Total Number of all items echo $Counter; } $total += $price * $qty; ///..........................SNIP............. } //end of loop echo "TOTAL: $res"; ?> Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794655 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 hey, hmmm, that doesnt seem to work, as all it says is 2, even if i select qty 10... the cart is stored in an session array if it makes any difference? maybe im just going about this all wrong, but basically I just need to find out the postid for the items in the cart and add them up so that i get 10x id1, 5x id2 etc etc, depending on what is selected.... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794953 Share on other sites More sharing options...
Yesideez Posted March 27, 2009 Share Posted March 27, 2009 Modular division comes in handy here... $charge=floor($itemcount/10); $remainder=$itemcount%10; if ($remainder>0) {$charge++;} $totalcost=$charge*10; echo 'Postage cost: $'.number_format($totalcost*10,2); That what you're after? Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794954 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 hang on, thats what we are doing wrong.... we are checking the database for the items.... SELECT * , count(`postid`) as Counter FROM `products` WHERE code = 'OC60X40B&B' GROUP BY `postid` SELECT * , count(`postid`) as Counter FROM `products` WHERE code = 'OCA0MORTEMPTY' GROUP BY `postid` I check the database purely to find out what the details are based on the order code thats ordered, but the qty is in the session, - how can i query the cart for the items, not the DB Yesideez, Thanks for that, I will need that, but not jsut yet, im still trying to get the actual qty of postid 1, then i can use it to say, up to 10 lots of post id 1 is £10 etc etc etc.... just need to find a way to get the actual details... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794956 Share on other sites More sharing options...
Yesideez Posted March 27, 2009 Share Posted March 27, 2009 As for the post bit I've read through and have no idea what's going on... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794958 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 Ok, I have a shopping cart with DB of products. on the product page, you select add to cart, and the itemid is added to the cart session... on the cart page, it reads the itemsid in the cart session. it then connects to the DB and gets the relevant product details from the DB based on the itemid.... part of that database is a field - postid, there is a choice of 4 postid (1,2,3,4).... what i need to know is how many items in my cart are postid=1 so i simply can echo "POST 1 " .$postid I can echo it on each item result, but simply cant add them together for some reason.... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794961 Share on other sites More sharing options...
Yesideez Posted March 27, 2009 Share Posted March 27, 2009 If you want to get all the items from the cart with postid of 1 then a simple query will do: $row=mysql_fetch_assoc(mysql_query("SELECT * FROM cart WHERE postid='1'")); Or am I still missing something? Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794965 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 there is no table called cart, all the items "added to cart" are placed in a session called cart... I can see what you've done and normally i could get that to work, however if i click add to cart on the same item 4 times, then i get: $_SESSION['cart]' = OC60X40B&B, OC60X40B&B ,OC60X40B&B ,OC60X40B&B on the cart page it opens the session['cart'] and qry's the DB so i can get the item name etc.... it also tells me that it is postid 1 - but as there are 4 items, it should tell me i have 4 items for postid 1.... thats the bit i cant get... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794970 Share on other sites More sharing options...
Yesideez Posted March 27, 2009 Share Posted March 27, 2009 I think I understand now - gotta be quick, start work very soon. Instead of storing the cart in a session variable why not use temporary tables in the database? Use a cookie on the user's machine to determine who's table belongs to who. If the cookie can't be created they can't have a cart - I'm presuming they can have a cart without having to register first? If not identify the cart by their user ID. That way you can store all the necessary data in a table plus the contents of the table can be archived so customers can look back on past orders. Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794972 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 when the place the order it goes to a table but I didnt want to use one for the cart, that was the only reason why... I dont really understand why i cant just count lol... its wierd... I just thought, if ($postid = 1){ $pid1 +1 } or something similar.... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794975 Share on other sites More sharing options...
Yesideez Posted March 27, 2009 Share Posted March 27, 2009 There probably is a way but I would have thought a temporary table for the cart would be the best way. That way if a person closes the browser their cart contents are still there. If you store it in a session variable it's lost. A person would only need one cart at a time so they'd never need more than one cart table active. When I say temporary table I don't mean one of these: http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm I'd create a normal table and just control it with CREATE and DROP. Just a thought Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794976 Share on other sites More sharing options...
wmguk Posted March 27, 2009 Author Share Posted March 27, 2009 ok, ive gone really basic again now.... i've added $pid = ($postid * $qty); echo $pid; ITEM 1 x 6 (postid=1) ITEM 2 x 4 (postid=1) so on my echo i get 6 4 but all i need to do is say ok, item1 is postid 1 and item2 is postid 1 so add $pid together... Quote Link to comment https://forums.phpfreaks.com/topic/151206-simple-count-error/#findComment-794994 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.