2012-09-11 40 views
-1

這可能是一個很簡單的問題,但我不有什麼錯誤的東西在這裏我做...排除多個GET變量是在PHP

要解釋清楚你,我已經設置低於真正簡單的例子:

<ul> 
    <li><a href="test.php?link1=true">Link 1</a></li> 
    <li><a href="test.php?link2=true">Link 2</a></li> 
    <li><a href="test.php?link3=true">Link 3</a></li> 
</ul> 

<?php 
    if(isset($_GET['link1'])) { 
     if(($_GET['link1']) == 'true') { 
      echo 'This Is Link 1'; 
     } 
    } 

    if(isset($_GET['link2'])) { 
     if(($_GET['link2']) == 'true') { 
      echo 'This Is Link 2'; 
     } 
    } 

    if(isset($_GET['link3'])) { 
     if(($_GET['link3']) == 'true') { 
      echo 'This Is Link 3'; 
     } 
    } 
?> 

這是一個test.php的頁面,在這裏我設置了3個不同的參數爲$ _GET,並顯示相應的內容,現在一切都運行完美,唯一的事情我不理解的是如何阻止這種網址說

如果用戶點擊鏈接1的網址將是:

http://localhost/test.php?link1=true 

而這個網址的輸出這是鏈接1

現在,如果我改變這個網址:

http://localhost/test.php?link3=true&link2=true&link1=true 

和輸出什麼,我得到的是這是鏈接這是鏈接2這是鏈接3

現在這是可以的,但它是非常惱人的,如果有人輸入這個和s ee的形式一個在另一個之下,任何方式我可以阻止這種篡改?

+1

你還可以如果,所以第一個聲明與正確的條件將被執行,其餘不是...... – Mathlight

+1

'elseif'呢? – Touki

+0

@TWCrap&Touki謝謝你的作品,我知道我錯過了一些非常小的東西 –

回答

3

使用elseif代替單獨的if語句。這樣,只有一個將被執行(第一個條件被發現爲真)。

<?php 
if(isset($_GET['link1'])) { 
    if(($_GET['link1']) == 'true') { 
     echo 'This Is Link 1'; 
    } 
} elseif(isset($_GET['link2'])) { 
    if(($_GET['link2']) == 'true') { 
     echo 'This Is Link 2'; 
    } 
} elseif(isset($_GET['link3'])) { 
    if(($_GET['link3']) == 'true') { 
     echo 'This Is Link 3'; 
    } 
} 
?> 
+0

我認爲使用elseif更合適。 http://php.net/manual/en/control-structures.elseif.php – Mark

+0

@TWCrap都能 –

+0

和我今天學到了另一件事:D – Mathlight

0

您正在使用連續if語句,所以所有的情況下都可以得到滿足,所有的輸出可以呼應。

if(isset($_GET['link3'])) { 
    if(($_GET['link3']) == 'true') { 
     echo 'This Is Link 3'; 
    } 
} 
// Nothing stops the next if working here. 

你可以尋找到一個開關語句來代替,並檢查第一個 - 或使用相同的?link=並在每個環節不同的數據傳遞給它,以便只有一個if語句都可以得到滿足。

2

更可靠的方法可能是爲每個鏈接使用相同的參數名稱,但會改變這些值。例如

<a href="test.php?link=link1">Link 1</a> 
<a href="test.php?link=link2">Link 2</a> 
<a href="test.php?link=link3">Link 3</a> 

這樣,即使有人在查詢字符串中指定了多個值,也只會使用其中的一個值。

+0

+1這是一個很好的替代方案在更廣泛的應用上。 – Mark

+0

尼斯1兄弟〜這實際上是一種完美的方式,更乾淨... +1 –