web-dev-qa-db-fra.com

Comment ajouter un paramètre d'URL à l'URL actuelle?

Actuellement, je suis à http://example.com/topic.php?id=14 et je souhaite créer un lien vers http://example.com/topic.php?id=14&like=like en ne définissant pas l'URL actuelle. Comme <a href="&like=like">Like</a>. Cependant ce dernier me montre http://example.com/&like=like

36
ilhan

Il n'y a aucun moyen d'écrire un URI relatif qui préserve la chaîne de requête existante tout en y ajoutant des paramètres.

Vous devez:

topic.php?id=14&like=like
11
Quentin
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;
}

Ajoutez ensuite votre valeur avec quelque chose comme:

echo currentUrl().'&value=myVal';
13
Marco Pace

Je sais que je suis en retard pour le jeu, mais vous pouvez simplement utiliser ?id=14&like=like en utilisant la requête de génération http comme suit:

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

Quels que soient les paramètres GET que vous aviez, ils seront toujours là et si like était un paramètre avant qu'il ne soit remplacé, sinon, il sera inclus à la fin.

8
Zachary Weixelbaum

Si vous souhaitez utiliser "like" en tant que paramètre, votre lien doit être:

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

Plus probablement, c'est que vous voulez:

<a href="/topic.php?id=14&like=like">Like</a>
3
span

Peut-être que vous pouvez écrire une fonction comme suit:

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);
  }
}
0
killernova