0

My code below works and the form data is sent. However the code to reset the form and show/fade in the success message is not

<?php 
    require("class.phpmailer.php");
    $mail = new PHPMailer();

    // Validation without reload
    if ($_POST) { 

        // SMTP & Sendgrid settings
        $mail->IsSMTP();
        $mail->Host = "smtp.site.com";
        $mail->Port = "587";
        $mail->SMTPAuth = "true";   // Enable SMTP authentication
        $mail->Username = "username";  
        $mail->Password = "password";
        $mail->SMTPSecure = ''; // Enable encryption, 'ssl' also accepted

        // Email headers and body
        $mail->SetFrom("email@email.com");
        $mail->AddAddress("email@email.com");

        $mail->Subject  = "Message from site.com";
        $mail->WordWrap = 50;

        // Form fields
        $FirstName = $_POST['FirstName'];
        $LastName = $_POST['LastName'];
        $Company = $_POST['Company'];
        $JobTitle = $_POST['JobTitle'];
        $Email = $_POST['Email'];
        $Phone = $_POST['Phone'];
        $Message = $_POST['Message'];

        // Assign variables to body. ALWAYS after the variables are assigned.
        $mail->Body     = "You have a new message from your contact form on ShipmentHQ.com \n First Name: $FirstName \n Last Name: $LastName \n Company: $Company \n Job Title: $JobTitle \n Email: $Email \n Phone: $Phone \n Message: $Message";

        if(!$mail->Send()) {
          alert('Thanks, your message has been sent.');
          echo 'Mailer error: ' . $mail->ErrorInfo;
        } 
        else {
          alert('Your message has not been sent.');
        }
    }
?>

What am I doing wrong with this? The if(!$mail->Send()) { from the php doesnt even work, is there a way to refactor it so I don't need the javascript?

<script> 
    $(document).ready(function() {
        $("#ContactForm").validate({
            submitHandler: function() {
                //submit the form
                $.post("<?php echo $_SERVER[PHP_SELF]; ?>", //post
                    $("#ContactForm").serialize(), 
                    function(data){
                      //if message is sent
                      if (data == 'Sent') {
                        $("#message").fadeIn(); //show confirmation message
                        $("#ContactForm")[0].reset(); //reset fields
                    }
                    //
                });
                return false; //don't let the page refresh on submit.
            }
        }); //validate the form
    });
    </script> 
4

1 回答 1

0

你需要alert像这样附上你的[查看<script>它周围的标签]

第二件事是..您没有正确解释消息,if(!$mail->Send())它应该说Your message has not been sent.但是您正在以另一种方式进行。[别担心我已经为你修改了;)]

 if(!$mail->Send())
        {
          echo "<script>alert('Your message has not been sent.')</script>";
          echo 'Mailer error: ' . $mail->ErrorInfo;
        } 
 else
        {
     echo "<script>alert('Thanks, your message has been sent.')</script>";
        }
于 2013-11-08T19:11:07.020 回答