PHP form handler with jQuery script duplicating emails

I have a php function handling the results of a form delivered from a jQuery script, as the form content is also delivered to a Workbooks CRM url to be added to records there.

All works fine, except the email is sent 3 times. The button clicked is not inside the form, and the ‘send’ value for isset($_POST)is delivered from a hidden form field in the form.

I’ve tried:

  • Adding flags, both in PHP and in the jQuery.
  • Adding alerts in the jQuery.
  • Adding exit(“sent”); after the mail() function.

The alert() experiment appeared to indicate the jQuery wasn’t the issue, but flags seemed to indicate the same in the PHP!

Here’s the jQuery:

   $(document).ready(function () {
  $("#test-vf-button1").click(function (event) {
      event.preventDefault();
        // Field values as array
        var name = $("#name").val();
        var email = $("#email").val();
        var message = $("#message").val();
        var formData = $("#wb_form").serialize();
        var url = $(location).attr('hostname');
        var pathname = $(location).attr('pathname');
        var pageUrl = url + pathname;
        console.log(pageUrl);
        $("#validate-message").empty();
        $("#confirm-message").empty();
        if (name == '' || email == '' || message == '') {
            $("#validate-message").append(" Fill in required fields");
        } else {
            // Returns successful data submission message when the entered information is stored in database.
            $.ajax({
                type: 'POST',
                url: "http://visual-factory.co.uk/",
                data: formData,
                success: function () {
                    $.ajax({
                        type: 'POST',
                        url: "https://secure.workbooks.com/crm/web_leads",
                        crossDomain: true,
                        data: formData,
                        dataType: 'text',
                        success: function () {

PHP handling function:

function vf_deliver_mail() {
// if the submit button is clicked, send the email
if ( isset( $_POST['send'] ) ) {
    // sanitize form values
    $title   = sanitize_text_field( $_POST['person_lead_party']['person_personal_title'] );
    $name    = sanitize_text_field( $_POST['person_lead_party']['name'] );
    $jobrole   = sanitize_text_field( $_POST['person_lead_party']['person_job_role'] );
    $email   = sanitize_text_field( $_POST['org_lead_party']['main_location']['email']);
    $phone   = sanitize_text_field( $_POST['org_lead_party']['main_location']['telephone'] );
    $company   = sanitize_text_field( $_POST['org_lead_party']['name'] );
    $country   = sanitize_text_field( $_POST['org_lead_party']['main_location']['country'] );
    $messagecontent = esc_textarea( $_POST['vf-message'] );
    $message = "<p>Title: ".$title."</p>";
    $message .= "<p>Name of lead is: ".$name."</p>";
    $message .= "<p>Job Role: ".$jobrole."</p>";
    $message .= "<p>Email is: ".$email."</p>";
    $message .= "<p>Phone is: ".$phone."</p>";
    $message .= "<p>Company is: ".$company."</p>";
    $message .= "<p>Country is: ".$country."</p>";
    $message .= "<p>Message: ".$messagecontent.".</p>";

    // get the blog administrator's email address
    $to = get_option( 'admin_email' );
    $subject = "Form response";
    $headers = "From: $name <$email>" . "rn";
    mail( $to, $subject, $message, $headers ) ;
  }
}


Source: forms

Leave a Reply