2013-04-16 27 views
11

Hi ai có thể giúp tôi với này tôi có một URL nhưLàm thế nào để có được và URL thay đổi biến PHP

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

sau đó tôi có một liên kết mà sẽ thêm biến để URL mà

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

mỗi khi tôi nhấp vào liên kết của tôi, biến d để URL tiếp tục sao chép như thế này

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

Tôi biết t mũ $ _SERVER ["REQUEST_URI"] tiếp tục nhận URL hiện tại là lý do tôi nhận được kết quả đó. Tôi đã thử một số thuộc tính của $ _SERVER [""]. Điều tôi thích là thay đổi giá trị biến d, bất kỳ ý tưởng nào để thực hiện. Mọi phản hồi đều được đánh giá cao. Cảm ơn!

+1

sử dụng preg_replace trên $ _SERVER [ "REQUEST_URI"] nếu d = tồn tại – Robert

+0

@Robert Podwika.I nghĩ rằng preg_replace sẽ làm nhưng tôi không biết làm thế nào để sử dụng mã đó, bây giờ tôi sẽ nghiên cứu rằng tại hướng dẫn sử dụng PHP. Cảm ơn. Tôi sẽ nhấn +1 nếu mã sửa lỗi của tôi. Cảm ơn Robert! – CaffeineShots

+0

@kodewrecker: Bạn đã xem câu trả lời của tôi chưa? Nó sẽ hoạt động –

Trả lời

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

Đây là cách trả lời tốt hơn, tôi đã tìm kiếm một cái gì đó như thế này. Cảm ơn. – Overcode

+0

Cho đến nay, giải pháp thanh lịch nhất mà tôi đã thấy được đăng trên một số câu hỏi tương tự – Brad

0

Tại đây bạn không quan tâm đến báo giá kép. Thay thế bằng mã sau và sau đó kiểm tra.

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

Và cũng kiểm tra firebug rằng URL nào là in href mỗi lần.

+0

Tôi không nghĩ điều đó sẽ tạo nên sự khác biệt nào? –

+0

@ OSSCube.I đã thử nó, cuối cùng của tôi cả hai trích dẫn kép và duy nhất là làm tốt, tuy nhiên tôi thay đổi nó chỉ để kiểm tra của bạn, vẫn tái tạo các biến d thưa ông, nhưng nhờ trả lời anyway. – CaffeineShots

+0

@kodewrecker Tôi đã cập nhật mã của mình. kiểm tra bây giờ. –

1

Để loại bỏ Ngoài ra lặp đi lặp lại của tham số truy vấn thực hiện dưới đây

// 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

cảm ơn vì điều này. giá trị dữ liệu $ sẽ là bao nhiêu? – CaffeineShots

+0

@CaffeineShots nó phải là parse_str ($ queryString, $ queryArray); thay vì $ queryArray = parse_str ($ queryString); và $ data sau đó $ queryArray – DoubleK

4

Hãy thử với các biểu hiện dưới đây, nó sẽ hoạt động

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

vâng tôi đang thử nghiệm nó ngay bây giờ. với tham số đầu tiên là gì? "# & d =. * & #" là dấu hiệu số (#) và dấu sao (*) là cần thiết? tôi có thể hỏi đó là cái gì không? – CaffeineShots

+0

Đó là cú pháp biểu thức. '& d =. * &' đây là điều chúng tôi muốn. Nó sẽ thay thế nội dung & d = * & bằng những gì bạn cung cấp làm tham số thứ hai. Tôi đã cập nhật mã, vui lòng kiểm tra lại mã mới. –

+0

cảm ơn! nó hoạt động! +1 – CaffeineShots

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

chức năng của tôi cho sửa đổi truy vấn trong 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

Nó đã hoạt động nhưng bị lỗi không xác định, cách sửa lỗi đó? –

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

Vui lòng xem xét giải thích đoạn mã này làm gì và cách làm việc với đoạn mã đó. Điều này giải quyết vấn đề trong câu hỏi ban đầu như thế nào? –

+0

Giả sử bạn có url như: - '' và bạn muốn thay thế giá trị của tham số _b_ thành _test3_ thì chỉ cần chuyển url này và một mảng có cùng chỉ mục với giá trị mới. cho ex- '' ' 'test3']?>' thì bạn sẽ nhận được - ' ' –

Các vấn đề liên quan