2017-01-02 187 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

所以我不能同时丢弃所有的错误信息?一些解决方案应该工作 –