Page 1 of 1
$_POST forgets value when script recalled with <a href
Posted: Wed Feb 19, 2003 4:03 am
by kilolima
Hello,
ok, the first script is the POST form. The second script sets up the $_POST values for use. Then, the user has the option to reload the script directly without going back to the form (basically the first script gets user input for a map, and the second script displays the map and allows the user to zoom in or out of the map). But what happens, is that the $_POST values are no longer set, and so of course the script crashes. Do _$POST values only work when they come directly from a POST form? I thought they were globals?
I did try a workaround, by making a hidden form value $from_form, and then after checking to see it false, load the variables from $_SESSIONs, but this seems kinda klunky.
Thanks,
Kilolima
Posted: Wed Feb 19, 2003 10:24 am
by daven
$_POST is a superglobal, but the individual variables (ex: $_POST['myvar']) only exist when they come from a POST form. So when you recall the page using a hyperlink, the variables go away.
A workaround is to create a post form with a submit button and hidden variables instead of a link.
Code: Select all
<a href="<?=$_SERVERї'PHP_SELF']?>">Your current way of doing this</a>
<form action="<?=$_SERVERї'PHP_SELF']?>" method="post">
<input type="hidden" name="myvar1" value="the value you get from the previous form">
<input type="Submit" value="Click this instead of a link">
</form>
Posted: Wed Feb 19, 2003 1:02 pm
by kilolima
Daven,
Thanks, that clears that up about $_GLOBAL...
I would prefer not to replace my <a href links with forms, mostly just because form buttons are so ugly (yes, I know they can be replaced by an image, but how well do the various browsers support this?). Is there no way to have global_vars off and still be able to keep the simple functionality of <a href=self.php?myvar=myvalue>?
I tried:
Code: Select all
echo "<a href=self.php?$_SESSIONїmyvar]=myvalue> clickme </a> ";
but this doesn't seem to work. neither does:
Code: Select all
<a href=list.php?<? echo "$_SESSIONїmyvar]";?>=myintvalue> clickme</a>
Actually, I realize that <a href links are critical to my web application becuase it is using a dynamic image map built via php. Can it be done or do I need to turn global_vars back on (and mabye go to https)?
thanks
kilolima
Posted: Wed Feb 19, 2003 1:35 pm
by hob_goblin
You can submit forms with links,
<a href="#" onclick="javascript: document.formname.submit();">Link</a>
something like that, my javascript is a little rusty.
Or you could just try to use $_GET?
Posted: Wed Feb 19, 2003 5:05 pm
by kilolima
hey hob_goblin,
Thanks for the javascript tip! Although I usually try to avoid js at all costs, I think this may be a time when it's use is unavoidable. Anyway, this seems to work to allow multiple <a href to each submit different values using the $_POST global vars:
(first this script calls a include with session_start())
Code: Select all
<form method = post name = form2 action = test2.php>
<input type=hidden name=one value=0>
<a href="#" onclick="javascript:document.form2.one.value=10;javascript:document.form2.submit();">Link1</a>
<a href="#" onclick="javascript:document.form2.one.value=20;javascript:document.form2.submit();">Link2 </a>
<a href="#" onclick="javascript:document.form2.one.value=30;javascript:document.form2.submit();">Link3</a>
This should solve alot of issues and open the way to get around the no global_vars restrictions. Thanks!
kilolima
p.s. just in case, does anybody have a way to do this without using javascript?
Posted: Wed Feb 19, 2003 5:44 pm
by kilolima
oh bother,
the above doesn't work in IE 5., just mozilla (Phoenix .5)...
now I remember why I hate javascript...
Posted: Thu Feb 20, 2003 7:52 am
by superwormy
Use $_REQUEST instead of $_POST / $_GET.
$_REQUEST will use either the GET or POST variables, depending on which on eis set.