note 27370 added to language.variables.external
| From: | pages at inrp dot fr | Date: | Tue, 03 Dec 2002 18:18:48 +0000 |
| Subject: | note 27370 added to language.variables.external | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-40304@lists.php.net to get a copy of this message | ||
Overridden Get, Post and Cookie data with register_globals turned on.
With register_globals turned on, if 3 variables WITH THE SAME
NAME are defined in your script (one as a Get variable, one as
a Post variable and one as a Cookie variable) and if this name
is an ARRAY ELEMENT (let's say foo[ab]), then $_GET["foo"]["ab"]
and $_POST["foo"]["ab"] will both be set to
$_COOKIE["foo"]["ab"].
Let's try it.
First, write the script "print_gpc.php" :
<?php
echo '$_GET';
echo "<PRE>";
print_r($_GET);
echo "</PRE>";
echo '$_POST';
echo "<PRE>";
print_r($_POST);
echo "</PRE>";
echo '$_COOKIE';
echo "<PRE>";
print_r($_COOKIE);
echo "</PRE>";
?>
Then call the form below ("test.php") in your browser :
<?php setcookie("foo[ab]","I_am_a_cookie"); ?>
<FORM METHOD="POST" ACTION="print_gpc.php?foo[ab]=I_am_a_get_value">
<INPUT TYPE="submit" NAME="foo[ab]" VALUE="OK">
</FORM>
and clic on the OK button.
If you have register_globals turned off, you will see what you expect :
$_GET
Array
(
[foo] => Array
(
[ab] => I_am_a_get_value
)
)
$_POST
Array
(
[foo] => Array
(
[ab] => OK
)
)
$_COOKIE
Array
(
[foo] => Array
(
[ab] => I_am_a_cookie
)
)
but if you have register_globals turned on,
you will have $_GET["foo"]["ab"] == "I_am_a_cookie"
and $_POST["foo"]["ab"] == "I_am_a_cookie".
Strangly, this problem does not occur if the cookie name is
NOT an array element EVEN if register_globals is turned On.
(Try to replace "foo[ab]" by "foo" in the "test.php" form.)
--
http://www.php.net/manual/en/language.variables.external.php
http://master.php.net/manage/user-notes.php?action=edit+27370
http://master.php.net/manage/user-notes.php?action=delete+27370
http://master.php.net/manage/user-notes.php?action=reject+27370