Моя проблема в том, что я получаю внутреннюю ошибку 500 через запрос ajax, но mailer.php все равно отправляет почту. Я не могу понять, почему произошла ошибка сервера, и я посмотрел пару вопросов, которые казались похожими, но это не помогло бы мне, поэтому я надеюсь, что кто-то знает, что делать.
Мой form.js выглядит так:
$(function() {
// Get the form.
var form = $('#ajax-contact');
// Get the messages div.
var formMessages = $('#form-messages');
// Set up an event listener for the contact form.
$(form).submit(function(e) {
// Stop the browser from submitting the form.
e.preventDefault();
// Serialize the form data.
var formData = $(form).serialize();
// Submit the form using AJAX.
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: formData
})
.done(function(response) {
// Make sure that the formMessages div has the 'success' class.
$(formMessages).removeClass('error');
$(formMessages).addClass('success');
// Set the message text.
$(formMessages).text(response);
// Clear the form.
$('#lname').val('');
$('#email').val('');
$('#size_s').val('0');
$('#size_m').val('0');
$('#size_l').val('0');
$('#size_xl').val('0');
$('#size_xxl').val('0');
$('#strasse').val('');
$('#plzort').val('');
})
.fail(function(data) {
// Make sure that the formMessages div has the 'error' class.
$(formMessages).removeClass('success');
$(formMessages).addClass('error');
// Set the message text.
if (data.responseText !== '') {
$(formMessages).text(data.responseText);
} else {
$(formMessages).text('Oops! An error occured and your message could not be sent.');
}
});
});});
Мой Php:
<?php
// Only process POST reqeusts.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Get the form fields and remove whitespace.
$lname = strip_tags(trim($_POST["lname"]));
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$strasse = strip_tags(trim($_POST["strasse"]));
$ort = $_POST["ortplz"];
$size_s = $_POST['size_s'];
$size_m = $_POST['size_m'];
$size_l = $_POST['size_l'];
$size_xl = $_POST['size_xl'];
$size_xxl = $_POST['size_xxl'];
$preis = 67.18;
$gesamtpreis = number_format(($size_xxl + $size_xl + $size_l + $size_m) * $preis, 2);
$preisOMwst = number_format($gesamtpreis * 0.81, 2);
$Mwst = number_format($gesamtpreis * 0.19, 2);
// Check that data was sent to the mailer.
if (empty($lname) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
// Set a 400 (bad request) response code and exit.
http_response_code(400);
echo "Etwas ist schief gelaufen! Versuchen Sie es erneut.Fehlercode: 400 (bad request)";
exit;
}
// Empfängeradresse angeben
//FIXME: RECIPIENT
$recipient = "[email protected]";
// Set the email subject.
$subject = "Neue Bestellung von $lname";
// E-Mail Inhaltaufbau
$email_content = "Name: $lname\n";
$email_content .= "Email: $email\n\n";
$email_content .= "Straße: $strasse\n\n";
$email_content .= "Ort: $ort\n\n";
if ($size_s == 0 && $size_m == 0 && $size_l == 0 && $size_xl == 0 && $size_xxl == 0) {
//ERROR
} else {
$email_content .= "Größe: S: $size_s | M: $size_m | L: $size_l | XL: $size_xl | XXL: $size_xxl\n";
}
$email_content .= "\n Netto: $preisOMwst € \n Zzgl. 19% MwSt: $Mwst € \n Zu Zahlen: $gesamtpreis €";
// Email headers
$headers = "From: $lname <$email>" . "\r\n";
$headers .= "Content-type: text/plain; charset=UTF-8" . "\r\n";
// Senden
if (mail($recipient, $subject, $email_content, $headers)) {
// Set a 200 (okay) response code.
http_response_code(200);
echo "Danke! Ihre Bestellung wurde aufgegeben.";
} else {
// Set a 500 (internal server error) response code.
http_response_code(500);
echo "Etwas ist schief gelaufen! Versuchen Sie es erneut. Fehlercode: 500 (Internal Server Error)";
}
} else {
// Not a POST request, set a 403 (forbidden) response code.
http_response_code(403);
echo "Etwas ist schief gelaufen! Versuchen Sie es erneut. Fehlercode: 403 (forbidden)";
}
Моя форма в HTML:
<form id="ajax-contact" action="mailer.php" method="get">
<input id="fname" type="text" name="fname" required>
<p><label for="lname" class="input-label first"> Vor- und Nachname: </label><input id="lname" type="text" name="lname" required></p>
<p><label for="email" class="input-label first"> E-Mail: </label><input id="email" type="email" name="email" required></p>
<p><label for="strasse" class="input-label first"> Straße und Hausnummer: </label><input id="strasse" type="text" name="strasse" required></p>
<p><label for="ortplz" class="input-label first"> PLZ und Ort: </label><input id="ortplz" type="text" name="ortplz" required></p>
<p style="margin-bottom:10px;"><span class="input-label first" style="float:none;"> Menge: </span></p>
<div style="overflow: hidden; display:flex;">
<p><label for="size_s" class="input-label first size"> S: </label><input id="size_s" type="text" name="size_s" value="0" readonly="true" style="color:gray !important;"></p>
<p><label for="size_m" class="input-label size"> M: </label><input id="size_m" type="text" name="size_m" value="0"></p>
<p><label for="size_l" class="input-label size"> L: </label><input id="size_l" type="text" name="size_l" value="0"></p>
<p><label for="size_xl" class="input-label size"> XL: </label><input id="size_xl" type="text" name="size_xl" value="0"></p>
<p><label for="size_xxl" class="input-label size"> XXL: </label><input id="size_xxl" type="text" name="size_xxl" value="0"></p>
</div>
<button id="open" class="my_popup_open">Bestellung überprüfen</button>
<p id="form-messages"></p>
</form>
<div id="my_popup">
<input type="checkbox" name="agb" value="agb" id="agb" form="ajax-contact"> Ich akzeptiere die <a class="nonblock" href="agb.html">AGB</a> von mencreation und stimme dem <a class="nonblock" href="agb.html#widerruf">Widerrufsrecht</a> zu!</p><br>
<form><input id="senden" type="submit" value="Zahlungspflichtig bestellen" form="ajax-contact"></form>
<!-- Add an optional button to close the popup -->
<button id="close" class="my_popup_close">Abbrechen</button></div>
Я узнал, что если я положу if(!isset($_POST["fname"]))
(это мое поле приманки) вокруг отправляющей части, я получаю код ОК 200. Так что если это выглядит так в PHP:
// Senden
if(!isset($_POST["fname"])) {
if (mail($recipient, $subject, $email_content, $headers)) {
// Set a 200 (okay) response code.
http_response_code(200);
echo "Danke! Ihre Bestellung wurde aufgegeben.";
} else {
// Set a 500 (internal server error) response code.
http_response_code(500);
echo "Etwas ist schief gelaufen! Versuchen Sie es erneut.
Fehlercode: 500 (Internal Server Error)";
}
}
} else {
// Not a POST request, set a 403 (forbidden) response code.
http_response_code(403);
echo "Etwas ist schief gelaufen! Versuchen Sie es erneut. Fehlercode: 403 (forbidden)";
}
Но тогда почта больше не отправляется.
Я просто не знаю, как это возможно, потому что в случае кода 200 Jax-запрос будет успешным, поэтому отправитель должен отправить письмо, не так ли?
Кстати, я нашел этот почтовик давно и использовал его на другом сайте, где он работает просто отлично …
Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …