views:

44

answers:

2

I am trying to add a few different GET variables to the url.

I could easily do a header redirect to the current page url and then just add the $_GET['test'] in the url.

My problem is that I have some GET variables that are in the url already. What I want to do is:

  • Check if there are any GET variables in the url

    • If there is not, then redirect to the current url with the new GET['test'] variable at the end of the url.

    • If there is, but there is no GET['test'] variable in the url, then keep those other GET values in the url and add the GET['test'] variable to end of the full url string

    • If there is, AND there is a GET['test'] variable in the url, then keep those other GET values in the url and exchange the GET['test'] variable value with the new value.

How can I go about checking for all these conditions?

+3  A: 

The simple way to it is:

$params = array_merge($_GET, array("test" => "testvalue"));
$new_query_string = http_build_query($params);

This doesn't guarantee that test will be at the end. If for some odd reason you need that, you can just do:

$params = $_GET;
unset($params["test"]);
$params["test"] = "testvalue";
$new_query_string = http_build_query($params);

Note, however, that PHP query string parameter parsing may have some interoperability problems with other applications. In particular, PHP doesn't accept multiple values for any parameter unless it has an array-like name.

Then you can just forward to

(empty($_SERVER['HTTPS'])?"http://":"https://") .
    (empty($_SERVER['HTTP_HOST'])?$defaultHost:$_SERVER['HTTP_HOST']) .
    $_SERVER['REQUEST_URI'] . "?" . $new_query_string
Artefacto
A: 

..

$newval = 'whatever';
if( !count($_GET) ) {
 header('Location: ?test=' . $newval);
 exit;
}
if(!isset($_GET['test'])) {
 $_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;
nathan
You know, it's considered good practice to accompany your downvotes with comments, otherwise the answer cannot be improved and the downvote doesn't serve any purpose – the exception being when the answer is clearly inflammatory. This is specially true if you're downvoting an alternative answer to yours; it just seems self-serving otherwise. As to your answer itself, I think you're taking the specifications of the OP too literally, but only he can tell that. Plus, it's really good practice to alter `$GET` (or `$_SERVER`).
Artefacto
I mean it's not a good practice (the editing windows has closed).
Artefacto
np, up voted now that you've expanded, was going to comment before but pulled away from pc before i could by kids ;)
nathan