2013-04-16 14 views
11

Cześć może ktoś mi pomóc z tym Mam URL jakJak zdobyć i zmiana URL zmienna PHP

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

to mam link, który będzie dodać zmienną do tego adresu 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> 

za każdym razem, gdy klikam na moim linku, zmienna d na URL odtwarza się w ten sposób, tak jak ta

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

Znam t hat the $ _SERVER ["REQUEST_URI"] ciągle pobiera aktualny adres URL, dlatego otrzymuję ten wynik. Próbowałem niektórych właściwości $ _SERVER [""]. Co mi się podoba to zmienić wartość zmiennej d, każdy pomysł, jak to zrobić. Każda odpowiedź jest dobrze doceniona. Dzięki!

+1

używanie preg_replace na $ _SERVER [ „REQUEST_URI”] jeśli d = istnieje – Robert

+0

@Robert Podwika.I zdaniem preg_replace zrobi, ale nie wiem, jak korzystać z tego kodu, na razie będę uczyć, że na instrukcja obsługi PHP. Dzięki. Będę uderzał +1, jeśli kod naprawi mój problem. Dzięki Robertowi! – CaffeineShots

+0

@kodewrecker: Czy sprawdziłeś moją odpowiedź? Powinno działać –

Odpowiedz

28
$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> 
+0

To jest o wiele lepsza odpowiedź, szukałem czegoś takiego. Dzięki. – Overcode

+0

Zdecydowanie najbardziej eleganckie rozwiązanie, jakie widziałem na kilku podobnych pytaniach. – Brad

0

Tutaj nie zajmujesz się podwójną ofertą. Zastąp to następującym kodem, a następnie sprawdź.

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

A także sprawdź w firebug, który adres URL jest w href za każdym razem.

+0

Nie sądzę, że to by miało jakieś znaczenie? –

+0

@ OSSCube. Próbowałem go, w końcu zarówno podwójny cudzysłów, jak i singiel robią dobrze, jednak zmieniam go tylko po to, aby przetestować twoje, wciąż odtwarzając zmienną d, ale mimo to dziękuję za odpowiedź. – CaffeineShots

+0

@kodewrecker Zaktualizowałem mój kod. teraz sprawdź. –

1

Aby usunąć powtarzające dodanie parametru zapytania wykonaj poniżej

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

// construct new url 
?> 
<a href="<?php echo $pathInfo.'?'.$newQueryStr;?>">LINK 1</a> 
+0

dzięki za to. jaka byłaby wartość danych $? – CaffeineShots

+0

@CaffeineShots powinno to być parse_str ($ queryString, $ queryArray); zamiast $ queryArray = parse_str ($ queryString); a $ dane to $ queryArray – DoubleK

4

Spróbuj z poniższej wypowiedzi, to powinno działać

preg_replace("#&d=.*&#", '&d=newvalue&', $_SERVER['REQUEST_URI']) 
+0

tak, testuję to teraz. co jest z pierwszym parametrem? "# & d =. * i #" jest znakiem numeru (#) i gwiazdką (*) jest konieczne? Czy mogę zapytać, po co to jest? – CaffeineShots

+0

To jest składnia wyrażenia. "& d =. * &" to jest to, czego chcemy. Zastąpi zawartość & d = * i tym, co dajesz jako drugi parametr. Zaktualizowałem kod, proszę sprawdzić go ponownie za pomocą nowego kodu. –

+0

dzięki! to działa! +1 – CaffeineShots

2
modify_url_query($url, array('limit' => 50)); 

moją funkcję modyfikacji zapytania w adresie 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; 

} 
+0

To działało, ale otrzymywałem niezdefiniowane błędy, jak to naprawić? –

0
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); 
+0

Proszę wyjaśnić, co robi ten fragment kodu i jak z nim pracować. Jak to rozwiązuje problem w pierwotnym pytaniu? –

+0

Załóżmy, że masz URL taki jak: - '' i chcesz zastąpić wartość parametru _b_ na _test3_, a następnie po prostu przekazać ten URL i tablica z tym samym indeksem z nową wartością. dla ex- '' ' 'test3']?>' następnie otrzymasz - '