简体   繁体   中英

Easiest and most efficient way to get data from URL using php?

Solution?

Apparently there isn't a faster way, I'm okay with that.


I am just learning php and I am trying to figure out some good tips and tricks so I don't get into a bad habit and waste time.

I am passing in values into a php script. I am using $_GET so the URL looks like this:

/poll_results.php?Sports=tennis&cat=Sports&question=Pick+your+favorite+sports

Now I know how to accept those values and place them into variables like so:

$sports = $_GET['Sports'];
$cat = $_GET['cat'];
$question = $_GET['question'];

Super simple yet if I am passing 5 - 6 things it can get bothersome and I don't like typing things out for every single variable, that's the only reason. I know there is a better way of doing this. I have tried list($var, $var, $var) = $_GET but that doesn't work with an associative array just indexed ones (i think).

I also tried variable variables like so:

foreach($_GET as $value) {
    $$values = $value;
    echo $$values;
}

But that gave me a Notice: Undefined variable: values in poll_results.php on line 14. Line 14 is the $$values = $value. I don't know if that's a big deal or not... but I'm not turning off error reporting as I am still in the process of building the script. It does do what I want it to do though...

Any answers will be copied and pasted into my question so the next person knows :D

Thanks guys!

Your second bit of code is wrong. It ought to be like

foreach ($_GET as $key => $value) {
    $$key = $value;
}

if i understand your intent. However, you're basically reinventing register_globals, which....eh. That'll get ya hacked.

If you have certain variables you want to get, you could do like

foreach (array('Sports', 'cat', 'question') as $key)
{
    $$key = $_GET[$key];
}

which is less likely to overwrite some important variable (whether by accident or because someone was messing around with URLs).

Use parse_url() to extract the query string from a URL you've got in a string, then parse_str() to extract the individual arguments of the query string.

If you want to pollute your script with the contents of the superglobals, then you can use extract() . however, be aware that this is basically replicating the hideous monstrosity known as "register_globals", and opens all kinds of security vulnerabilities.

For instant, what if one of the original query arguments was _GET=haha . You've now trashed the $_GET superglobal by overwriting it via extract() .

I am just learning php and I am trying to figure out some good tips and tricks so I don't get into a bad habit and waste time.

If I am passing 5 - 6 things it can get bothersome and I don't like typing things out for every single variable, that's the only reason.

What you are trying to do will, unless curbed, become a bad habit and even before then is a waste of time.

Type out the variables : your digits like exercise and your brain can take it easy when it doesn't have to figure out which variables are available (or not, or maybe; which would be the case when you use variable variables).

You can use

foreach($_GET as $key => $value)

To preserve the key and value associativity.

Variable variables (the $$value ) are a bad idea. With your loop above say you had a variable named $password that is already defined from some other source. Now I can send $_GET['password'] and overwrite your variable! All sorts of nastiness can result from this. It's the same reason why PHP abandoned register_globals which essentially does the same thing.

My advice: use $_POST when possible. It keeps your URLs much cleaner for one thing. Secondly there's no real reason to assign the array to variables anyway, just use them where you need them in the program.

One good reason for this, especially in a large program, is that you'll instantly know where they came from, and that their data should not be trusted.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM