Shawn McKenzie wrote: > John Stoffel wrote: >> Hi, >> >> I'm looking for some help with PHP5.2.x hacking on a web site to >> cleanup how the user submitted search form is handled. Basically I >> want to make it simple for the end user to a) refine their query, b) >> not have to answer popups if they hit the reload button, and c) so I >> can learn more PHP. I found this nice reference: >> >> http://us2.php.net/manual/en/language.variables.external.php >> >> which has two sections by "wayne" and "Jonas Lindel" talking about how >> you can take the results of a PHP POST request, stuff the vars into >> your session, and redirect back to the same page without the POST vars >> set, then complete the query. >> >> The idea is so that when people hit the "back" or "reload" buttons, >> they don't keep getting asked whether they want to resubmit their >> data. >> >> What I'm trying is not strictly needed, but it would be a nice cleanup >> of the interface of the search forms for this site. >> >> I've been googling, reading php5.x docs and trying to understand what >> needs to be done here. I think I'm just missing how to re-assign >> $this properly, so that when the redirect happens, the proper env is set. >> >> Here's the snippet I'm trying to use, which bombs out with: >> >> Fatal error: Cannot re-assign $this in .... on line 45 >> >> And the code I'm using is: >> >> <? >> >> // We want to put the search query into a session so we can restore it >> // easily when users goto look at full_holdings.php and then return to >> // the overall display page. We'll need to do a session_destroy in >> // index.php I think. See the tutorial(s) at >> // http://www.phpf1.com/tutorial/php-sessions.html >> // http://us3.php.net/manual/en/book.session.php >> >> session_start(); >> >> // Now see Jonas Lindel's & Wayne's code at >> // http://us2.php.net/manual/en/language.variables.external.php for >> // this *nice* trick. >> >> //is there POST or GET data we should look at >> if($_POST or ($_GET and (!isset($_SESSION['skipnextget'])))) { >> >> //is there GET data? >> if($_GET) { >> $newgetarr = array(); >> foreach($_GET as $key => $value) { >> if(is_array($value)) { >> //if it's an array, convert it to comma separated >> $newvalue = implode(',',$value); >> } else { >> $newvalue = $value; >> } >> $newgetarr[] = $key.'='.$newvalue; >> } >> $newget = implode('&',$newgetarr); >> $_SESSION['skipnextget'] = 1; >> } >> foreach($_POST as $key => $value) { >> $this[$key] = $value; >> } >> $_SESSION['postvars'] = serialize($this); //put POST in the session >> header("Location: http://" .$_SERVER['HTTP_HOST'] >> . $_SERVER['PHP_SELF'] . '?\ >> ' . $newget); >> //reload page without POST data and shorter GET data >> >> exit(); >> } else { //after reloading we'll come right to this spot >> session_unregister('skipnextget'); >> if(isset($_SESSION['postvars'])) { >> //load the POST variables from the session >> >> // Error on this line below! >> $this = unserialize($_SESSION['postvars']); >> session_unregister('postvars'); //delete the session stuff we >> //don't need anymore. >> return $this; >> } >> } >> >> // rest of my code goes here... >> _______________________________________________ >> >> Thanks, >> John >> john@xxxxxxxxxxx > > I'm not sure if it is technically reserved, but $this is used in a class > in order for an object to refer to itself. AFAIK you can't use it > anywhere other than that. Just change all $this to $vars or something else. > Also, as you can see by the use of $this, this is old code. You need to change all of the session_unregister('varname') stuff to unset($_SESSION['varname']). session_unregister() is deprecated and will be removed in PHP 6. -- Thanks! -Shawn http://www.spidean.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php