Broken Ajax PHP Contact Form

I am having problems with php contact form. He sent blank emails after fixing this issue, now it doesn't send email, but instead redirects me to a blank page with "sent" message (which was encoded in send-email.php ..

It was supposed to display a success message without leaving the active page using AJAX. don't know what happened. any help is appreciated. Best regards, this is the head part;

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <style>
.error { display:none; }
.success { display:none; }
</style>

<script type="text/javascript">
    $(document).ready(function(){
        $('#send_message').submit(function(e){
            e.preventDefault();
            var error = false;
            var name = $('#name').val();
            var email = $('#email').val();
            var message = $('#message').val();
            if(name.length == 0){
                var error = true;
                $('#name_error').fadeIn(500);
            } else {
                $('#name_error').fadeOut(500);
            }
            if(email.length == 0 || email.indexOf('@') == '-1'){
                var error = true;
                $('#email_error').fadeIn(500);
            } else {
                $('#email_error').fadeOut(500);
            }
            if(message.length == 0){
                var error = true;
                $('#message_error').fadeIn(500);
            } else {
                $('#message_error').fadeOut(500);
            } if(error == false){
                $('#cf_submit_p').attr({'disabled' : 'true', 'value' : 'Gönderiliyor...' });
                $.post("send_email.php", $("#contact_form").serialize(),function(result){
                    if(result == 'sent'){
                        $('#cf_submit_p').remove();
                        $('#mail_success').fadeIn(500);
                    } else {
                        $('#mail_fail').fadeIn(500);
                        $('#cf_submit_p').removeAttr('disabled').attr('value', 'Gönder');
                    }
                });
            }
        });
    });
</script>

      

this is a section of the body;

<div class="container-fluid">
                        <p id="returnmessage"></p>
                        <form action="send_email.php" id="contact_form" method="post">
                            <h2 style="font-size:14px;line-height:18px;font-weight:600;padding-bottom:0;">Bize Yazın</h2>
                            <ul class="contactform">
                                <li>
                                    <div id="name_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen adınızı giriniz.</div>
                                    <span class="contact-input-icon" style="text-align:left"><i class="fa fa-user"></i></span>
                                    <div class="input-field">
                                        <input type="text" style="border:1px solid rgba(220,220,220,0.5)" name="name" id="name" value="" class="required requiredField" placeholder="Ad Soyad"/>
                                    </div>
                                </li>
                                <li>
                                    <div id="email_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen eposta adresinizi giriniz.</div>
                                    <span class="contact-input-icon"><i class="fa fa-envelope"></i></span>
                                    <div class="input-field">
                                        <input type="email" style="border:1px solid rgba(220,220,220,0.5)" name="email" id="email" value="" class="required requiredField email" placeholder="Eposta"/>
                                    </div>
                                </li>
                                <li class="textarea">
                                    <div id="message_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen mesajınızı giriniz.</div>
                                    <span class="contact-input-icon"><i class="fa fa-pencil"></i></span>
                                    <div class="input-field">
                                        <textarea name="message" style="border:1px solid rgba(220,220,220,0.5)" id="message" rows="6" cols="20" class="required requiredField" placeholder="Mesajınız"></textarea>
                                    </div>
                                    <div id="mail_success" class="success" style="color:#00CC00"><i class="fa fa-check"></i> İlginiz için teşekkürler. En kısa sürede sizinle irtibata geçeceğiz.</div>
                                    <div id="mail_fail" class="error" style="color:#aa3939"><i class="fa fa-times"></i> Üzgünüz, mesajınız iletilemedi. Daha sonra lütfen tekrar deneyin.</div>
                                </li>
                                <li class="buttons">
                                    <div id="cf_submit_p">
                                    <input type="hidden" style="border:1px solid rgba(220,220,220,0.5)" name="submitted" id="submitted" value="true" />
                                    <button type="submit" style="border:1px solid #3f97cf" class="button" id="send_message"><i class="fa fa-paper-plane-o" style="font-size:20px;color:#3f97cf"></i></button>
                                    </div>
                                </li>
                            </ul>
                        </form>
                    </div> <!--end container-fluid-->

      

send_email.php is located here;

