2010-10-10 93 views
3

如何防止PHP返回一個未定義的變量錯誤每次我嘗試檢查一個變量,如果它有內容並且某個變量尚未使用?在我以前的設置中,即使我還沒有放入任何東西,我也可以檢查$ _POST ['email']。它只是返回空白或空的結果。這就是我希望我的PHP設置能夠工作的原因,但對於我的生活,我似乎無法找到如何配置它。 :(

例:

<?php 
if ($_POST['info'] != '') { 
    // do some stuff 
} 
?> 
<form method="post"> 
<input type="text" name="info" /> 
<input type="submit" /> 
</form> 

當您使用上面的腳本在一個單一的PHP頁面和我的當前設置運行它,它返回一個未定義的變量錯誤在我以前的設置,該腳本工作就像一個魅力。任何人都可以分享一些光線進入我的這個問題。如果您需要進一步的細節,只是說出來,我會嘗試更多的詳細信息添加到這個職位。

知道有關isset( ) ch ecking,但我不想在我的所有腳本中使用它。我想要它不是約束變量

+0

相關:http://stackoverflow.com/questions/1960509/isset-and-empty-make-code -gly – 2010-10-10 18:58:14

+1

這不是一個錯誤。這是一個E_NOTICE。許多貨主沒有意識到這一點,但這是一個調試信息。 'error_reporting(E_ALL)'返回許多這樣的冗餘調試通知,所以關閉它。當你調試你的代碼時,一次啓用它。請勿使用isset對其進行混淆,因爲這可能會在您需要時阻礙追蹤。順便說一下,'if($ _POST ['info'])'就足夠了。 http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting – mario 2010-10-10 19:13:55

回答

3

最有可能它不是一個錯誤,而是一個警告。如果需要,您可以將PHP設置爲不顯示錯誤/警告。只需添加到您的代碼的開頭:

ini_set('display_errors', 0); 

Altough,我建議你不要偷懶,讓你的代碼沒有任何顯示任何錯誤,警告,通知,防患於未然。

而且做你想做的事的首選方法是

<?php 
if (isset($_POST['info'])) { 
    // do some stuff 
} 
?> 
<form method="post"> 
<input type="text" name="info" /> 
<input type="submit" /> 
</form> 
+1

或者實際檢查你是否正在處理POST:'if($ _SERVER ['REQUEST_METHOD'] ==' POST'){...}' – 2010-10-11 00:02:51

3

您可以使用empty功能,如果變量未設置或爲空(即零長度字符串,返回true,0 ,NULL,FALSE等):

if(!empty($_POST['variable'])){ 
    /* ... */ 
} 

這是幾乎相同的測試作爲一個你現在正在做的,但它也將返回false(不運行塊),沒有警告,當該變量未設置。

0

我有時做了以下做了對比,並避免對未設定的變量警告:

if(@$_POST['variable'] == 'value') 
{ 
    ... 
} 

雖然PHP仍然會調用自定義錯誤處理程序,所以也許我需要重新考慮這一策略。

0

您是否使用自己的服務器?如果是這樣,您可以通過PHP.INI更改error_reporting。線上方

「error_reporting = E_ALL;」 (可能不是E_ALL)將會有一個小文檔解釋您可以顯示哪種類型的錯誤。

如果您使用的是來自虛擬主機公司的共享服務器,我相信有些人可能會在您的虛擬主機帳戶CP下提供快速的PHP管理。

我希望我幫助;/

PS-如果你有自己的服務器,你必須重新啓動Apache。我不知道它是如何在做Ubunto(如果這是你使用的是什麼),但在CentOS是:

/sbin/service httpd restart 
0

變量將作爲您發送的form總是被設置爲長。

所以它更好地檢查變量不是empty

if(!empty($_POST['var']))

+1

取決於輸入類型。有些類型,如複選框,如果未被選中或以某種其他方式進行交互以提供價值,則不會在提交提交中發送。 – Geowil 2015-08-02 23:49:54

0

如果你想設置$ _ POST瓦爾,有一大堆的這些說法真的雜波你的代碼:

if (isset($_POST['info'])) 
    $info = $_POST['info']; 
... etc.... 

這個怎麼樣?

function setPostVar(&$v) { 
    $trace = debug_backtrace(); 
    $vLine = file(__FILE__); 
    $fLine = $vLine[ $trace[0]['line'] - 1 ]; 
    preg_match("#\\$(\w+)#", $fLine, $match); 
    eval("\$v = isset(\$_POST[\"$match[1]\"])?\$_POST[\"$match[1]\"]:'';"); 
} 

現在,只要你有類似的POST快樂命名變量瓦爾

ie. $Foo = $_POST['Foo']; 

你可以這樣做:

setPostVar($Foo); // equivalent to if(isset($_POST['Foo']) $Foo = $_POST['Foo']; 
setPostVar($Bar); // ditto 
setPostVar($Baz); // ditto