Я пробовал разные способы сделать эту работу, но не повезло. Каждый раз, когда я отправляю форму, предупреждение об успешном проглатывании срабатывает даже на пустых полях.
Это мой HTML
<!-- Content -->
<div class = "content">
<form role = "form" id = "form" action = "assets/php/mail.php" method = "post">
<div class = "row 50%">
<div class = "6u 12u(mobile)">
<label for = "name"></label>
<input id = "name" type = "text" name = "name" placeholder = "Name"/>
<span></span>
</div>
<div class = "6u 12u(mobile)">
<label for = "email"></label>
<input id = "email" type = "email" name = "email" placeholder = "Email"/>
</div>
</div>
<div class = "row 50%">
<div class = "12u">
<textarea id = "message" name = "message" placeholder = "Message" rows = "7"></textarea>
</div>
</div>
<div class = "row">
<div class = "12u">
<ul class = "buttons">
<li><input id = "submit-button" type = "submit" class = "special" value = "Send" /></li>
</ul>
</div>
</div>
</form>
</div>
Это JS. Пустая ласточка I. Я использую ее для очистки формы после отправки - единственный способ заставить ее работать.
$(document).ready(function(){
$('#form').on('submit',function(e) { //Don't foget to change the id form
$.ajax({
url:'assets/php/mail.php', //===PHP file name====
data:$(this).serialize(),
type:'POST',
success:function(data){
console.info(data);
//Success Message == 'Title', 'Message body', Last one leave as it is
swal({
type: 'success',
title: 'Submmited',
text: 'Your message has been send!'
}).then((result) => {
if (result.value) {
$("#name").val("");
$("#email").val("");
$("#message").val("");
swal()
}
});
},
error:function(data){
//Error Message == 'Title', 'Message body', Last one leave as it is
swal({
type: 'error',
title: 'Oops...',
text: 'Something went wrong!',
footer: '<a href>Why do I have this issue?</a>'
})
}
});
e.preventDefault(); //This is to Avoid Page Refresh and Fire the Event "Click"
});
});
Это мой PHP. Я использую для этого так много разных PHP-кодов, но именно он работает лучше всего для меня.
$name = strip_tags(trim($_POST["name"]));
$name = str_replace(array("\r","\n"),array(" "," "),$name);
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$message = trim($_POST["message"]);
// Check the data.
if (empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
header("Location: ../../contact.html");
exit;
}
$recipient = "[email protected]";
// Set the email subject.
$subject = "New contact from $name";
// Build the email content.
$email_content = "Name: $name\n";
$email_content .= "Email: $email\n\n";
$email_content .= "Message:\n$message\n";
$email_headers = "From: $name <$email>";
mail($recipient, $subject, $email_content, $email_headers);
header("Location: ../../contact.html");
Значит, мне нужно перенаправить на другую страницу?
Нет, но вы должны каким-то образом отличать успех от неудачи. Как вы ожидаете, что это сработает, если вы одинаково отреагируете на оба?
Я пытаюсь перенаправить на индекс, но все равно делаю то же самое.
Простите мое невежество, я в этом полный нуб.
Похоже, вам нужно потратить больше времени на изучение того, как эти вещи работают, а не на копирование и вставку кода.
Спасибо, я думаю, я пришел не в то место в поисках помощи
Правильное место для помощи по конкретным проблемам, но вам нужно лучше понимать, что вы делаете, чтобы помощь была добавленной стоимости. Лучшее место для новичков - школа или дискуссионные форумы, а не сайт вопросов и ответов.
Вы должны проверить, являются ли входы пустыми или нет в обработчике submit, перед ajax. Обратный вызов success срабатывает при успешном повторном запросе ajax независимо от отправленных данных. Обратный вызов error срабатывает, когда запрос ajax не может быть завершен ... Например, из-за неправильного URL-адреса или чего-то еще.






Попробуйте проверить входы в обработчике submit:
$('#form').on('submit',function(e) {
e.preventDefault();
if ( $(this).find("[name='name']").val()! = "" && // If the 3 aren't empty, it proceeds.
$(this).find("[name='email']").val()! = "" &&
$(this).find("[name='message']").text()! = ""
){
// The rest of your code here...
}else{
alert("Please fill the form before submitting!"); // Or use a swal...
}
});
Об Ajax: обратный вызов success срабатывает при успешном повторном запросе Ajax независимо от отправленных данных. Обратный вызов error срабатывает, когда запрос Ajax не может быть завершен ... Например, из-за неправильного URL-адреса или чего-то еще.
Ваше перенаправление на contact.html в PHP остается неизменным. Каким образом внешний интерфейс должен знать, что поля пусты?