У меня есть контактная форма на моем веб-сайте, которую я хочу отправить по электронной почте, я настроил ее, где «onsubmit» она отправит в функцию js и проверит, заполнены ли все входные данные. Затем он переходит к мой файл php. Однако, после того, как я нажму отправить, он говорит: «Эта страница не работает». Моя функция JS работает отлично, только не мой php.
контакт.html
<p id = "required">Required <span style = "color: red;">*</span></p>
<script src = "js/formvalidate.js"></script>
<form class = "contact-form" name = "form" action = "php/contact.php" onsubmit = "return formValidate()" method = "post">
<label for = "first_name" id = "label_first" class = "contact-label">First Name<span class = "asterisk" id = "required_fname"></span></label><br>
<input type = "text" id = "first_name" name = "first_name" class = "contact-input" placeholder = "First Name"><br>
<label for = "last_name" id = "label_last" class = "contact-label">Last Name<span class = "asterisk" id = "required_lname"></span></label><br>
<input type = "text" id = "last_name" name = "last_name" class = "contact-input" placeholder = "Last Name"><br>
<label for = "email" id = "label_email" class = "contact-label">Email<span class = "asterisk" id = "required_email"></span></label><br>
<input type = "email" id = "email" name = "email" class = "contact-input" placeholder = "Email"><br>
<label for = "subject" id = "label_subject" class = "contact-label">Subject<span class = "asterisk" id = "required_subject"></span></label><br>
<input type = "text" id = "subject" name = "subject" class = "contact-input" placeholder = "Subject"><br>
<label for = "message" id = "label_message" class = "contact-label">First Name<span class = "asterisk" id = "required_message"></span></label><br>
<textarea id = "message" name = "message" class = "contact-message" placeholder = "Type here..."></textarea><br>
<button type = "submit" id = "submit" name = "submit" class = "submit">Submit</button>
</form>
formvalidate.js
function formValidate(){
var form = document.forms["form"]
var first_name = form.elements["first_name"].value;
var last_name = form.elements["last_name"].value;
var email = form.elements["email"].value;
var subject = form.elements["subject"].value;
var message = form.elements["message"].value;
var output = " *";
var result = false;
if (first_name == "" || last_name == "" || email == "" || subject == "" || message == "") {
alert('Please fill out all required fields');
document.getElementById('required_fname').innerHTML = output;
document.getElementById('required_lname').innerHTML = output;
document.getElementById('required_subject').innerHTML = output;
document.getElementById('required_email').innerHTML = output;
document.getElementById('required_message').innerHTML = output;
document.getElementById('required').style.visibility = "visible";
return false;
}
else{
alert('Thanks for contacting me');
result = true;
}
}
контакт.php
<?php
if (isset($_POST['submit'])) {
$fname = $_POST['first_name'];
$lname = $_POST['last_name']
$subject = $_POST['subject'];
$mailFrom = $_POST['email'];
$message = $_POST['message'];
$mailTo = "[email protected]";
$headers = "From: ".$mailFrom;
$name = $fname . " " . $lname;
$txt = "You have received an Email from " . $name . "\n\n" .$message;
mail($mailTo, $subject, $txt, $headers);
header("Location: ../contact.html?mailsend");
}
?>
"Моя функция JS работает отлично" Нет, ваша функция никогда не возвращает true.
This page isn't working — это общая ошибка PHP. Вам нужно посмотреть журналы ошибок сервера, чтобы узнать, почему он их выдает. Я предполагаю, что это пропущенная точка с запятой в конце $lname = $_POST['last_name']Возможный дубликат Ошибки синтаксического анализа/синтаксиса PHP; и как их решить?
URL-адрес действия может быть неверным, проверьте путь "php/contact.php"
Просто предупреждение. Код PHP, который обрабатывает запрос POST и отправляет электронное письмо, имеет очень мало способов проверки предоставленных данных - код проверки на стороне клиента может быть легко отменен, атрибуты элементов изменены, и тогда PHP выйдет из строя.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Эти строки могут помочь вам:
сначала вставьте эту функцию рядом с вашей
function send_mail($to, $from, $title, $message) {
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($to, $title, $message, $headers);
}
Затем вызовите это после ваших переменных
send_mail($_POST['receiver-email'], $_POST['title(maybe website email)'], "title", "here some other post data from your choice"));
если функция проверки прошла успешно, вам нужно ВОЗВРАТИТЬ значение