Pergunta

I'm hoping someone could look over my code and let me know what's going on. I have a form. When it is submitted the popup comes up and tells me that it failed and I get a page that just says "undefined". Anyone got any ideas on A: why the send is failing and B: How I need to amend my JavaScript to get the page to go back to the homepage after submission.

HTML:

<div class="contact-form">
        <p class="mandatory">* indicates Manadatory Field</p>
        <div data-role="fieldcontain" class="text-field">
            <label for="firstname">First Name*:</label>
            <input type="text" name="firstname" value="" placeholder=""     class="required" id="firstname" />
        </div>
        <div data-role="fieldcontain" class="text-field">
            <label for="surname">Last Name:</label>
            <input type="text" name="surname" value="" placeholder="" id="surname" />
        </div>
        <div data-role="fieldcontain" class="text-field">
            <label for="email">Email Address*:</label>
            <input type="email" name="email" value="" placeholder=""     class="required" id="email"  />
        </div>
        <div data-role="fieldcontain" class="text-field">
            <label for="mobilephone">Mobile Number:</label>
            <input type="number" name="mobilephone" value="" placeholder="" id="mobilephone" />
        </div>    

<div data-role="fieldcontain">
<label for="message">Message*:</label>
<textarea name="message" id="message" placeholder="" class="required"></textarea>
</div>
<div class="send"><a href="javascript.js" data-role="button" data-theme="a" data-    iconpos="right" id="send-feedback">Send Message</a></div>

JAVASCRIPT

 $(function () {
     $("#symptomsemployersbutton").click(function () {
         $("#symptomsemployers").toggle("slow");
     });
 });

 $('#send-feedback').live("click", function () {
     var url = 'submit.php';
     var error = 0;
     var $contactpage = $(this).closest('.ui-page');
     var $contactform = $(this).closest('.contact-form');
     $('.required', $contactform).each(function (i) {
         if ($(this).val() === '') {
             error++;
         }
     }); // each
     if (error > 0) {
         alert('Please fill in all the mandatory fields. Mandatory fields are marked with an asterisk *.');
     } else {
         var firstname = $contactform.find('input[name="firstname"]').val();
         var surname = $contactform.find('input[name="surname"]').val();
         var mobilephone = $contactform.find('input[name="mobilephone"]').val();
         var email = $contactform.find('input[name="email"]').val();
         var message = $contactform.find('textarea[name="message"]').val();

         //submit the form
         $.ajax({
             type: "GET",
             url: url,
             data: {
                 firstname: firstname,
                 surname: surname,
                 mobilephone: mobilephone,
                 email: email,
                 message: message
             },
             success: function (data) {
                 if (data == 'success') {
                     // show thank you 
                     $contactpage.find('.contact-thankyou').show();
                     $contactpage.find('.contact-form').hide();
                 } else {
                     alert('Unable to send your message. Please try again.');
                 }
             }
         }); //$.ajax

     }
     return false;
 });

PHP

<?php 
header('content-type: application/json; charset=utf-8');

if (isset($_GET["firstname"])) {
$firstname = strip_tags($_GET['firstname']);
$surname = strip_tags($_GET['surname']);
$email = strip_tags($_GET['email']);
$mobilephone = strip_tags($_GET['mobilephone']);
$message = strip_tags($_GET['message']);
$header = "From: ". $firstname . " <" . $email . ">rn"; 

$ip = $_SERVER['REMOTE_ADDR']; 
$httpref = $_SERVER['HTTP_REFERER']; 
$httpagent = $_SERVER['HTTP_USER_AGENT']; 
$today = date("F j, Y, g:i a");    

$recipient = 'mark@launchintervention.com';
$subject = 'Contact Form';
$mailbody = "
First Name: $firstname   
Last Name: $surname 
Email: $email 
Mobile Phone: $mobilephone 
Message: $message

IP: $ip
Browser info: $httpagent
Referral: $httpref
Sent: $today
";
$result = 'success';

if (mail($recipient, $subject, $mailbody, $header)) {
    echo json_encode($result);
}
}
?>
Foi útil?

Solução

Your conditional statement never fires in your success function because it will always be false. (data == 'success') will never work because your json encoding of that string returns the value, "success" as opposed to success. I don't know why you're json encoding it anyway, but you should do something else such as

$result = array(
    'status' => 'success'
);
echo json_encode($result);

Then you can do

(data.status == 'success')

As far as redirecting after the result returns successful, after the following line:

$contactpage.find('.contact-form').hide();

You should do something like:

setTimeout(function(){
    window.location = 'mydomain.tld/my-homepage.ext';
}, 5000);

And your element with the class of contact-thankyou should have some type of text like, "We have received your submission. You will be redirected to the home page in 5 seconds.". Then after 5 seconds they will be redirected based on the previously defined setTimeout function.

You also have an rn at the end of your header declaration which i assume should be \r\n, however you do not continue concatentation of the headers and therefore it is not required. Please review the RFC2822 on this.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top