On Tuesday, April 23, 2002, at 02:28 PM, Andre Dubuc wrote:
I tried with VALUES ($_GET['sfname'] etc, etc and got a T_Variable
error
as you said would happen. I've yet to try what you've suggested, but
since
the Test to ensure your PHP binary is working shows that it is indeed
funtioning, I think with the info you've provided, I should be able to
pass
the variables or the array to the next page.
Yep. You can't do it with VALUES ($_GET['sfname'] etc, etc . You'll
have to do it with VALUES ( . $_GET['sfname'] . , .
etc . , . );
I did a print_r($_GET); for pages 1 and 2, and both showed the array
for that
page only. I sort of thought that the command would show the $_GET array
growing with the values from page 1 and page 2.
Think about it -- the $_GET array simply shows the variables that were
sent to that particular script using the GET method. Since HTTP is
stateless, this won't grow over the lifetime of a browser's session --
for that you need to take your GET variables and place them into an
array in a SESSION variable or something. What you have observed is
normal. One other way to make your GET array grow is to grab the
contents of the $_GET array using a foreach () loop or something, and
then place them into a hidden form field. But bear in mind that the GET
method only supports like 255 characters or something like that, so
doing this isn't advisable -- that is, after all, what session variables
were developed for.
That seems to be where the
problem lies. Using $sfname = $_GET['sfname']; on page 1 and $rfname =
$_GET['rfname'] on page 2, I would have assumed that the print_r[$_GET]
done
on page 2 would show both sfname AND rfname. But perhaps I am
mis-understanding the function of print_r[$_GET] -- it's probably
non-cumulative and specific to the page from which it was called on. If
that's the case, what precisely is the value of these superglobals
when ,in
fact, they are specific to ONE page only???
First of all, just so we're clear on this, print_r simply prints out the
raw value of a variable or array or object or whatever. It's something
that you usually only use in development, to echo back to yourself the
contents of a variable so you can make sure that your code is working as
expected (or find out what's wrong if it's not).
SUPERGLOBAL doesn't refer to SUPERSESSION -- it doesn't mean that the
variables become any more persistent than before. The differences are
slight, and the name SUPER may have misled you. What is meant by
SUPERGLOBAL is that when you refer to a superglobal using the
superglobal syntax ($_GET, $_SERVER, etc), it is automatically
globalized. What value is this? Well, for one thing you don't have to
declare these as global with the global keyword in a function.
Normally, this won't work:
$name = Andre Dubuc;
function printname()
{
print $name;
}
...because $name is defined outside the scope of the function. The name
needs to be passed to the function as an argument, or by using the
global keyword...
// as an argument:
$name = Andre Dubuc;
function printname($name)
{
print $name;
}
// using global keyword
$name = Andre Dubuc;
function printname()
{
global $name;
print $name;
}
These will both result in Andre Dubuc being printed to the screen.
But here is a superglobal being used:
// $_GET['name'] has been passed to the script,
// and its value is Andre Dubuc
function printname()
{
print $_GET['name'];
}
This will in fact print the name as expected, even though the name
hasn't been passed as an argument or globalized by the global keyword.
Why is this useful? Well, I have a feeling that the PHP developers
anticipated some unfavorable reaction to deprecating register_globals =
on. So, instead of requiring everyone to use $HTTP_*_VARS all the time
(which is between 14 and 20 extra characters depending on what array
we're talking about), they came up with the much shorter $_* variable
names. Easier to use. And, since the PHP coder in question is
referring to these variables in a much more specific fashion (by using
$_GET to refer to GET variables or $_SESSION to session variables), they
are less likely to inadvertently globalize some malicious input from a
user -- so why not provide the convenience of making the variables
global?
With superglobals, you need to actually break out of the string by
using the
dot to append variable names. How I wish I knew that before: I don't
recall
running into that statement anywhere in the docs.
It's just like the + operator in JavaScript (well, actually in JS the +
operator also performs addition). You'll find the dot extremely
useful -- I'm sure you already know this one:
$name = Andre ;
$name .= Dubuc;
print $name; // prints Andre Dubuc
I think I'll get used to dot notation [I used it a lot in Paradox PAL]
and re-do my scripts properly. I'll get back to you on how it goes.
Thank-you