Я пытался переписать форму отправки почты jQuery + PHP, но, несмотря на попытку 3 методов, все равно выдает 500 внутренних ошибок сервера. Я переписываю, потому что я перевожу сайт на jQuery 3 и работаю над улучшением производительности и соответствием стандартам унаследованной кодовой базы.
Я знаю, что 500 — ошибка сервера, и сайт размещен на MS IIS, но устаревший код работает на том же сервере, поэтому в моей реализации должно быть что-то конкретное.
Может быть, вы можете увидеть то, что я пропустил?
Код ниже в основном следует этот пример на переполнение стека но я также пытался следовать этот YouTube а также этот урок безуспешно.
Надеясь на ответ здесь после исчерпания моих других вариантов. Заранее спасибо!
HTML (упрощенный)
<form action="send_mail_facility2.php" id="facility-contact-form" method="post" autocomplete="on">
<!-- MAIN FIELDS -->
<input id="sendTo" name="sendTo" type="text" value="Facility One" style="display: none;">
<input id="name" name="name" type="text" placeholder="Name" required>
<input id="email" name="email" type="email" placeholder="Email" required>
<input id="phone" name="phone" type="text" placeholder="Phone number">
<textarea id="message" name="message" type="text" placeholder="Message"></textarea>
<!-- ADDITIONAL FIELDS - separate js shows section when checkbox selected -->
<input id="infopack-checkbox" type="checkbox" name="checkbox" value="checkbox"><span class="information-pack"> I would like to receive an information pack.</span>
<div id="address-details">
<input id="address" name="address" type="text" placeholder="Address">
<input id="city" name="city" type="text" placeholder="City">
<input id="postcode" name="postcode" type="text" placeholder="Postcode">
</div>
<!-- reCAPTCHA html & js -->
<input id="facility-submit" name="submit" type="submit" value="Send request" disabled style="opacity: 0.3;"> <!-- disabled & inline style for captcha -->
<p class="status" style="display: none" role="alert">Thanks, someone will be in contact with you regarding your enquiry soon.</p>
</form>
JS
$(function(){
var request;
$("#facility-contact-form").on("submit", function(event){
event.preventDefault();
if (request) {
request.abort();
}
var $form = $(this);
var $inputs = $form.find("input, select, button, textarea");
var serializeData = $form.serialize();
$inputs.prop("disabled", true);
request = $.ajax({
url: "send_mail_facility2.php",
type: "post",
data: serializeData
});
request.done(function (response, textStatus, jqXHR){
console.log("Hooray, it worked!");
});
request.fail(function (jqXHR, textStatus, errorThrown){
console.error("The following error occurred: "+
textStatus, errorThrown);
});
request.always(function () {
$inputs.prop("disabled", false);
});
});
});
PHP
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// email headers
$to = $_POST["sendTo"];
$subject = "Custom subject line";
$headers = "From: NoReply <[email protected]>";
// sender data
$name = $_POST["name"];
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$phone = trim($_POST["phone"]);
$message = trim($_POST["message"]);
$address = isset($_POST["address"]) ? trim($_POST["address"]) : null;
$city = isset($_POST["city"]) ? trim($_POST["city"]) : null;
$postcode = isset($_POST["postcode"]) ? trim($_POST["postcode"]) : null;
//define recipients
$sendTo = $_POST["sendTo"];
if($sendTo == 'Facility One') {
$to = '[email protected]';
} elseif($sendTo == 'Facility Two') {
$to = '[email protected]';
} elseif($sendTo == 'Facility Three') {
$to = '[email protected]';
}
if (isset($_POST['checkbox'])) {
$infoPack = "Yes";
} else {
$infoPack = "No";
}
if (empty($_POST["address"])) {
$address = "N/A";
} else {
}
if (empty($_POST["city"])) {
$city = "N/A";
} else {
}
if (empty($_POST["postcode"])) {
$postcode = "N/A";
} else {
}
// email content
$content = "Enquiry for facility: $sendTo\n\n";
$content .= "Name: $name\n\n";
$content .= "Email: $email\n\n";
$content .= "Phone: $phone\n\n";
$content .= "Message:\n$message\n\n";
$content .= "Would user like to receive an information pack?: $infoPack\n\n";
$content .= "Address: $address\n\n";
$content .= "City: $city\n\n";
$content .= "Postcode: $postcode\n\n\n";
$content .= "Static footer message here\n\n";
// Send the email
$success = mail($to, $subject, $content, $headers);
if ($success) {
http_response_code(200);
echo "Thanks, someone will be in contact with you regarding your enquiry soon.";
} else {
http_response_code(500);
echo "Oops, something went wrong - we couldn't send your message.";
}
} else {
// Not a POST request, set a 403 (forbidden) response code.
http_response_code(403);
echo "Oops, something went wrong - we couldn't send your message.";
}
Есть идеи?
Спасибо @Darren, который указал мне на ответ об ошибке.
Проблема, кажется, только что была from
Синтаксис заголовка, который я скопировал с шага 3 этот урок.
Я изменился:
$headers = "From: NoReply <[email protected]>";
чтобы:
$headers = "FROM: NoReply <[email protected]>";
Я не получил это от вопрос / ответ это было указано как дубликат, так же полезно, как этот ответ.
Для других новичков в PHP используйте вкладку «Сеть» инструментов разработчика Firefox / Chrome, выполните отправку формы, отфильтруйте файл php, а затем посмотрите вкладку «Ответ», чтобы увидеть полный ответ с любыми ошибками.
Других решений пока нет …