<?php

    $autoResponse = true; //if set to true auto response email will be sent, if you don't want autoresponse set it to false
    $autoResponseSubject = "İletişim Formu"; 
    $autoResponseMessage = "<html>
    <head>
        <title>This is your HTML email!</title>
    </head>
    <body> 
        <div style='width:700px; font-family:Arial, Helvetica, sans-serif; font-size:44px; color:#CCC; text-align:center; margin:0 auto; padding:20px;'>THIS IS YOUR</div>/>
    </body>
    </html>";
    $autoResponseHeaders = "Kimden: yeterkara90@gmail.com";
    $autoResponseHeaders .= "MIME-Version: 1.0"."\r\n";
    $autoResponseHeaders .= "Content-type: text/html; charset=iso-8859-1"."\r\n";  

    //we need to get our variables first
    $to =   'yeterkara90@gmail.com'; //the address to which the email will be sent
    $name     =   $_POST['name'];
    $email    =   $_POST['email'];
    $subject  =   "Site İletişim Formu";
    $msg  =   $_POST['message'];

    $message = "Kimden: $name "."\r\n"."Eposta: $to "."\r\n";

    /*the $header variable is for the additional headers in the mail function,
     we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
     That way when we want to reply the email gmail(or yahoo or hotmail...) will know
     who are we replying to. */
    $headers  = "From: $email\r\n";
    $headers .= "Reply-To: $email\r\n";


    if(mail($to, $subject, $message, $headers)){
        if($autoResponse === true){
            mail($email, $autoResponseSubject, $autoResponseMessage, $autoResponseHeaders);
        }
        echo 'sent'; // we are sending this text to the ajax request telling it that the mail is sent..
    }else{
        echo 'failed';// ... or this one to tell it that it wasn't sent
    }


?>

      

+3


source to share


2 answers


you have to return false in your jQuery submit function to prevent the form from submitting. It doesn't redirect, but it does send send_email.php. jquery after adding return false.

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <style>
.error { display:none; }
.success { display:none; }
</style>

<script type="text/javascript">
    $(document).ready(function(){
        $('#send_message').submit(function(e){
            e.preventDefault();
            var error = false;
            var name = $('#name').val();
            var email = $('#email').val();
            var message = $('#message').val();
            if(name.length == 0){
                var error = true;
                $('#name_error').fadeIn(500);
            } else {
                $('#name_error').fadeOut(500);
            }
            if(email.length == 0 || email.indexOf('@') == '-1'){
                var error = true;
                $('#email_error').fadeIn(500);
            } else {
                $('#email_error').fadeOut(500);
            }
            if(message.length == 0){
                var error = true;
                $('#message_error').fadeIn(500);
            } else {
                $('#message_error').fadeOut(500);
            } if(error == false){
                $('#cf_submit_p').attr({'disabled' : 'true', 'value' : 'Gönderiliyor...' });
                $.post("send_email.php", $("#contact_form").serialize(),function(result){
                    if(result == 'sent'){
                        $('#cf_submit_p').remove();
                        $('#mail_success').fadeIn(500);
                    } else {
                        $('#mail_fail').fadeIn(500);
                        $('#cf_submit_p').removeAttr('disabled').attr('value', 'Gönder');
                    }
                });
            }
            return false;
        });
    });
</script>

      



And in your PHP code, you have to check if the data has been sent before sending you email. Something like that

<?php

    $autoResponse = true; //if set to true auto response email will be sent, if you don't want autoresponse set it to false
    $autoResponseSubject = "İletişim Formu"; 
    $autoResponseMessage = "<html>
    <head>
        <title>This is your HTML email!</title>
    </head>
    <body> 
        <div style='width:700px; font-family:Arial, Helvetica, sans-serif; font-size:44px; color:#CCC; text-align:center; margin:0 auto; padding:20px;'>THIS IS YOUR</div>/>
    </body>
    </html>";
    $autoResponseHeaders = "Kimden: yeterkara90@gmail.com";
    $autoResponseHeaders .= "MIME-Version: 1.0"."\r\n";
    $autoResponseHeaders .= "Content-type: text/html; charset=iso-8859-1"."\r\n";  

    //we need to get our variables first
    $to =   'yeterkara90@gmail.com'; //the address to which the email will be sent
    $name     =   $_POST['name'];
    $email    =   $_POST['email'];
    $subject  =   "Site İletişim Formu";
    $msg  =   $_POST['message'];

    $message = "Kimden: $name "."\r\n"."Eposta: $to "."\r\n";

    /*the $header variable is for the additional headers in the mail function,
     we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
     That way when we want to reply the email gmail(or yahoo or hotmail...) will know
     who are we replying to. */
    $headers  = "From: $email\r\n";
    $headers .= "Reply-To: $email\r\n";

    if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email']) ){
        if(mail($to, $subject, $message, $headers)){
            if($autoResponse === true){
                mail($email, $autoResponseSubject, $autoResponseMessage, $autoResponseHeaders);
            }
            echo 'sent'; // we are sending this text to the ajax request telling it that the mail is sent..
        }else{
            echo 'failed';// ... or this one to tell it that it wasn't sent
        }
    }


?>

      

+3


source


If your javascript fails to run, it could be because the form, for example, is being submitted using the input key in the form field, not a button click.

Instead of attaching an event handler to a button (and not to it, submit

instead of click

...), you should attach an event handler to the form:

$('#contact_form').on('submit', function(e){
   e.preventDefault();
   ...

      

Also note that the javascript will not continue, so you have to make sure there are no errors. For example, you only declare a variable once with var

, after which you assign the value without var

.

So:



        if(name.length == 0){
            var error = true;

      

Should be:

        if(name.length == 0){
            error = true;

      

and etc.

+1


source







All Articles