web-dev-qa-db-fra.com

Comment obtenir et modifier une variable d'URL PHP

Bonjour, est-ce que quelqu'un pourrait m'aider avec ceci J'ai une URL comme

parent/child/a=1&b=2$c=3

alors j'ai un lien qui ajouterait une variable à cette URL

<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test1";?>">LINK 1</a>
<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test2";?>">LINK 2</a>

chaque fois que je clique sur mon lien, la variable d d'URL continue à se reproduire comme ceci

parent/child/a=1&b=2&c=3&d=test2&d=test2&d=test2&d=test1&d=test1

Je sais que le $ _SERVER ["REQUEST_URI"] continue à obtenir l'URL actuelle, c'est pourquoi j'obtiens ce résultat. J'ai essayé quelques-unes des propriétés de $ _SERVER [""]. Ce que j'aime bien, c’est de changer la valeur de la variable d, aucune idée de la façon de procéder. Toute réponse est bien appréciée. Merci!

14
CaffeineShots
$query = $_GET;
// replace parameter(s)
$query['d'] = 'new_value';
// rebuild url
$query_result = http_build_query($query);
// new link
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?<?php echo $query_result; ?>">Link</a>
35

Essayez avec l'expression ci-dessous, ça devrait marcher

preg_replace("#&d=.*&#", '&d=newvalue&', $_SERVER['REQUEST_URI'])
5
Vinoth Babu
modify_url_query($url, array('limit' => 50));

Ma fonction pour modifier la requête dans l'URL

function modify_url_query($url, $mod){

$purl = parse_url($url);

$params = array();

if (($query_str=$purl['query']))
{
    parse_str($query_str, $params);

    foreach($params as $name => $value)
    {
        if (isset($mod[$name]))
        {
            $params[$name] = $mod[$name];
            unset($mod[$name]);
        }
    }
}        

$params = array_merge($params, $mod);

$ret = "";

if ($purl['scheme'])
{
    $ret = $purl['scheme'] . "://";
}    

if ($purl['Host'])
{
    $ret .= $purl['Host'];
}    

if ($purl['path'])
{
    $ret .= $purl['path'];
}    

if ($params)
{
    $ret .= '?' . http_build_query($params);
}    


if ($purl['fragment'])
{
    $ret .= "#" . $purl['fragment'];
}        

return $ret;

}
3
ihorsl

Pour supprimer l’ajout répété de paramètres de requête, procédez comme suit:

// parse the url
$pathInfo = parse_url($_SERVER['REQUEST_URI']);
$queryString = $pathInfo['query'];
// convert the query parameters to an array
parse_str($queryString, $queryArray);
// add the new query parameter into the array
$queryArray['d'] = 1;
// build the new query string
$newQueryStr = http_build_query($queryArray);

// construct new url
?>
<a href="<?php echo $pathInfo['Host'].'?'.$newQueryStr;?>">LINK 1</a>
2
Venkat Kotra
function replaceUrlParameters($url = '', $newParams = array()){
    if($url){
        $urlArray = parse_url($url);
        $queryString = $urlArray['query'];
        parse_str($queryString, $queryParams);
        $queryParams = array_merge($queryParams, $newParams);
        $urlArray['query'] = http_build_query($queryParams);

        if(!empty($urlArray)){
            $url = $urlArray['scheme'].'://'.$urlArray['Host'].$urlArray['path'].'?'.$urlArray['query'];
        }
    }
    return $url;
}
// $newParams = array of new parameters or old parameters with new value
$replacedUrl = replaceUrlParameters($url, $newParams);

Supposons que vous ayez une URL du type: - <?php echo $_SERVER["REQUEST_URI"]."&a=test1&b=test2";?> et que vous souhaitez remplacer la valeur du paramètre b par test3, puis passez simplement cette URL et un tableau avec le même index avec une nouvelle valeur. pour ex-<?$url = $_SERVER["REQUEST_URI"]."&a=test1&b=test2";?> <? $newParams = ['b' => 'test3']?>, vous obtiendrez - <? $_SERVER["REQUEST_URI"]."&a=test1&b=test3";?>

0
Vikas Chauhan

Ici, vous ne vous occupez pas de la double citation. Remplacez-le par le code suivant, puis vérifiez.

<a href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'&d=test1';?>">LINK 1</a>

Et vérifiez également dans firebug que l'URL est à chaque fois dans href.

0
Code Lღver