2011-07-27 64 views
2

有一個問題在這裏....

我似乎無法找到「添加」和「減」 $變量的URL字符串的好方法....

這裏是我的榜樣:

在URL

http://mywebsite.com/index.php?y=2011

對於源代碼,我有:

$currentPage = $_SERVER['PHP_SELF']; 

然後,如果我想添加不同的$雜物統計局的URL字符串,我一直在嘗試這種...:

echo '<a href="$currentPage.&t=col">College</a>'; 

但它不是保持當前URL的值...。?

它顯示:http://mywebsite.com/index.php?&t=col

相反的:http://mywebsite.com/index.php?y=2011&t=col(不守$變量y)

我還需要找到一種方法,通過任何鏈接來更改$ y和$ T變量,所以我可以輕鬆地將其更改爲2010年或2009年,同時保持當前的$ t變量。

在此先感謝!

這裏是我從這個偉大的幫助中想出來的!

$url = "http://www.mywebsite/index.php?"; 
foreach($_GET as $key=>$val){ 
$url.="$key=$val&"; } 
echo '<a href="' . htmlspecialchars($url . 't=col') . '">College</a>'; 
+0

PHP_SELF不包含查詢字符串。您必須使用$ _GET重新構建查詢字符串並自己添加它。 –

回答

3

正如您所知,所有通過URL傳遞的變量都在$ _GET數組中可用。 因此,你可以設置你的鏈接像這樣的東西:

$url = "http://site.com/index.php?"; 
foreach($_GET as $key=>$val){ 
$url.="$key=$val&"; } 

這給了你還檢查某些變量和消除一些可能會被用戶惡意添加的好處。它也允許你相應地改變你的變量,因爲$ key將包含t或y

+0

這是我認爲的正確方向,你可以在for循環中放置y變量和t變量邏輯。 –

+0

這就是它!大!非常感謝! – eberswine

0
echo '<a href="$currentPage.?y=$_GET[\'y\'].&t=col">College</a>'; 
+0

這對XSS攻擊非常脆弱。 – erisco

+0

我認爲OP會防止這種情況發生。 – Phil

1

我不認爲你的問題實際上與URL操作有關。這主要是一個基本的PHP語法問題。在PHP中,單引號和雙引號字符串的處理方式不同。在雙引號那些你得到的變量插值,有些東西你不要在其他類型的獲得:

$foo = 'world!'; 
echo "Hello, $foo"; // Prints «Hello, world!» 
echo 'Hello, $foo'; // Prints «Hello, $foo» 

然而,這是所有雙引號字符串都特別。您不能插入任意PHP代碼在字符串中得到它執行:

echo "Size: strlen($foo) . 'chars'"; // Will *not* print «Size: 6 chars» 

你可以在PHP手冊的Strings章充分借鑑。

此外,還可以連接具有.操作字符串(見String Operators):

echo 'Hello, ' . $foo; // Prints «Hello, world!» 

一旦你熟悉了這些概念,你會發現它很容易做到。

+0

我不認爲這是eberswine的問題。 – erisco

+0

@erisco,那麼他爲什麼期待這個工作:'回聲'College';' –

+0

他應該確保正確的引號正在使用,是的,但也請注意,他看到'http://mywebsite.com/ index.php?&t = col'作爲輸出。無論哪種方式,他都會遇到'$ _SERVER ['PHP_SELF']'不包含查詢字符串的問題。 – erisco

1

您可以使用http_build_query()函數來重建您的查詢,添加所需的額外參數。

// build the query data 
$queryData = array(
    'y' => $_GET['y'], 
    't' => 'col', 
); 
// get the query string 
$queryString = http_build_query($queryData); 

// ... somewhere later in the script 
// we remember to escape HTML characters. as long as $currentPage has characters 
// and cannot be manipulated by the client (which, if it is coming from PHP_SELF, it 
// cannot be afaik), we should be safe 
echo '<a href="' . htmlspecialchars($currentPage . $queryString) . '">College</a>';