2012-09-20 182 views
2

Possible Duplicate:
PHP: 「Notice: Undefined variable」 and 「Notice: Undefined index」未定義指數

我學習PHP和我已經使用POST方法提交表單數據,我不知道爲什麼我得到這兩個錯誤:

Notice: Undefined index: search_for in \xampp\htdocs\samir\indexes.php on line 5

Notice: Undefined index: replace_with in \xampp\htdocs\samir\indexes.php on line 6

if(isset($_POST['user_input']) && isset($_POST['search_for']) && isset($_POST['replace_with']) 
    && !empty($_POST['user_input']) && !empty($_POST['search_for']) && !empty($_POST['replace_with'])) 
    echo $user_input = $_POST['user_input']; 
    echo $search_for = $_POST['search_for']; 
    echo $replace_with = $_POST['replace_with']; 
+2

某些代碼可能? –

+1

你能告訴我們你的代碼嗎? –

+0

我們需要看你的代碼! – simonlchilds

回答

1

當使用$ _POST$ _GET從表單中檢索變量時,可能會遇到此錯誤:

注意:未定義索引的字段'正在執行的'php'文件路徑'當前行'

由於您的PHP錯誤報告設置而出現此錯誤。通常,當你的變量沒有正確設置時出現。有兩種方法可以解決這個問題:

1.檢查在使用前是否設置了$_POST['action']$GET['action']。例如:

if (!isset($_POST['action'])) {//your pure stuff }  

if (!isset($_GET['action'])) {//your pure stuff } 

2.禁止通知警告

通知警告可以通過在你的php.ini改變使用error_reporting變量被抑制。使用error_reporting可以設置爲顯示除了那些通知所有錯誤和編碼標準警告:使用error_reporting = E_ALL &〜E_NOTICE

<?php error_reporting (E_ALL^E_NOTICE); ?> 

,但我個人的建議是解決了警告,而不是使用2方法


更新問題答案

你還沒有添加封閉括號{}所以只有一個行,如果以後會考慮在我F主體和您的第二和第三回聲將被執行是否結果你如果是真的還是假的

應該

if(isset($_POST['user_input']) && isset($_POST['search_for']) 
    && isset($_POST['replace_with']) && !empty($_POST['user_input']) 
    && !empty($_POST['search_for']) && !empty($_POST['replace_with'])) { 
    echo $user_input = $_POST['user_input']; 
    echo $search_for = $_POST['search_for']; 
    echo $replace_with = $_POST['replace_with']; 
} 
3

你忘了添加封閉括號內爲您if聲明,就像這樣:

if(isset($_POST['user_input']) && isset($_POST['search_for']) 
    && isset($_POST['replace_with']) && !empty($_POST['user_input']) 
    && !empty($_POST['search_for']) && !empty($_POST['replace_with'])) { 
    echo $user_input = $_POST['user_input']; 
    echo $search_for = $_POST['search_for']; 
    echo $replace_with = $_POST['replace_with']; 
} 

上面的代碼應該做你想做的。

+1

只是爲了澄清,沒有括號括起來,只有'if'語句後的第一個命令被視爲有條件的 - 所以你的第二個和第三個回聲將被執行,無論你的'if'的結果是真還是假 – Basic

+0

非常感謝非常有幫助 – user1481225

+0

不客氣! :-) – Nelson

1

如果您在發佈表格之前使用變量,例如$var = $_POST['var']; 它將返回一個錯誤。

最好檢查提交按鈕是否被按下。

例子:

if(isset($_POST['submit'])){ 
    //form has been posted 
} 

然後,我將確保所有的變量後,你將使用設置,如果沒有拋出異常。

例子:

$error = false; 
//['submit'] is the button used to post the form. 
if(isset($_POST['submit'])){ 
    $testVar = (isset($_POST['testVar']) && strlen($_POST['testVar']) > 0 ? $_POST : $error[] = 'Please enter something.'); 

    if(!$error){ 
     //Submit for 
    } 
    else{ 
     foreach($error as $e){ 
      echo $e; 
     } 
    } 
}