lazyme114
lazyme114

Reputation: 299

Get URL and remove id from it

I have a url like this

url:- url.php?gender=male&&grand=brand1&&id=$id
eg. $id may be 1, 100 ,23, 1000 any number

I am getting the url using

<?php echo $_SERVER['REQUEST_URI']; ?>

Is it possible to change the id and make the url like

url:- url.php?gender=gender&&brand=brand1&&id=$newId
where $newId can be any number except the one that is present in the url

Upvotes: 0

Views: 1170

Answers (3)

DeeBee
DeeBee

Reputation: 319

You could use $_SERVER['QUERY_STRING'] instead.

Moreover, if your 'id' value is not always at the end, getting a substr up to it wouldn't be very robust. Instead turn it into an associative array and fiddle with it.

For example, starting with /url.php?gender=male&grand=brand1&id=999&something=else

parse_str($_SERVER['QUERY_STRING'], $parsed);
unset($parsed['id']);

// there may be a better way to do this bit.
$new_args = [];
foreach($parsed as $key=>$val){
    $new_args[] = "$key=$val";
}
$new_arg_str = join($new_args, '&');

$self = $_SERVER['PHP_SELF'];
$new_endpoint = "$self?$new_arg_str";
echo $new_endpoint;

result: /url.php?gender=male&grand=brand1&something=else

Bit more legible than regex as well.

Bear in mind if you're going to redirect (using header("Location: whatever") or otherwise), you'll need to be wary of redirect loops. An if statement could avoid that.

References:

http://php.net/manual/en/reserved.variables.server.php

http://php.net/manual/en/function.parse-str.php

http://php.net/manual/en/function.unset.php

http://php.net/manual/en/control-structures.foreach.php

http://php.net/manual/en/function.join.php

Upvotes: 1

Shashank Katiyar
Shashank Katiyar

Reputation: 139

Get the id position and the remove the id using sub string.

$url = $_SERVER['REQUEST_URI'];
#Get id position and remove && by subtracting 2 from length
$pos = strrpos($url,'id') - 2;
$url = substr($url, 0, $Pos);
echo $url;

Upvotes: 1

Divyank Munjapara
Divyank Munjapara

Reputation: 184

function remove_querystring_var($url, $key) {
     $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
     $url = substr($url, 0, -2);
     return $url;
}

this will do the job, pass your url and key you want to remove in this function

ex remove_querystring_var("url.php?gender=male&&grand=brand1&&id=$id","id"), it will remove id from your url

Upvotes: 2

Related Questions