2010-08-31 118 views
0

在我的if語句的其餘部分之前,我正在嘗試if isset($_GET['whatever'])...。 E_NOTICE錯誤的方式來方便的關閉和$_POST變量我在我的init腳本的解決方案..

$POST = (is_array($_POST) && count($_POST) > 0); 

我覺得這有助於自發布腳本看起來很乾淨。

if ($POST) { 
    // now do something with $_POST... 
} 

我不知道如果你不知道如何動態地做到這一點,如果你不知道關鍵是什麼?任何人都可以幫助找到$_GET變量的類似解決方案嗎?

編輯:

我只是想if ($_GET['whatever'] == "whatever");如果它沒有設置,沒有E_NOTICE錯誤返回false。

編輯:

對不起,如果我不清楚我在尋找一個解決方案$_GET$_POST - 我只是在用$_POST作爲我希望達到什麼樣的一個例子。

+0

你的問題不清楚,你期待什麼? – Sarfraz 2010-08-31 19:18:01

回答

10

有時我使用全局GET功能:

function GET($key, $default = null) { 
    return isset($_GET[$key]) ? $_GET[$key] : $default; 
} 
+0

真棒..謝謝!這會使代碼更容易閱讀。 – Mikey1980 2010-08-31 19:43:40

2

所有這些混亂的主要思想很簡單:程序中的每個變量都應在使用前初始化。
因此,您可以做的最好的做法是將所有變量集中放置在腳本的最頂端。

但也有一些不同的情況。對於您發佈的情況下,你需要這些都不但

if ($_SERVER['REQUEST_METHOD'] == "POST") 
+0

對不起,我可能不清楚..我有一個$ _POST的解決方案,但需要一個$ _GET – Mikey1980 2010-08-31 19:26:36

+0

+1'程序中的每個變量都應該在使用前初始化。'# – robertbasic 2010-08-31 19:33:55

+0

@ Mikey1980實際上你沒有[適當的]解決方案$ _POST,你沒有與$ _GET數組本身[相同]的問題,因爲它已經總是定義和數組。 – 2010-08-31 19:34:48

1

你可以讓一個函數來爲你做這個。

function getVar($item){ 
    return isset($_GET[$item]) ? $_GET[$item] : ''; 
} 

然後你可以做if(getVar('whatever') == "whatever")

-1

當編寫這些類型的腳本,我通常會做這樣的事情在頂部:

$submitted = isset($_POST['submit']) ? true : false; 
$username = isset($_POST['username']) ? $_POST['username'] : null; 
$password = isset($_POST['password']) ? $_POST['password'] : null; 
(etc.) 

然後,測試值時,它看起來是這樣的:

if ($submitted) 
{ 
    if ($username && $password) 
    { 
     // do stuff with username and password including testing their values 
    } 
} 

似乎爲我工作得很好。

+0

您正在編寫一行代碼來檢查每個變量,無論它是否設置,爲什麼不調用其他人提示的函數? – 2010-09-04 08:16:33

0

簡單的我想你想檢查是否獲取值設置,那麼需要做下一步否則做不同的

我喜歡的第一個答案,但需要檢查這就是它是否適合你

如果(isset($ _ GET [ '什麼']){ 如果($ _ GET [ '什麼'] == 「無所謂」); {// 做其他 } 其他{// 做其他 } }

希望它m唉幫助,如果我認爲是你的需要

1

這裏有兩種方法。

/* 
* Makes any request keys into variables of the same name 
*/ 
foreach($_GET AS $key => $value) { 
    ${$key} = ($value); 
}  

//Assuming a input key of $_GET['whatever'] 
echo $whatever; 

/* 
* Casting to an object 
*/ 
$get = (object) $_GET; 

//Assuming a input key of $_GET['whatever'] 
echo $get->whatever 

,我能想到的第三種選擇是使$ _GET到自己的類。 PHP重載是這樣做的方便技巧。

http://php.net/manual/en/language.oop5.overloading.php

我不覺得自己寫了一個例子展示了這一點。 :)

+0

我一直想知道如何動態創建變量名..真棒作業 – Mikey1980 2010-09-01 13:49:24

+0

謝謝!我還建議在第一個示例中,您從foreach內部調用某種清理類,而在第二個示例中,您只需將其轉換爲對象即可。 – LLBBL 2010-09-01 19:00:46

2

已經回答了,但因爲它沒有提到,也嘗試:

$var = filter_input(INPUT_GET, 'varname'); 

這將返回null,如果它不存在,沒有惱人的陣列通知,並篩選出潛在的壞東西以各種方式。另請參見:http://www.php.net/filter

+0

謝謝,我將不得不與那個人一起玩一點不清楚我將如何在if語句中使用它..無論如何,我很好奇學習fn – Mikey1980 2010-09-01 12:55:27

0
  • 沒有通知

    $key = &$_POST['key'];

這種方式(內部功能)是depracted,並顯示錯誤:

function f($s){} 
f(&$_POST['key']); 

Fatal error: Call-time pass-by-reference has been removed