2013-10-31 74 views
0

PHP代碼錯誤。仍然顯示我這個錯誤「未定義的索引:操作」 在PHP函數中$ action = $ _REQUEST ['action'];你能幫我找出解決方案嗎?HTML/PHP表單,錯誤 - 未定義索引:PHP代碼中的操作

謝謝

完整的代碼在這裏:

<?php 
    $action = $_REQUEST['action']; 
    if ($action== "") { 
?> 
    <form action="" method="POST" > 
     Meno*:<br> 
     <input name="name" type="text" value="" size="30"/><br> 
     Email*:<br> 
     <input name="email" type="text" value="" size="30"/><br> 
     Vaša otázka*:<br> 
     <textarea name="message" rows="11" cols="80"></textarea><br> 
     <input type="submit" value="Posla&#357; email"/> 
    </form> 
<?php 
    } 
    else    /* send the submitted data */ 
    { 
     $name = $_REQUEST['name']; 
     $email = $_REQUEST['email']; 
     $message = $_REQUEST['message']; 
     if (($name=="") || ($email=="") || ($message=="")) { 
      echo "Všetky políčka je potrebné vyplniť. Napíšte <a href=\"\"> otázku </a> ešte raz."; 
     } else {   
      $from = "From: $name<$email>\r\nReturn-path: $email"; 
      $subject = "Message sent using your contact form"; 
      mail("[email protected]", $subject, $message, $from); 
      echo "Mail poslaný!"; 
     } 
    } 
?> 
+0

我認爲,這意味着,有沒有$ _REQUEST [「行動」]正在取得或receive..what應是你行動的價值,它來自哪裏? – Vainglory07

回答

0

您試圖訪問一個名爲動作的表單元素,但目前還沒有這樣的元素。如果你想看看劇本是由GET調用(以目前的形式)或POST(處理表單)嘗試使用類似:

if($_SERVER['REQUEST_METHOD'] == 'GET')) 

,代替目前的兩行:

$action = $_REQUEST['action']; 
    if ($action== "") 
+0

窗體方法是POST'

' – Alsemany

+0

@Alsemany - 這是正確的,但OP似乎試圖使用相同的腳本來響應GET,方法是返回HTML形成。測試在原始代碼中暗示的邏輯是「如果這不是發佈表單」,在這種情況下,表單將被返回。正如我所描述的那樣,測試的適當方法。 – bitfiddler

1

發生此錯誤是因爲沒有名爲'action'的表單元素。 如果表單提交,請嘗試測試。只需添加一個名稱來提交按鈕。

<input type="submit" value="Posla&#357; email" name="send" /> 

然後測試是否被點擊它來發送形式:

<?php 
     if (!isset($_POST['send'])) { 
      // HTML code to display form 
     } else { 
      // send the submitted data 
     } 

?> 
2

替換此行:

$action = $_REQUEST['action']; 

與這一個:

$action = (array_key_exists('action', $_REQUEST) ? $_REQUEST['action'] : ""); 

而且,如其他人指出,沒有行動變異在您的表單中定義。我認爲您試圖從<form>標記中捕獲操作參數,但實際上並未將其提交給服務器;它只是告訴瀏覽器在哪裏發送POST數據。因此,請不要尋找$_REQUEST['action'],請嘗試查找$_REQUEST['name']或您的表單中實際定義的其他字段之一。

0

裏面的動作不會在$ _REQUEST或任何其他變量的值。檢查表單是否已提交的正確方法是檢查$ _SERVER [「REQUEST_METHOD」]變量。尋找'GET'或'POST'。在你的榜樣,你要尋找的變量「POST」

<?php 
if($_SERVER['REQUEST_METHOD']=="POST"){ 
    //yourhtml 
} 
else    /* send the submitted data */ 
{ 
    $name = $_REQUEST['name']; 
    $email = $_REQUEST['email']; 
    $message = $_REQUEST['message']; 
    if (($name=="") || ($email=="") || ($message=="")) { 
     echo "Všetky políčka je potrebné vyplniť. Napíšte <a href=\"\"> otázku </a> ešte raz."; 
    } else {   
     $from = "From: $name<$email>\r\nReturn-path: $email"; 
     $subject = "Message sent using your contact form"; 
     mail("[email protected]", $subject, $message, $from); 
     echo "Mail poslaný!"; 
    } 
} 

?>