thomashw Posted January 13, 2008 Share Posted January 13, 2008 I have a form on one page, and on the next page after the user has submitted the form, it displays what the user selected in the form on the previous page. These pages with the forms have specific ID's, and I've been using that with sessions to display the options they've selected, except when the user goes back and chooses something different, it doesn't display both of what they've selected, but just the latest one. For example - in the drop down list they select the number '16' and click submit. On the next page it shows they've selected '16'. They then navigate through the site to the same page, and select '20' instead and click submit. Now on the next page, both of them are '20' instead of one '16' and one '20. What's a good way to make sure it displays what they've selected properly? Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 How are you creating your sessions? Please post the relevant code. Quote Link to comment Share on other sites More sharing options...
revraz Posted January 13, 2008 Share Posted January 13, 2008 Sounds like you are using the same variable and overwriting it, you probably have to use an array instead and add to it. Quote Link to comment Share on other sites More sharing options...
GingerRobot Posted January 13, 2008 Share Posted January 13, 2008 As an example, i'd do it like this: <?php session_start(); if(!isset($_SESSION['selected'])){ $_SESSION['selected'] = array(); } if(isset($_POST['submit'])){ $_SESSION['selected'] = $_POST['numbers']; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="POST" /> <select name="numbers[]" multiple="multiple" size="5" /> <?php for($x=1;$x<=20;$x++){ if(in_array($x,$_SESSION['selected'])){ $selected = ' selected = "selected" '; }else{ $selected = ''; } echo '<option value="'.$x.'"'.$selected.'>'.$x."</option>\n"; } ?> </select> <br /> <input type="submit" name="submit" value="Confirm" /> </form> Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 Here's the code that does the work when the URL goes to this page with action=add at the end. The ordertemp_option is where I'm storing the different options the person selects. As you can see the other two things being inserted are the session id and the product id. Since the session and product id are the only two things being inserted (besides the options selected,) if a user goes back and selects another choice of options for the same thing, the options are updated for all products under that session id and product id. I'm hoping for a way to be able to call the options the user has selected if they go back and make a new selection, even if they have the same product and session id. <? session_start(); ini_set("include_path","/home/tunerspe/public_html/v2/v3/include/"); include("dbinfo.php"); if(isset($_POST['qty'])) { $qty = $_POST['qty']; } if(isset($_POST['product_id'])) { $product_id = $_POST['product_id']; } if(isset($_POST['option'])) { $option = $_POST['option']; if(isset($option)) { $optionsselect = implode(" <br /> ", $option); }} if(isset($_POST['modified_hidden'])) { $modified_hidden = $_POST['modified_hidden']; } if(isset($_POST['modified_quan'])) { $modified_quan = $_POST['modified_quan']; } $sess = session_id(); $action = $_REQUEST['action']; switch ($action) { case "add": $query = "INSERT INTO ordertemp ( ordertemp_sess, ordertemp_quan, ordertemp_product_id) VALUES ('$sess','$qty','$product_id')"; $query1 = "INSERT INTO ordertemp_option ( ordertemp_sess, ordertemp_option_name, ordertemp_product_id) VALUES ('$sess','$optionsselect','$product_id')"; Here's how it's actually shown on the page: while($row = mysql_fetch_array($results)) { echo "<tr>\n"; extract($row); $prod = "SELECT * FROM feature_product, ordertemp, ordertemp_option, feature_item WHERE feature_product_id={$ordertemp_product_id} AND ordertemp.ordertemp_product_id=feature_product_id AND ordertemp.ordertemp_sess = '$sessid' AND ordertemp.ordertemp_sess=ordertemp_option.ordertemp_sess AND ordertemp_option.ordertemp_product_id=ordertemp.ordertemp_product_id"; $prod2 = mysql_query($prod); $prod3 = mysql_fetch_array($prod2) or die(mysql_error()); extract($prod3); echo "<td>"; echo "\n<form method=\"POST\" action=\"modcart.php?action=change\"> <input type=\"hidden\" name=\"modified_hidden\" value=\"$ordertemp_hidden\">"; echo "\n<input type=\"checkbox\" name=\"remove\" value=\"on\" onclick=\"submit();\">\n</form>\n</td>"; echo "<td>\n"; echo "<a href=\"prod.php?product_id=" . $feature_product_id . "\">"; echo $feature_product_sku; echo "</a>\n</td>"; echo "\n<td class=\"alignleft\">"; echo "<a href=\"prod.php?product_id=" . $feature_product_id . "\">"; echo '<span class="bold">' . $feature_product_name . '</span>'; echo "</a>\n<br />\n"; echo "<span class=\"italic\">Options:</span> <br />"; echo ' ' . $ordertemp_option_name; echo "</td>"; echo "\n<td align=\"right\">"; echo '$' . $feature_product_price; echo "\n</td>"; echo "\n<td>"; echo "\n<form method=\"POST\" action=\"modcart.php?action=change\">\n <input type=\"hidden\" name=\"modified_hidden\" value=\"$ordertemp_hidden\">"; echo "\n<input type=\"text\" name=\"modified_quan\" size=\"1\" value=\"$ordertemp_quan\">"; echo "\n</td>"; echo "\n<td align=\"right\">"; $extprice = $feature_product_price * $ordertemp_quan; echo '$' . $extprice; echo "\n</td>"; echo "\n</tr>\n"; Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 The codes you posted aren't relevant. Unless I over-read, you didn't use sessions at all. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 For this part, I'm just using the session id to differentiate between people browsing the site so it only shows things they've selected. Everything is inserted into my database and then called back with their session id. Thanks for the help GingerRobot - except I don't know how/what that's doing. Sucks helping people like me, hey? Quote Link to comment Share on other sites More sharing options...
GingerRobot Posted January 13, 2008 Share Posted January 13, 2008 So when you said you were using sessions to track the user's selection, you really meant you were using a database? Anyway, your code seems pretty confusing. As far as i can see, you're creating a form inside a while loop, which seems rather bizarre. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 Well I meant I was using a database to store the session id to call back what the user selected - but when they select options more than once from the same page everything gets messed up. Sorry for not being clear - I was trying to not over-explain my situation as I've found when I do that people get bored of reading my posts and don't help. The while loop displays what the user has selected, and also allows them to change the quantity of what they've selected. The submit button and </form> isn't in the while loop so the one submit button can affect the quantities of everything the user has selected, instead of just one. Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 So when you said you were using sessions to track the user's selection, you really meant you were using a database? Anyway, your code seems pretty confusing. As far as i can see, you're creating a form inside a while loop, which seems rather bizarre. Yeah, I agree fully there. thomashw, it doesn't suck helping people, but when you're confusing people and or asking the wrong question, then it gets very confusing as the case is here. You're not using sessions. And that code you posted is very confusing to go through. Find: $query = "INSERT INTO ordertemp ( ordertemp_sess, ordertemp_quan, ordertemp_product_id) VALUES ('$sess','$qty','$product_id')"; $query1 = "INSERT INTO ordertemp_option ( ordertemp_sess, ordertemp_option_name, ordertemp_product_id) VALUES ('$sess','$optionsselect','$product_id')"; In that portion of the code, you're replacing the product id with the current one. You should get the product ID from the database and tack it on to the current one. You can separate them however you want, but just make sure you will need to dissect the string when you display them. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 Sorry guys - I guess I wasn't too sure how I should be asking the question. I'll try to be more clear next time. I'm not sure what you mean here: You should get the product ID from the database and tack it on to the current one. You can separate them however you want, but just make sure you will need to dissect the string when you display them. While we're at it, do you guys think using the session id and storing the temporary information in the database is a good way to do it, or is it better to use sessions the whole way through and not use the database to recall the information that was stored under the session id? Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 Okay, well if you're going for a new approach with using the superglobal $_SESSION, then I'm all for it. Your way is very complicated and hard to understand. Quote Link to comment Share on other sites More sharing options...
GingerRobot Posted January 13, 2008 Share Posted January 13, 2008 The while loop displays what the user has selected, and also allows them to change the quantity of what they've selected. The submit button and </form> isn't in the while loop so the one submit button can affect the quantities of everything the user has selected, instead of just one. If you're using the code you posted, then the form tag is inside the loop. In fact, there's no closing brace in the code you posted at all. Quote Link to comment Share on other sites More sharing options...
Fyorl Posted January 13, 2008 Share Posted January 13, 2008 Usually when you want to save some user preferences without having a user authentication or registration system you'd use Cookies. As far as I know that's how every other site does it. If you don't want that data to persist then you can use the $_SESSION variable. Using a database for temporary data seems like the wrong way to go about it to me. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 Okay, well if you're going for a new approach with using the superglobal $_SESSION, then I'm all for it. Your way is very complicated and hard to understand. I agree with you there. I think it has to do with my small "repertoire" of PHP, so I'm only doing things the way I know how - which is often way more complicated than it has to be. If you're using the code you posted, then the form tag is inside the loop. In fact, there's no closing brace in the code you posted at all. The closing form tag is a tiny bit farther down the page. I didn't post it because it's just closing the table and the form. Now... Using sessions, if a person goes back and selects something different from the same form, what would the best way to post both things they've selected, instead of "updating" their selection? Quote Link to comment Share on other sites More sharing options...
GingerRobot Posted January 13, 2008 Share Posted January 13, 2008 While we're at it, do you guys think using the session id and storing the temporary information in the database is a good way to do it, or is it better to use sessions the whole way through and not use the database to recall the information that was stored under the session id? I'd probably switch to just using sessions. Since you're limited to keeping the information during the current session anyway (because you're tracking by session ID, and not a username), the database doesn't offer the advantage of keeping the information for the user. Also, all you really need to track is the IDs relating to the items(products?) that the user has previously selected, so we're not storing lots of information. Quote Link to comment Share on other sites More sharing options...
GingerRobot Posted January 13, 2008 Share Posted January 13, 2008 The closing form tag is a tiny bit farther down the page. I didn't post it because it's just closing the table and the form. Erm, i think you misunderstand me. I'm taking about the closing brace ( } ) of the while loop. If that is further down your page, then your form is inside a while loop. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 I'd probably switch to just using sessions. Since you're limited to keeping the information during the current session anyway (because you're tracking by session ID, and not a username), the database doesn't offer the advantage of keeping the information for the user. Also, all you really need to track is the IDs relating to the items(products?) that the user has previously selected, so we're not storing lots of information. Deal. The only "roadblock" I'm having is showing the options the user selects on the products page. If they go back and select new options, I'd like the forms "action" page to display both their old and new selections. Erm, i think you misunderstand me. I'm taking about the closing brace ( } ) of the while loop. If that is further down your page, then your form is inside a while loop. Ohh, I understand now. The closing brace is indeed before the </form> tag. So I want the user to be able to go back to the page with the form, and be able to select new "options" and have the forms action page display both their old and new "options" that they've selected. Am I completely missing something - or is this as hard as I'm making it? Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 It's all about how you want to code it. Like I would just put them as strings. So if the user selects a product with ID 5, the session would say "5". Say the user then selects 7, it would say "5,7" and so on. As for quantity, I would say something like: "5|3" <- denotes product id 5 and quantity 3. So it's all about how you approach it. There isn't one way to do it and there isn't a "correct" way. There are obviously some easier approach, but I generally would just do that. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 That's a great idea. If you could just tell me what I need to search for on Google to figure out how to do that, that'd be great. Thank you for the help so far - everyone. Quote Link to comment Share on other sites More sharing options...
Ken2k7 Posted January 13, 2008 Share Posted January 13, 2008 Uh that's a method that I came up with when I was coding something for a forum in JavaScript and I was limited in signature space. Anyways, I doubt Google would have this. If you need help, you can post it here or PM me. But it's not hard. You set a session variable and you can always check if it's set. If it is, then you can just append some text onto it. It's all about how you manipulate the strings. When displaying, you would want to explode the commas, then for each element in that array, you can explode "|" to get the product ID and quantity. Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 I'm currently trying to make the form submit, and then gather all the submitted information into one session array. Am I on the right track? Quote Link to comment Share on other sites More sharing options...
thomashw Posted January 13, 2008 Author Share Posted January 13, 2008 I'm currently trying to make the form submit, and then gather all the submitted information into one session array. Am I on the right track? Quote Link to comment 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.