2010-07-02 35 views
22

Tôi đang cố gắng thêm một vài biến GET khác nhau vào url.Làm cách nào để thêm các biến GET vào cuối url hiện tại trong php?

Tôi có thể dễ dàng chuyển hướng tiêu đề đến url trang hiện tại và sau đó chỉ cần thêm $ _GET ['test'] vào url.

Vấn đề của tôi là tôi có một số biến GET đã có trong url. Những gì tôi muốn làm là:

  • Kiểm tra nếu có bất kỳ biến GET trong url

    • Nếu không có, sau đó chuyển hướng đến url hiện tại với GET mới [' biến kiểm tra '] ở cuối url.

    • Nếu có, nhưng không có biến GET ['test'] nào trong url, hãy giữ các giá trị GET khác trong url và thêm biến GET ['test'] vào cuối chuỗi url đầy đủ

    • Nếu có, VÀ có biến GET ['test'] trong url, hãy giữ các giá trị GET khác trong url và trao đổi giá trị biến GET ['test'] với giá trị mới.

Làm thế nào tôi có thể đi về việc kiểm tra đối với tất cả những điều kiện này?

Trả lời

33

Cách đơn giản để nó là:

$params = array_merge($_GET, array("test" => "testvalue")); 
$new_query_string = http_build_query($params); 

này không đảm bảo rằng test sẽ ở cuối. Nếu vì một lý do nào lẻ ​​bạn cần điều đó, bạn chỉ có thể làm:

$params = $_GET; 
unset($params["test"]); 
$params["test"] = "testvalue"; 
$new_query_string = http_build_query($params); 

Lưu ý, tuy nhiên, truy vấn tham số chuỗi PHP phân tích cú pháp có thể có một số vấn đề khả năng tương tác với các ứng dụng khác. Cụ thể, PHP không chấp nhận nhiều giá trị cho bất kỳ tham số nào trừ khi nó có một tên giống như mảng.

Sau đó, bạn có thể chỉ mong được

(empty($_SERVER['HTTPS'])?"http://":"https://") . 
    (empty($_SERVER['HTTP_HOST'])?$defaultHost:$_SERVER['HTTP_HOST']) . 
    $_SERVER['REQUEST_URI'] . "?" . $new_query_string 
+3

Tôi tin rằng điều này sẽ tăng gấp đôi trên các vars GET. Nếu URL hiện tại là 'domain.com/page.php? Var = 1' thì kết quả cuối cùng của mã" Sau đó bạn có thể chuyển tiếp tới "là' domain.com/page.php?var=1?var=1&test= testvalue'. – MarcGuay

+0

thay thế REQUEST_URI bằng PHP_SELF – bleuscyther

+0

tại sao bạn cần: bỏ đặt ($ params ["test"]); không phải là nó được thay thế bằng câu lệnh: $ params ["test"] = "testvalue"; –

0

..

$newval = 'whatever'; 
if(!count($_GET)) { 
header('Location: ?test=' . $newval); 
exit; 
} 
if(!isset($_GET['test'])) { 
$_SERVER['REQUEST_URI'] .= '&test='.$newval; 
} 
$_GET['test'] = $newval; 
+0

Bạn biết đấy, nó được coi là thực hành tốt để đi cùng với downvotes của bạn với ý kiến, nếu không câu trả lời không thể được cải thiện và downvote không phục vụ bất kỳ mục đích - ngoại lệ là khi câu trả lời rõ ràng là viêm. Điều này đặc biệt đúng nếu bạn downvoting một câu trả lời thay thế cho bạn; nó chỉ có vẻ tự phục vụ khác. Đối với câu trả lời của bạn, tôi nghĩ rằng bạn đang dùng các thông số kỹ thuật của OP quá theo nghĩa đen, nhưng chỉ có anh ta mới có thể nói điều đó. Thêm vào đó, thực sự tốt để thay đổi '$ GET' (hoặc' $ _SERVER'). – Artefacto

+0

Tôi có nghĩa là nó không phải là một thực hành tốt (các cửa sổ chỉnh sửa đã đóng). – Artefacto

+0

np, hãy bỏ phiếu ngay bây giờ mà bạn đã mở rộng, sẽ bình luận trước nhưng đã bị xóa khỏi máy tính trước khi tôi có thể bởi trẻ em;) – nathan

1
function request_URI() { 

    if(!isset($_SERVER['REQUEST_URI'])) { 
     $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME']; 
     if($_SERVER['QUERY_STRING']) { 
      $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; 
     } 
    } 
    return $_SERVER['REQUEST_URI']; 
} 

$_SERVER['REQUEST_URI'] = request_URI(); 

Courtesy: http://php.net/manual/en/reserved.variables.server.php dụ bằng cách LOL

này sẽ cung cấp cho bạn địa chỉ URL tôn trọng vào thư mục gốc với cùng với các tham số GET.

Trong trường hợp bạn muốn nó liên quan đến thư mục hiện tại, hãy thêm phần sau đây.

$current_url = explode("/", $_SERVER['REQUEST_URI']); 

$current_url = $current_url[end(array_keys($current_url))]; 
1

Nó có thể chỉ là lý do Joomla, nhưng tôi nhận được cùng một giá trị bằng cách sử dụng:

$ CURRENTURL = $ _SERVER [ 'REQUEST_URI'];

mã ít hơn nhiều.

7

Tôi đã tạo hàm PHP đơn giản này dựa trên câu trả lời của Artefacto.

function addOrUpdateUrlParam($name, $value) 
{ 
    $params = $_GET; 
    unset($params[$name]); 
    $params[$name] = $value; 
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params); 
} 
  • Nó cập nhật giá trị nếu bạn đang thay đổi một tham số hiện có.
  • Thêm vào nếu đó là một giá trị mới
Các vấn đề liên quan