簡體   English   中英

什么原因導致收到空電子郵件? (AJAX PHP)

[英]What causes a received empty e-mail? (AJAX PHP)

我想使用 JavaScript AJAX 和 PHP 為網站創建聯系表單。 以前版本的表單工作正常,它只使用 PHP。 我想包含 AJAX 以確保在提交表單時頁面不會重新加載。

我的問題是:當我使用 Ajax 請求運行 JS 腳本時,我收到一封空電子郵件。 如果我排除 JS 腳本,我會收到格式正確的電子郵件。

為了將相關信息發送給電子郵件收件人,我的 AJAX 請求需要更改哪些內容?

const contactForm = document.addEventListener('DOMContentLoaded', function() {
    document.addEventListener("submit", function(e) {
        e.preventDefault();

        const formData = document.getElementById('contact-form');
        let data = new FormData(formData);

        const xhr = new XMLHttpRequest();
        xhr.open('POST', "contactform.php", true);
        xhr.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                document.getElementById('contact-form').reset();
                document.querySelector('.response').innerHTML = '<p class="alert alert-success">Bedankt voor uw bericht. Wij nemen zo snel mogelijk contact met u op.</p>';
            } else {
                document.querySelector('.response').innerHTML = '<p class="alert alert-danger">Er is iets misgegaan.</p>';
            }
        };
        xhr.send(data);
    })
})
<?php
    $assignmentchoice = $_POST['assignmentchoice'];
    $projectchoice = $_POST['projectchoice'];
    $name = $_POST['name'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $phonenumber = $_POST['phonenumber'];
    $address = $_POST['address'];
    $zipcode = $_POST['zipcode'];
    $message = $_POST['message'];
    $email_body = "";

    if(isset($_POST['assignmentchoice'])) {
        $assignmentchoice = filter_var($_POST['assignmentchoice'], FILTER_SANITIZE_STRING);
        $email_body .= "Opdracht: ".$assignmentchoice."\r\n";
    }

    if(isset($_POST['projectchoice'])) {
        $projectchoice = filter_var($_POST['projectchoice'], FILTER_SANITIZE_STRING);
        $email_body .= "Project: ".$projectchoice."\r\n";
    }

    if(isset($_POST['name'])) {
        $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
        $email_body .= "Voornaam: ".$name."\r\n";
    }

    if(isset($_POST['lastname'])) {
        $lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
        $email_body .= "Achternaam: ".$lastname."\r\n";
    }

    if(isset($_POST['email'])) {
        $visitor_email = str_replace(array("\r", "\n", "%0a", "%0d"), '', $_POST['email']);
        $visitor_email = filter_var($email, FILTER_VALIDATE_EMAIL);
        $email_body .= "Email adres: ".$email."\r\n";
    }
      
    if(isset($_POST['phonenumber'])) {
        $phonenumber = filter_var($_POST['phonenumber'], FILTER_SANITIZE_NUMBER_INT);
        $email_body .= "Telefoonnummer: ".$phonenumber."\r\n";
    }
      
    if(isset($_POST['address'])) {
        $address = filter_var($_POST['address'], FILTER_SANITIZE_STRING);
        $email_body .= "Adres locatie: ".$address."\r\n";
    }

    if(isset($_POST['zipcode'])) {
        $zipcode = filter_var($_POST['zipcode'], FILTER_SANITIZE_STRING);
        $email_body .= "Postcode: ".$zipcode."\r\n";
    }
      
    if(isset($_POST['message'])) {
        $message = htmlspecialchars($_POST['message']);
        $email_body .= "Bericht: ".$message."\r\n";
    }

    $to = "info@vanadrichembouwadvies.nl";
    $subject = "U heeft een nieuw bericht!";
    $message = $email_body;

    $header = "From:" . $from . "\r\n";
    $header .= 'MIME-Version: 1.0' . "\r\n";
    $header .= 'Content-type: text/html; charset=utf-8' . "\r\n";

    mail($to, $subject, $message);

?>

不要設置內容類型請求頭,首先是application/x-www-form-urlencoded不正確。 FormData 對象使用 multipart/form-data 內容類型。 其次,您無法手動正確設置此內容類型,如果您將其留空,瀏覽器將為您設置正確的邊界。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM