48

Currently I'm at

http://example.com/topic.php?id=14 

and I want to make a link to

http://example.com/topic.php?id=14&like=like 

by not defining the current url. Like <a href="&like=like">Like</a>. However this last one shows me http://example.com/&like=like

Kamil Kiełczewski
  • 53,729
  • 20
  • 259
  • 241
ilhan
  • 7,981
  • 30
  • 107
  • 186
  • 1
    Possible dupe of http://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript or http://stackoverflow.com/questions/6899097/how-to-add-a-parameter-to-the-url – reflexiv Jul 16 '13 at 05:46

7 Answers7

20

There is no way to write a relative URI that preserves the existing query string while adding additional parameters to it.

You have to:

topic.php?id=14&like=like
Quentin
  • 800,325
  • 104
  • 1,079
  • 1,205
16
function currentUrl() {
    $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https';
    $host     = $_SERVER['HTTP_HOST'];
    $script   = $_SERVER['SCRIPT_NAME'];
    $params   = $_SERVER['QUERY_STRING'];

    return $protocol . '://' . $host . $script . '?' . $params;
}

Then add your value with something like;

echo currentUrl().'&value=myVal';
Marco Pace
  • 3,729
  • 16
  • 38
12

I know I'm late to the game, but you can just do ?id=14&like=like by using http build query as follows:

http_build_query(array_merge($_GET, array("like"=>"like")))

Whatever GET parameters you had will still be there and if like was a parameter before it will be overwritten, otherwise it will be included at the end.

5

In case you want to add the URL parameter in JavaScript, see this answer. As suggested there, you can use the URLSeachParams API in modern browsers as follows:

<script>
function addUrlParameter(name, value) {
  var searchParams = new URLSearchParams(window.location.search)
  searchParams.set(name, value)
  window.location.search = searchParams.toString()
}
</script>

<body>
...
  <a onclick="addUrlParameter('like', 'like')">Like this page</a>
...
</body>
mrts
  • 11,067
  • 5
  • 65
  • 58
2

If you wish to use "like" as a parameter your link needs to be:

<a href="/topic.php?like=like">Like</a>

More likely though is that you want:

<a href="/topic.php?id=14&like=like">Like</a>
span
  • 5,144
  • 5
  • 47
  • 96
1

It is not elegant but possible to do it as one-liner <a> element

<a href onclick="event.preventDefault(); location+='&like=like'">Like</a>
Kamil Kiełczewski
  • 53,729
  • 20
  • 259
  • 241
0

Maybe you can write a function as follows:

var addParams = function(key, val, url) {
  var arr = url.split('?');
  if(arr.length == 1) {
    return url + '?' + key + '=' + val;
  }
  else if(arr.length == 2) {
    var params = arr[1].split('&');
    var p = {};
    var a = [];
    var strarr = [];
    $.each(params, function(index, element) {
      a = element.split('=');
      p[a[0]] = a[1];
      })
    p[key] = val;
    for(var o in p) {
      strarr.push(o + '=' + p[o]);
    }
    var str = strarr.join('&');
    return(arr[0] + '?' + str);
  }
}
killernova
  • 110
  • 8