2016-03-26 7 views
1

PHP betiğini kullanarak php numaralı telefondan basit bir iletişim formu oluşturdum. E-posta göndermeye yönelik başarısız bir girişimde hata iletimin görüntülenip görüntülenmeyeceğini test ediyordum. Hata mesajını zorlamak için mail()'a iletilen $emailTo değişkenimi boş bıraktım, ancak ne yazık ki görüntülenmiyor. $emailTo'un geçerli bir e-posta içerip içermediğine bakılmaksızın $successMessage görüntüler.E-posta gönderilmediyse kullanıcıya bir hata mesajı gösterebilir -

Başarılı bir şekilde gönderilen bir e-postayı test etmek ve $error mesajını görüntülemek için daha iyi bir yol var mı? aşağıdaki gibi

Kod

<?php 

    $error = '';  
    if ($_POST) { 

     if(!$_POST['email']) { 
      $error.= 'The email address field is required.<br>'; 
     } 

     if(!$_POST['subject']) { 
      $error.= 'The subject field is required.<br>'; 
     } 

     if(!$_POST['content']) { 
      $error.= 'The message field is required.<br>'; 
     } 

     //Validation for email (Check if it exsists and if its valid) 
     if (($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) { 
      $error .= '<p>The email address entered is invalid</p><br>'; 
     } 

     //If there are errors... 
     if($error != '') { 
      $error = '<div class="alert alert-danger" role="alert"><p><strong>Oh snap! There were error(s) in your form:</strong></p>'.$error. '</div>'; 

     //If there are no errors...` 
     } else { 
      $emailTo = ''; //!!!!!Left blank on purpose to test error message!!!!! 
      $subject = $_POST['subject']; 
      $content = $_POST['content']; 
      $headers = "From: ".$_POST['email']; 

      //If all fields are filled in, post successMessage to html 
      if(mail($emailTo, $subject, $content, $headers)) { 
       $successMessage = '<div class="alert alert-success" role="alert"><strong>Your message was sent, I\'ll get back to you soon!</strong></div>'; 

      //If email couldn't get through 
      //!!!!!This is the message I cannot get to display!!!! 
      } else { 
       $error = '<div class="alert alert-danger" role="alert"><strong><p>Oh dang! Your message couldn\'t be sent - please try again later.</strong><div>'; 
      } 
     } 
    } 



?> 

    <!DOCTYPE html> 
    <html lang="en"> 

    <head> 
     <!-- Required meta tags always come first --> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
     <meta http-equiv="x-ua-compatible" content="ie=edge"> 

     <!-- Bootstrap CSS --> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous"> 
    </head> 

    <body> 

     <div class="container"> 
      <h1>Contact me!</h1> 


      <div id="error"><?php echo $error.$successMessage; ?></div> 

      <form method="post"> 
       <!--EMAIL ADDRESS--> 
       <fieldset class="form-group"> 
        <label for="email">Email address:</label> 
        <input type="email" class="form-control" id="email" name="email" placeholder="Enter your email address"> 
        <small class="text-muted">We'll never share your email with anyone else.</small> 
       </fieldset> 

       <!--SUBJECT--> 
       <fieldset class="form-group"> 
        <label for="subject">Subject:</label> 
        <input type="text" class="form-control" id="subject" name="subject" placeholder=""> 
       </fieldset> 

       <!--MESSAGE--> 
       <fieldset class="form-group"> 
        <label for="content">Your message:</label> 
        <textarea class="form-control" id="content" name="content" rows="3"></textarea> 
       </fieldset> 

       <button type="submit" id="submit" class="btn btn-primary">Submit</button> 
      </form> 
     </div> 

    <!-- jQuery first, then Bootstrap JS. --> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" integrity="sha384-vZ2WRJMwsjRMW/8U7i6PWi6AlO1L79snBrmgiDpgIWJ82z8eA5lenwvxbMV1PAh7" crossorigin="anonymous"></script> 

    </body> 

    </html> 
herhangi bir yardım için şimdiden teşekkürler ... olduğunu! daha kullanışlı olduğu için yerine bitiştirme

cevap

1

, I) (empty tercih:

if (isset($_POST)) { 

    if(empty($_POST['email'])) { 
     $error = 'The email address field is required.<br>'; 
    }elseif(empty($_POST['subject'])) { 
     $error = 'The subject field is required.<br>'; 
    }elseif(empty($_POST['content'])) { 
     $error = 'The message field is required.<br>'; 
    }elseif (empty($_POST['email']) || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === FALSE) { 
     $error = '<p>The email address entered is invalid</p><br>'; 
    }else { 
     $emailTo = ''; //!!!!!Left blank on purpose to test error message!!!!! 
     $subject = $_POST['subject']; 
     $content = $_POST['content']; 
     $headers = "From: ".$_POST['email']; 

     //If all fields are filled in, post successMessage to html 
     if(mail($emailTo, $subject, $content, $headers)) { 
      $successMessage = '<div class="alert alert-success" role="alert"> 
     <strong>Your message was sent, I\'ll get back to you soon!</strong></div>'; 

     //If email couldn't get through 
     //!!!!!This is the message I cannot get to display!!!! 
     } else { 
      $error = '<div class="alert alert-danger" role="alert"> 
      <strong><p>Oh dang! Your message couldn\'t be sent - 
         please try again later.</strong><div>'; 
     } 
    } 
} 

Ayrıca empty() kullanarak başarı mesajı ve hata mesajını kontrol edebilirsiniz:

if(!empty($error)){ 
     echo $error; 
     }elseif(!empty($successMessage)){ 
      echo $successMessage; 
     }else{} 
    ; ?> 

buna dikkat etmek önemlidir posta teslim için kabul edildiğinden, postaların hedeflenen hedefe ulaşacağı anlamına gelmez.