2013-06-30 36 views
2

自從我開始使用PHP以來,我一直在想這一段時間。有些網站使用過濾選項。有時候,其中一些過濾器是完全隨機的。例如,某人可能正在查看:products.php?c=1&p=1&s=100在該示例中,我們假設c是該類別,p是頁面,s是起始價格。

如果查看用戶要更改起始價格或使用超鏈接翻到下一頁,那麼如何更改只有一個$_GET[]變量而其他變量不變。我在PHP中有一個小腳本來獲取當前的URI,但我無法弄清楚如何改變這個變量,同時保持其他變量不被刷新並刷新頁面?我看過substr(),strpos()ereg_replace(),我只是無法弄清楚!

我真的很抱歉,如果這是一個愚蠢的問題,我覺得我錯過了一件很容易的事情,可以解決這個問題,但我真的是卡住了傢伙。

非常感謝! Mike。

+0

十分感謝答覆傢伙!我遇到的實際問題是我的網站上有一個顯示歷史事件的頁面,這些頁面已經過去了。因爲這樣的用戶可以在頁面之間進行瀏覽,並且在排序可用時,它不是強制性的基本的網址是:'history.php?p = 1&v = 1'。但是,如果用戶激活排序,我希望排序變量獲得ADDED到URL的末尾,所以如果用戶已經在'v = 3'這表明他們經歷的歷史頁面,那麼我需要添加'sort = asc'到URI的末尾。 –

回答

1

這取決於你是否在表單或URL。

如果你在一個形式是很容易的,因爲用戶改變他們想改變輸入字段和其他人呆在那裏:

<form> 
    <input type="p" value="1" /> 
    <input type="c" value="1" /> 
    <input type="s" value="100" /> 
    <input type="submit" /> 
</form> 

與基於URL的方法的問題是,你將不得不設置網址爲每一個這樣的:

<a href="?p=1&c=1&s=1">$1 Starting Price</a> 
<a href="?p=1&c=1&s=10">$10 Starting Price</a> 
<a href="?p=1&c=1&s=100">$100 Starting Price</a> 

你不得不這樣做是爲了使動態:

<a href="?p=<?php echo urlencode($_GET['p']) ?>&c=<?php echo urlencode($_GET['c']) ?>&s=1">$1 Starting Price</a> 

這是很多爲您的所有鏈接打字。你可以做一個PHP函數來處理不斷變化的這樣的一個值:

function genUrl($newKey, $newVal) { 
    $url = '?'; 
    foreach ($_GET as $key => $val) { 
     if ($url != '?') { 
      $url .= '&'; 
     } 

     $url .= urlencode($key) . '=' ($key == $newKey ? $newVal : urlencode($val)); 
    } 

    return $url; 
} 

而且你的HTML應該是這樣的:

<a href="<?php echo genUrl('s', 1) ?>">$1 Starting Price</a> 
<a href="<?php echo genUrl('s', 10) ?>">$1 Starting Price</a> 
<a href="<?php echo genUrl('s', 100) ?>">$1 Starting Price</a> 
+0

感謝Chris,我稍微操縱了你的代碼,以便我可以將一個鍵和值傳遞給我的函數,從這些參數創建一個$ _GET變量,然後生成我需要的URL!謝謝! –

+1

不錯的代碼,但是您在=後丟失了一個點;) $ url。= urlencode($ key)。 '='。 ($ key == $ newKey?$ newVal:urlencode($ val)); – Uxio

1

您只需將您的超鏈接位置設置爲您想要更改的變量即可。說,如果它是目前products.php?c=1&p=1&s=100你想去products.php?c=2&p=1&s=100,那麼你需要有你的錨標記,像這樣

<?php 

$_GET['c'] = $_GET['c']++; 

?> 

<a href='<?php echo "products.php?c={$_GET['c']}&p=1&s=100" ?>'>link<a/> 

它與其他變量相同。