AJAX Contact form showing PHP page after successful email se


Topic: AJAX Contact form showing PHP page after successful email sent

Yves Chaput asked 5 years ago

Expected behavior Stays on HTML page with updated message

Actual behavior Shows PHP page with successful message

Resources (screenshots, code snippets etc.) {"message":"Courriel envoy\u00e9; avec succ\u00e8s!","code":1}

To see it in action: yveschaput.com, scroll down to the Contact section. After filling up the for with proper info, clicking on "Envoyé" opens up the PHP page (url: yveschaput.com/mail.php)

Besides the cosmetic changes and language translation, the code is exactly as your example here: Bootstrap contact form. This line, in the PHP script, print json_encode(array('message' => 'Courriel envoyé avec succès!', 'code' => 1));, doesn't return to the HTML.

I don't know PHP enough to figure it out myself, I need your help.

Thanks.


Adam Jakubowski staff pro premium priority answered 5 years ago

Hi,

Unfortunately, when I enter your form, I get a 500 error and I can't recreate the problem and help you solve it.

Best,

Adam


Yves Chaput answered 5 years ago

Just realized, you can't see the PHP script from the website so, here it is:

  <?php
         $name = $_POST['name'];
         $email = $_POST['email'];
         $message = $_POST['message'];
         $subject = $_POST['subject'];

         error_reporting(E_ALL & ~E_NOTICE);
try{
    if(count($_POST) == 0) throw new \Exception('Form is empty');

    if ($name === ''){
        print json_encode(array('message' => 'Le nom ne peut être vide', 'code' => 0));
        exit();
    }
    if ($email === ''){
        print json_encode(array('message' => 'Le courriel ne peut être vide', 'code' => 0));
        exit();
    } else {
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
            print json_encode(array('message' => 'Le format du courriel est invalide', 'code' => 0));
            exit();
        }
    }
    if ($subject === ''){
        print json_encode(array('message' => 'Le sujet ne peut être vide', 'code' => 0));
        exit();
    }
    if ($message === ''){
        print json_encode(array('message' => 'Le message ne peut être vide', 'code' => 0));
        exit();
    }
    $content="From: $name \nEmail: $email \nMessage: $message";
    $recipient = "chaput.yves@gmail.com";
    $mailheader = "From: contact@yveschaput.com \r\n";
    mail($recipient, $subject, $content, $mailheader);
    $result = array('message' => 'Courriel envoyé avec succès!', 'code' => 1);
}
catch (\Exception $e){
    $errorMessage = 'Une erreur s\'est produit. Veuillez réessayer plus tard';
    $result = array('type' => 'danger', 'message' => $errorMessage);
}
//
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($result);

    header('Content-Type: application/json');

    echo $encoded;
}
// else just display the message
else {
    echo $result['message'];
}

Adam Jakubowski staff pro premium priority commented 5 years ago

Now when I come to your site everything works, when I complete the contact form and click send, I receive a message that the message was sent successfully. So isn't something else not working that I can help you with ?


Yves Chaput answered 5 years ago

Thanks Adam for looking into it. But a friend of mine steered me in the right direction and I finally managed to get it working. It was late last night and I was quite tired so I went off to bed not thinking of updating you on it. Sorry for this. Though, you might want to look into your email programming example and make sure it is working as posted. If I go by my experience, it doesn't seem to work as it is posted. But it could be me also. Maybe I did something wrong while copying and pasting. Anyways, thanks for wanting to help me out. I still love MDB nonetheless. :)


Please insert min. 20 characters.

FREE CONSULTATION

Hire our experts to build a dedicated project. We'll analyze your business requirements, for free.

Status

Answered

Specification of the issue
  • User: Free
  • Premium support: No
  • Technology: Other
  • MDB Version: -
  • Device: desktop
  • Browser: chrome
  • OS: Win 10
  • Provided sample code: No
  • Provided link: Yes