2017-01-02 151 views
0

我有一個PHP和HTML代碼。我有4個電子郵件發送輸入(名稱,主題,消息),我有異常驗證。現在我的編碼工作:如果第一個輸入是空的,然後顯示錯誤消息,如果第二個輸入是空的(並且第一個不是空的)顯示錯誤消息,等等...我想顯示每個錯誤消息,如果我點擊發送不是一個一個用php例外。任何想法如何解決它?PHP異常錯誤消息

有例外處理的PHP代碼:

if (isset($_POST['Send'])) { 
    class emailException extends Exception {} 
    class email_validException extends Exception {} 
    class subjectException extends Exception {} 
    class messageException extends Exception {} 

    $name = $_POST['name']; 
    $to = $_POST['to']; 
    $subject = $_POST['subject']; 
    $message = $_POST['message']; 
    try { 
     if($name == "") { 
      throw new Exception("Töltsd ki a mezőt(1)!"); 
     } 
     if($to == "") { 
      throw new emailException("Töltsd ki a mezőt(2)!"); 
     } 
     // Email cim ellenőrzése 
     if (!filter_var($to, FILTER_VALIDATE_EMAIL)) { 
      throw new email_validException("Hibás email cím!"); 
     } 
     if($subject == "") { 
      throw new subjectException("Töltsd ki a mezőt(3)!"); 
     } 
     if($message == "") { 
      throw new messageException("Töltsd ki a mezőt(4)!"); 
     } 
     if ($name != "" && $to != "" && $subject != "") { 
      echo "Email elküldve"; 
      $name = ""; 
      $to = ""; 
      $subject = ""; 
      $message = ""; 
     } 
    } 
    catch(emailException $e1) { 
     $error_mail = $e1->getMessage(); 
    } 
    catch(email_validException $e1) { 
     $error_mail_valid = $e1->getMessage(); 
    } 
    catch(subjectException $e2) { 
     $error_subj = $e2->getMessage(); 
    } 
    catch(messageException $e3) { 
     $error_message = $e3->getMessage(); 
    } 
    catch(Exception $e) { 
     $error = $e->getMessage(); 
    } 
} 

HTML輸入表單:

<form name="myForm" onsubmit="//return validateForm();" method="post" action="feladat9.php"> 
    <p><input type="text" name="name" placeholder="Név" value="<?php echo $name; ?>"><label id="error_name"><?php echo $error ?></label></p> 
    <p><input type="text" name="to" placeholder="Címzett" value="<?php echo $to; ?>"><label id="error_email"><?php 
      echo "$error_mail $error_mail_valid";?></label></p> 
    <p><input type="text" name="subject" placeholder="Tárgy" value="<?php echo $subject; ?>"><label id="error_subject"><?php echo $error_subj ?></label></p> 
    <p><input type="text" name="message" placeholder="Üzenet" value="<?php echo $message; ?>"><label id="error_message"></label><?php echo $error_message ?></p> 
    <input type="submit" value="Send" id="send" name="Send"> 
</form> 
+2

將異常消息保存在數組中,而不是立即拋出異常,在檢查完條件時拋出所有異常 – funsholaniyi

+0

'$ name = isset($ _ POST ['name'])? $ _POST ['name']:「」; $ to = isset($ _ POST ['to'])? $ _POST ['to']:「」; $ subject = isset($ _ POST ['subject'])? $ _POST ['subject']:「」; $ message = isset($ _ POST ['message'])? $ _POST ['message']:「」;' – Eugen

+0

@Eugen在哪裏插入這段代碼? –

回答

1

如果你想顯示所有的錯誤,你不應該使用「拋出新的異常」的概念,因爲異常停止下一步執行跳轉到捕捉部分。

你可以嘗試這樣的:

if(isset($_POST['Send'])) 
{ 

    $name = $_POST['name']; 
    $to = $_POST['to']; 
    $subject = $_POST['subject']; 
    $message = $_POST['message']; 

    $errors = array(); 

    if($name == "") 
    { 
     $errors['error'] = "Töltsd ki a mezőt(1)!"; 
    } 
    if($to == "") 
    { 
     $errors['error_mail'] = "Töltsd ki a mezőt(2)!"; 
    } 
    // Email cim ellenőrzése 
    if (!filter_var($to, FILTER_VALIDATE_EMAIL)) 
    { 
      $errors['error_mail_valid'] = "Hibás email cím!"; 
    } 
    if($subject == "") 
    { 

     $errors['error_subj'] = "Töltsd ki a mezőt(3)!"; 
    } 
    if($message == "") 
    { 
     $errors['error_message'] = "Töltsd ki a mezőt(4)!"; 
    } 
    if ($name != "" && $to != "" && $subject != "") 
    { 
     echo "Email elküldve"; 

     $name = ""; 
     $to = ""; 
     $subject = ""; 
     $message = ""; 
    } 

} 

和$錯誤變量可以被用來顯示錯誤回報。

+0

我需要使用異常 –

+0

異常停止下一步執行跳轉到catch節。 所以如果有空的$ name的例外,那麼其他代碼執行將停止並跳轉到catch部分。所以使用異常,你不能一次顯示所有的錯誤。 –

+0

所以我不能同時丟棄所有的錯誤信息?一些解決方案應該工作 –

相關問題