manu
manu

Reputation: 51

PHP echo statement not working

I have following form processing php script.

<?php
$G['hotel_email']="[email protected]";
$G['hotel_name']="xxx xxx";
$G['language']="en";
$T['lbl_form_sent_successfully']="H";


# Recipients: comma separated
$G['form_contact_mail_recipients'] = $G['hotel_email'];
$G['form_contact_mail_subject'] = $G['hotel_name'] . ' - Contact Weddings [' . $G['language'] . ']';


# CHECK IF FORM SENT. AJAX. RESPONSE IN JAVASCRIPT TO INTERACT IN THE FORM.
if (!empty($_POST)) {
    $js = '';

     # ALTERNATIVE CAPTCHA, IT MUST NOT BE FILLED
     if (!empty($_POST['title'])) { exit; }


     # FORM MAIL TO SENT
     unset($_POST['title']);
     unset($_POST['submit']);
     $message = date("l, F j, Y, g:i a")." [GMT] \n\nFORM DETAILS\n\n\n";
     foreach ($_POST as $field => $value) { 
        $message .= ucfirst(str_replace('_',' ',$field)).': '.$value."\n\n";
     }
     $message .= "\n\n\n";
     mail($G['form_contact_mail_recipients'], $G['form_contact_mail_subject'], $message, "From: ".$_POST['email']."\r\n");
     echo "success";
}
?>

The form is being submitted using following JavaScript

    $(function() {
      // Initialize form validation on the registration form.
      // It has the name attribute "registration"
      $("#ba-form-contact form").validate({
        // Specify validation rules
        rules: {
          // The key name on the left side is the name attribute
          // of an input field. Validation rules are defined
          // on the right side
          First_Name: "required",
          Surname: "required",
          email: {
            required: true,
            // Specify that email should be validated
            // by the built-in "email" rule
            email: true
          }
        },
        submitHandler: function() {
     jQuery.ajax({
     type: 'POST',
     url: '<?=$_SERVER['REQUEST_URI']?>',
     data: jQuery("#ba-form-contact form").serialize(),
     dataType: 'html'
     });
     return false;
     }
      });
    });
     </script>

The last echo statement does't work and I don't get any error msg.I do get email with all the info alright.I think nothing work after the mail function, I tried like var_dump, but nothing. What could be the error here?

Upvotes: 1

Views: 643

Answers (2)

LSerni
LSerni

Reputation: 57388

You do not know that it is the echo that does not work.

What you do know is that the script executes, and the jQuery function does not issue output. And that's where half the problem is.

jQuery.ajax({
    type: 'POST',
    url: '<?=$_SERVER['REQUEST_URI']?>',
    data: jQuery("#ba-form-contact form").serialize(),
    dataType: 'html'
 });

The above does not do anything with the output, so logically nothing happens.

Try this:

jQuery.post({
    '<?=$_SERVER['REQUEST_URI']?>',
    jQuery("#ba-form-contact form").serialize()
 }).done(function(retval) {
     // Debug (better use console.log actually)
     alert(JSON.stringify(retval));
     // Do what you want with retval.message (check retval.status also)
     alert(retval.message);
 });

and in the PHP, which must output nothing else, end with:

 header('Content-Type: application/json');
 die(json_encode(array(
     'status' => 'success',
     'message' => 'The mail was sent',
 )));

(I have changed from HTML to JSON output since this allows to send more structured data, with negligible additional complexity).

Upvotes: 1

devpro
devpro

Reputation: 16117

As per your ajax request, you are not using success method here in ajax request, you need to add success method as:

jQuery.ajax({
url: YourURL,
type: "POST",
data: jQuery("#ba-form-contact form").serialize(),
dataType: "html",  
success: function(response) {
    alert(response); //this will return the response
},
beforeSend: function()
{
    // loading if you need before ajax success
}
});  
return false;

Here success: function(response) { will return the success message.

Upvotes: 1

Related Questions