tags:

views:

59

answers:

6

Hi,

I am trying to develop a PHP class which would enable me to get the query string appended into a url and process it according to the variables passed. How can this be done?

Eg

www.example.com?var1=a&var2=b&var3=c

now I want to get ?var1=a&var2=b&var3=c section and process it based on the variables.

Thanks for your responses

but I want a means by which I can get the whole query string since I wont be sure of the variable names that will be sent into the URL thus the $_GET method wont work properly.

Thanks

+4  A: 
// Current URL: www.example.com?var1=a&var2=b&var3=c
function handleUrl()
{
    $var1 = $_GET['var1']; // now contains 'a'
    $var2 = $_GET['var2']; // now contains 'b'
    $var3 = $_GET['var3']; // now contains 'c'

    return "Querystring now contains $var1 $var2 and $var3";
}

More information at http://php.net/manual/en/reserved.variables.get.php

sshow
but dont forget to htmlspecialchars() the $_GET, because otherwise people can use xss to "hack" your site or to use it for bad things :)
ahmet2106
+1  A: 

Use $_GET

Simon Groenewolt
A: 

If you have the parameters stored in a variable, then use parse_str. Example:

$str = 'var1=a&var2=b&var3=c';
parse_str($str);
echo $var1;
karim79
A: 

http_build_query is the function you're probably looking for

Col. Shrapnel
A: 

Here is a minimalistic Class, should work, but not tested.

<?php
class URLHandler 
{
    public $get;

    public function __construct( $get );
    {
        $this->get = $get;
    }

    public function get_var( $var )
    {
        return htmlspecialchars( $this->get[$var] );
    }

    public function check_var( $var, $is )
    {
        if( $this->get_var( $var ) == $is )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

// Below is how you can use this class
$URL = new URLHandler( $_GET );
if( $URL->check_var( 'var1', 'a' ) )
{
    echo 'yes your first var is a';
    // Here you can add a function or functions which should be loaded if var1 = a
}
else
{
    echo 'No, your first var is not a, its '.$URL->get_var( 'var2' );
    // Here you can add a function or functions which should be loaded if var1 is not a
}

if( $URL->check_var( 'var2', 'a' ) )
{
    echo 'and your second var is a';
}
else
{
    echo 'your second var is not a, its '.$URL->get_var( 'var2' );
}
?>

Hope that helps Ahmet

ahmet2106
+2  A: 

If you want access to the URL parameters as a string you can use this:

$_SERVER['QUERY_STRING']

But, I'm not sure how that would be any more useful than $_GET. You said:

I wont be sure of the variable names

You can iterate through the $_GET array with a foreach loop:

foreach ($_GET as $key => $val) {
    echo $key . ": " . $val;
}

However... if you're talking about an arbitrary URL (not necessarily the one which was requested), then the above methods won't work since they obviously won't be in $_GET. Instead you can use parse_url

$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_QUERY);

Output:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
arg=value
nickf
+1 for the awesome varieties presented. This should do everything the OP requested and more. I had forgotten about a couple of the options mentioned.
Joseph
Thanks a lot for your answer.
Stanley Ngumo