如何在表单提交之前停止php显示错误

时间:2016-08-01 18:45:17

标签: php html

我有一个发送webmail的PHP脚本:

<?php
session_start();

//error_reporting(0);
if(isset($_POST['submitted'])) {    
    $sendto   = "info@davfubgroup.com";
    $usermail = strip_tags($_POST['email']);
    $content  = nl2br($_POST['message']);
    $phone = strip_tags($_POST['phone']);
    $name = strip_tags($_POST['name']);

    $subject  = "New Feedback Message";
    $headers  = "From: " . strip_tags($usermail) . "\r\n";
    $headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html;charset=utf-8 \r\n";

    $msg  = "<html><body style='font-family:Arial,sans-serif;'>";
    $msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
    $msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
    $msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
    $msg .= "<p><strong>Name:</strong> ".$name."</p>\r\n";
    $msg .= "<p><strong>Phone:</strong> ".$phone."</p>\r\n";
    $msg .= "</body></html>";
}


if(@mail($sendto, $subject, $msg, $headers)) {
    $_SESSION['errormsg'] = "Mail Sent. Thank you we will contact you shortly.";
    echo '<center><p style="color:green">' . $_SESSION['errormsg']. '</p></center>';

} else {
    $_SESSION['errormsg'] = "Mail not Sent. Try Again.";
    echo '<center><p style="color:red">' . $_SESSION['errormsg']. '</p></center>';
}

上面的代码工作得很好但我的问题是显示&#34; Mail Sent。谢谢,我们会在加载页面时与您联系

这是我的HTML代码

<div class="col-md-6 contact-grid">
  <form name="submitted"action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="POST">
    <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
      <input type="text" id="name" required />
      <label>Name</label>
      <span></span> 
  </div>
  <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
      <input type="email" id="email"required />
      <label>Email</label>
      <span></span> 
  </div>
  <div class="styled-input wow slideInUp animated animated" data-wow-delay=".5s">
      <input type="tel" id="phone"required />
      <label>Phone</label>
      <span></span> 
  </div>
  <div class="styled-input wide wow slideInUp animated animated" data-wow-delay=".5s">
      <textarea id="message" required></textarea>
      <label>Message</label>
      <span></span>
  </div>
  <div class="send wow shake animated animated" data-wow-delay=".5s">
      <input name="submit" type="submit" value="Send" >
  </div>
</form>
</div>

所以我的问题是如何让它只在表单时显示错误信息 提交。请注意每件事都必须在一个页面上发生

1 个答案:

答案 0 :(得分:2)

您的mail()位于IF之外,用于检查某些数据是否已发送到表单。把它放在if里面。正确的代码缩进显示在第二个

<?php
session_start();

//error_reporting(0);
if(isset($_POST['submitted'])) {    
    $sendto   = "info@davfubgroup.com";
    $usermail = strip_tags($_POST['email']);
    $content  = nl2br($_POST['message']);
    $phone = strip_tags($_POST['phone']);
    $name = strip_tags($_POST['name']);

    $subject  = "New Feedback Message";
    $headers  = "From: " . strip_tags($usermail) . "\r\n";
    $headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html;charset=utf-8 \r\n";

    $msg  = "<html><body style='font-family:Arial,sans-serif;'>";
    $msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
    $msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
    $msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
    $msg .= "<p><strong>Name:</strong> ".$name."</p>\r\n";
    $msg .= "<p><strong>Phone:</strong> ".$phone."</p>\r\n";
    $msg .= "</body></html>";


    if(mail($sendto, $subject, $msg, $headers)) {
        $_SESSION['errormsg'] = "Mail Sent. Thank you we will contact you shortly.";
        echo '<center><p style="color:green">' . $_SESSION['errormsg']. '</p></center>';

    } else {
        $_SESSION['errormsg'] = "Mail not Sent. Try Again.";
        echo '<center><p style="color:red">' . $_SESSION['errormsg']. '</p></center>';
    }
}