2014-09-23 79 views
0

我有一些代碼,本質上包含一個頁面特定的標題,應該只加載,如果只有一個GET參數定義在我的網址。檢查是否只定義了一個GET參數?

例如,如果我想報頭只顯示,如果在URL「thisonly」參數設置,如果網址是:

http://www.example.com?thisonly=w&thisone=q&thistwo=q&thisthree=q

以前我一直用這個代碼來檢查:

if((isset($_GET[thisonly])) && (!isset($_GET[thisone])) && (!isset($_GET[thistwo])) && (!isset($_GET[thisthree]))) { 
    // Run this code 
    } 

在上述情況下,代碼將不會運行,因爲這些其他參數已設置。

但是,這將是一個更新的麻煩,特別是如果我最終添加更多的參數,並且將不得不返回並添加到此代碼,以確保它們也沒有設置。

是否有某種方式來縮短下來到

if((isset($_GET[thisonly])) && (!isset($_GET[nothingelse]))) { 
    // Run this code 
    } 

例如相當於,如果「thisonly」是唯一的參數集合,並沒有其他的參數設置,然後運行該代碼?

任何幫助表示讚賞 - 謝謝!

+0

''[thisonly]'被視爲[**常量**](http://php.net/manual/en/language.constants.php)。把它們用引號括起來[['thisonly']'等等 – 2014-09-23 20:41:33

+0

就這樣,我明白了,我怎麼能得到不想要的結果呢?我沒看過你的鏈接,但我不知道爲什麼要把它放在引號vs不是..引號圍繞它意味着http://www.example.com?TeSt=true將註冊爲http:// www .example.com?test = true – vsdesign 2014-09-23 20:55:22

+0

在下面John的答案中試用不帶引號。如果能解決,那很好。如果它拋出一個錯誤,那麼你就會知道爲什麼。 – 2014-09-23 20:58:09

回答

2
if(count($_GET) === 1 && isset($_GET['thisonly'])) { 

此進行檢查,以查看是否$_GET是僅具有一個元素的數組,它是$_GET['thisonly']

+0

謝謝!!!!!! – vsdesign 2014-09-23 20:42:00

+0

一個快速跟進 - 我有一個「securevalue」函數(包括pregreplace,mysql_real_escape_string和trim),我已經單獨應用於每個$ _GET變量。這個邏輯是否可以保證所有的$ _GET值,而不是逐一保護它們:if(isset($ _GET)){securevalue($ _GET);} – vsdesign 2014-09-23 21:10:14

+0

有一些PHP函數可以用來將函數應用到一個數組。查看'array_map()'爲初學者。 – 2014-09-23 22:23:09

相關問題