php 5.2.x - Fatal error: Cannot re-assign $this in ...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux