私はPHPのハックです。私がどこに間違っていたかを理解する助けになるので、Insightは非常に感謝しています。AjaxのコンタクトフォームでPHPの検証に失敗する
基本的に私はthis contact formを自分の目的に適合させました。 Javascriptの検証がうまくいきます! phpのバリデーションも正しく機能しているようです。それは自分のフォームから空白の投稿を始めてしまうまでのことでした。私はこのフォームにcaptchaを追加することを避けようとしています。空白の提出物は迷惑で、自分の適応で間違いをしていると誰かが指摘できれば、私はそれを愛するでしょう。あなたの時間をありがとう。
フォームHTML
<?php include('/ajax/verify.php');?>
<form action="/ajax/" method="post" id="sendEmail">
<h4>Contact Us</h4>
<p class="alert">* All fields are required</p>
<ol class="forms">
<li><label for="username">Your Name</label><input type="text" name="username" id="username" value="" /></li>
<li><label for="emailFrom">Your Email</label><input type="text" name="emailFrom" id="emailFrom" value="" /></li>
<li><label for="phonenumber">Phone Number</label><input type="text" name="phonenumber" id="phonenumber" value="" /></li>
<li><label for="message">Message</label><textarea name="message" id="message"></textarea></li>
<li class="buttons"><button type="submit" id="submit">Send Email »</button><input type="hidden" name="submitted" id="submitted" value="true" /></li>
</ol>
</form>
Javascriptを検証
//Ajax Form
$(document).ready(function(){
$("#submit").click(function(){
$(".error").hide();
var hasError = false;
var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/;
var phoneReg = /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/;
//from email
var emailFromVal = $("#emailFrom").val();
if(emailFromVal == '') {
$("#emailFrom").after('<span class="error">You forgot to enter the email address to send from.</span>');
hasError = true;
} else if(!emailReg.test(emailFromVal)) {
$("#emailFrom").after('<span class="error">Enter a valid email address to send from.</span>');
hasError = true;
}
//name
var usernameVal = $("#username").val();
if(usernameVal == '') {
$("#username").after('<span class="error">You forgot to enter your name.</span>');
hasError = true;
}
//phone
var phonenumberVal = $("#phonenumber").val();
if(phonenumberVal == '') {
$("#phonenumber").after('<span class="error">You forgot to enter your phone number.</span>');
hasError = true;
} else if(!phoneReg.test(phonenumberVal)) {
$("#phonenumber").after('<span class="error">Enter a valid phone number.</span>');
hasError = true;
}
//message
var messageVal = $("#message").val();
if(messageVal == '') {
$("#message").after('<span class="error">You forgot to enter the message.</span>');
hasError = true;
}
if(hasError == false) {
$(this).hide();
$("#sendEmail li.buttons").append('<img src="/ajax/img/ajax-loader.gif" alt="Loading" id="loading" />');
$.post("/ajax/sendEmail.php",
{ emailFrom: emailFromVal, username: usernameVal, phonenumber: phonenumberVal, message: messageVal },
function(data){
$("#sendEmail").slideUp("normal", function() {
$("#sendEmail").before('<h4 class="success">Thank You</h4><p class="success">One of our highly trained staff will contact with you shortly.</p>');
});
}
);
}
return false;
});
});
確認しスクリプト(PHP)
if(isset($_POST['submitted'])) {
if($_POST['emailFrom'] == '') {
$emailFromError = 'You forgot to enter the email address to send from.';
} else if (!eregi("^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", $_POST['emailFrom'])) {
$emailFromError = 'Enter a valid email address to send from.';
}
if($_POST['phonenumber'] == '') {
$emailFromError = 'You forgot to enter the email address to send from.';
} else if (!eregi("/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/$", $_POST['phonenumber'])) {
$emailFromError = 'Enter a valid email address to send from.';
}
if($_POST['message'] == '') {
$messageError = 'You forgot to enter the message.';
}
if($_POST['username'] == '') {
$messageError = 'You forgot your name.';
}
if(!isset($emailFromError) && !isset($messageError)) {
include('sendEmail.php');
include('thanks.php');
}
}
Mailscript
$mailTo = '[email protected]';
$mailFrom = $_POST['emailFrom'];
$username = $_POST['username'];
$phonenumber = $_POST['phonenumber'];
$subject = "New website inquiry from $username";
$message = $_POST['message'];
$message = wordwrap($message, 70);
$messagebody = "From: $username Phone Number: $phonenumber $message";
mail($mailTo, $subject, $messagebody, "From: ".$mailFrom);
いつ/あなたはあなたのPHP検証スクリプトを呼び出していますか? – jeroen
Apacheログには何が表示されますか? (「eregi」を使用しないという提案以外。 – cwallenpoole
@jeroenまあ...それは確かに問題の一部を説明するだろう。今更新しています。 –