양식을 작성하고, 입력을 검증하고, 해당 데이터를 삭제하고, 전자 메일로 보내는 방법을 배우려고합니다. HTML 양식을 만들고 통합하는 것으로 시작했습니다.jquery-validation을 사용하여 문의 양식을 제출하고 전자 메일로 보내려고합니다. 유효성 검사를 통과했지만 메일이 수신되지 않음
클라이언트 측 유효성 검사는 훌륭하게 작동하는 것으로 보이며, 내 규칙이 지정되지 않은 경우 사용자가 "제출"할 수 없습니다. 그러나 실제로 처리 방법 및 메일이 양식을 자신에게 이해하는 데 어려움을 겪고 있습니다. 알 수 있듯이, 아약스는 성공적으로 PHP 처리 페이지로 데이터를 전달하지만 내 이메일에는 데이터를받지 못합니다.
HTML 형태 :
<form id="contact-form" role="form" enctype="multipart/form-data" method="post" action="">
<input type="text" placeholder="First Name *" name="firstName" id="firstName">
<input type="text" placeholder="Last Name *" name="lastName" id="lastName">
<input type="text" placeholder="Street Address *" name="address" id="address" >
<select name="state" id="state" >
<option value="" disabled selected style="display:none;">State *</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
</select>
<input type="text" placeholder="Zip *" name="zip" id="zip" >
<input type="tel" placeholder="Phone Number *" name="phone" id="phone">
<input type="email" placeholder="Email Address (optional)" name="email" id="email">
<textarea rows="3" placeholder="Additional Message (optional)" name="message" id="message"></textarea>
<input type="submit" id="submit-button" value="Send Message">
</form>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/additional-methods.min.js"></script>
<script src="js/validation.js"></script>
Validation.js :
$(function() {
$("#contact-form").validate({
rules: {
firstName: {
required: true
},
lastName: {
required: true
},
address: {
required: true
},
state: {
stateUS: true,
required: true
},
zip: {
zipcodeUS: true,
required: true
},
phone: {
phoneUS: true,
required: true
},
email: {
email: true
},
method: {
lettersonly: true,
required: true
}
},
messages: {
email: {
email: 'Please enter a valid email address.'
}
},
submitHandler: function(form) {
$.ajax({
type: "POST",
url: "/test/mail.php",
data: $(form).serialize(),
timeout: 3000,
success: function() {alert('works');},
error: function() {alert('failed');}
});
return false;
}
});
});
mail.PHP :
<?php
$firstName = $lastName = $address = $state = $zip = $phone = $email = $method = $message = "";
$email_subject = $email_message = $headers = "";
$email_to = "[email protected]";
$firstName = test_input($_POST["firstName"]);
$lastName = test_input($_POST["lastName"]);
$address = test_input($_POST["address"]);
$state = test_input($_POST["state"]);
$zip = test_input($_POST["zip"]);
$phone = test_input($_POST["phone"]);
$email = test_input($_POST["email"]);
$message = test_input($_POST["message"]);
$email_subject = "New Meeting Request - ".$name;
$email_message = "Details below:\n\n";
$email_message .= "First Name: ".$firstName."\n\n";
$email_message .= "Last Name: ".$lastName."\n\n";
$email_message .= "Address: ".$address."\n\n";
$email_message .= "State: ".$state."\n\n";
$email_message .= "Zip Code: ".$zip."\n\n";
$email_message .= "Phone Number: ".$phone."\n\n";
$email_message .= "Email Address: ".$email."\n\n";
$email_message .= "Additional Message: ".$message."\n\n";
$headers = 'From: PHP Form'."\r\n".
'Reply-To: N/A'."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
return true;
function test_input($data) {
$data = trim($data); //trims whitespace on both ends
$data = stripslashes($data); //removes extra slashes
$data = htmlspecialchars($data); //converts special characters to HTML equivalents
return $data; //returns cleaned data
}
?>
무엇이 잘못되었는지 보려면 메일 오류를 억제하지 않는다. 스크립트가 오류 메시지를 리턴하면 Ajax 콜백에 전달하십시오. '성공 : function (data) {alert (data);}' –
감사합니다. 내가 @ 명령으로 억압하고 있다는 것을 몰랐습니다. 나는 @mail()을 삭제하고 mail()로 변경했다. 나는 아직도 성공 메시지를 받는다. 오류는 표시되지 않습니다. –
내 답변에 제안을 참조하십시오. –