somerandom Posted October 22, 2014 Share Posted October 22, 2014 (edited) Can someone tell me why this code will not work? It's supposed to update the quantity in a shopping cart by taking the user input and changing the value of the array. I can add items by clicking the 'add to cart' button, but as you know that only works one at a time. Once you make a selection you have the opportunity to go to the cart and modify the quantity by entering in a numeric value; so instead of clicking 10 times you can just type 1, 0 to get to 10. Is there any other info I can provide to convey what I'm trying to do? I'm new to php so I don't know why it's not working, this looks right according to php.net but something is wrong. if(isset($_POST['submit'])) { foreach($_POST['quantity'] as $key => $value) { if($value==0) { unset($_SESSION['cart'][$key]); }else{ $_SESSION['cart']['$key']['quantity']=$value; } } } errors below: Invalid argument supplied for foreach() illegal string offset 'cart' Edited October 22, 2014 by somerandom Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/ Share on other sites More sharing options...
bsmither Posted October 22, 2014 Share Posted October 22, 2014 (edited) I will assume the code above is an accurate representation of what you actually have. So, $_SESSION['cart']['$key']['quantity']=$value; The $key is delimited by apostrophes (single quotes). Thus, PHP will not treat this as a variable name. In the HTML <form> block, your <input name="quantity"> is not structured as an array. If these inputs are meant to be an array, then the tag should be <input name="quantity[3]"> where 3 is the key index into the cart's array of inventory - probably the product_id value. Edited October 22, 2014 by bsmither Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/#findComment-1494439 Share on other sites More sharing options...
NotionCommotion Posted October 22, 2014 Share Posted October 22, 2014 What is the value of $_POST['quantity']? Is it an array? To check, use print_r() or var_dump(). Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/#findComment-1494440 Share on other sites More sharing options...
somerandom89 Posted October 25, 2014 Share Posted October 25, 2014 I had to create a new account because the password reset function on this site doesn't work, I could never get a reset email, tried it like 10 times. Buy anyway... Yeah, I typed the code wrong it's written the way you said it should be but I still get the errors. As for the html part here it is. if(isset($_POST['submit'])){ foreach($_POST['quantity'] as $key => $val) { if($val==0) { unset($_SESSION['cart'][$key]); }else{ $_SESSION['cart'][$key]['quantity']=$val; } }var_dump($_POST['quantity']); // I tried the suggestion Notion Commotion mentioned and I got this: string '2' (length=1) } <td><?php echo $row['item']?></td> <td><input type="text" name="quantity"[<?php echo $row['menu_id']?>]" size="5" value="<?php echo $_SESSION['cart'][$row['menu_id']]['quantity']?>"/></td> <td><?php echo "$". $row['price']?></td> <td><?php echo $_SESSION['cart'][$row['menu_id']]['quantity']*$row['price']?></td> Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/#findComment-1494660 Share on other sites More sharing options...
bsmither Posted October 25, 2014 Share Posted October 25, 2014 name="quantity"[<?php echo $row['menu_id']?>]" size="5" I don't like the quote mark between the word quantity and the open bracket. Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/#findComment-1494668 Share on other sites More sharing options...
Solution somerandom89 Posted October 25, 2014 Solution Share Posted October 25, 2014 THANKS!!! That was it! Works like a charm. Quote Link to comment https://forums.phpfreaks.com/topic/291999-trying-to-change-array-value/#findComment-1494669 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.