我是jQuery的新手。使用php和jQuery驗證驗證碼和聯繫表格
我有一個帶有驗證碼驗證的html聯繫表單。
表單使用jQuery來驗證名稱,電子郵件地址和消息。
但我在集成captch驗證時遇到了問題。
的驗證碼是使用以下代碼來生成(由verifyimage.php
):
<?php
session_start();
error_reporting(0);
if(!function_exists("imagecreatefrompng"))
{
exit("You need to recompile with the GD library included in PHP for this feature to be able to function");
}
$alphanum = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
$rand = substr(str_shuffle($alphanum), 0, 6);
$image = imagecreatefrompng("../images/verify.png");
$textColor = imagecolorallocate($image, 150, 150, 150);
imagestring($image, 5, 14, 22, $rand, $textColor);
$_SESSION['image_random_value'] = md5($rand);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
?>
爲形式的HTML如下:
<!-- Contact Form -->
<div id="contactForm">
<form action="/contact.php" method="post">
<div class="oneThird">
<div class="row">
<label for="contactName">Full Name</label>
<input id="contactName" name="contactName" type="text" />
</div>
<div class="row topMargin">
<label for="contactEmail">Email Address</label>
<input id="contactEmail" name="contactEmail" type="text" />
</div>
<div class="row topMargin">
<label for="contactVerify">Captcha</label>
<input style="background-image: url(/php/verifyimage.php);" id="contactVerify" name="contactVerify" type="text" />
</div>
</div>
<div class="twoThird lastColumn">
<div class="row">
<label for="contactMessage">Message</label>
<textarea id="contactMessage" name="contactMessage" cols="10" rows="9"></textarea>
</div>
</div>
<div class="clearfix">
</div>
<button type="submit" class="colorButton">Send Message</button>
</form>
</div>
而jQuery包含有關驗證以下代碼表格名稱,電子郵件和消息部分:
// Contact
if ($('#contactForm').length != 0)
{
var labelName = $('#contactForm label[for="contactName"]').text();
var labelEmail = $('#contactForm label[for="contactEmail"]').text();
var labelMessage = $('#contactForm label[for="contactMessage"]').text();
var emailPattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
if ($('#contactVerify').length != 0)
{
var labelVerify = $('#contactForm label[for="contactVerify"]').text();
}
$('#contactForm button').click(function()
{
if ($('#contactName').val() == '')
{
$('#contactForm label[for="contactName"]').addClass('error').text(labelName + ' is required');
}
else
{
$('#contactForm label[for="contactName"]').removeClass('error').text(labelName);
}
if ($('#contactEmail').val() == '')
{
$('#contactForm label[for="contactEmail"]').addClass('error').text(labelEmail + ' is required');
}
else if (!emailPattern.test($('#contactEmail').val()))
{
$('#contactForm label[for="contactEmail"]').addClass('error').text(labelEmail + ' is invalid');
}
else
{
$('#contactForm label[for="contactEmail"]').removeClass('error').text(labelEmail);
}
if ($('#contactMessage').val() == '')
{
$('#contactForm label[for="contactMessage"]').addClass('error').text(labelMessage + ' is required');
}
else
{
$('#contactForm label[for="contactMessage"]').removeClass('error').text(labelMessage);
}
if (typeof labelVerify != 'undefined')
{
if ($('#contactVerify').val() == '')
{
$('#contactForm label[for="contactVerify"]').addClass('error').text(labelVerify + ' is required');
}
else
{
$('#contactForm label[for="contactVerify"]').removeClass('error').text(labelVerify);
}
}
if ($('#contactForm label.error').length == 0)
{
$('#contactForm form').append('<input type="hidden" value="1" name="contactValid" />');
}
else
{
return false;
}
});
}
我堅持如何實施驗證碼驗證。我是否將它包含在contact.php
表單中?
或者我可以在表單發佈之前驗證驗證碼嗎?像電子郵件地址是?
我試着加入:
<?php
session_start();
$cap = 'notEq';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (md5($_POST['contactVerify']) == $_SESSION['image_random_value']) {
// contactVerify verification is Correct. Do something here!
$cap = 'Eq';
} else {
// contactVerify verification is wrong. Take other action
$cap = '';
}
}
?>
到HTML表單的頂部。然後還加入:
var capch = '<?php echo $cap; ?>';
if(capch != 'notEq'){
if(capch == 'Eq'){
// My PHPMailer script //
}
else{
$('#contactForm label[for="contactVerify"]').addClass('error').text(labelVerify + ' is invalid');
}
}
});
作爲腳本。但沒有任何喜悅。無論驗證碼是否無效,表單都會被髮送。
任何幫助表示讚賞。
如果您想了解更多關於如何在AngularJS中執行此操作的詳細信息,我很樂意向您展示,並且可能會在源代碼中創建github帖子。如果您有興趣將其用於Web應用程序,可以查看我的AngularJS登錄樣板:https://github.com/kidovate/angularjsauthseed –
這很有幫助。我仍然會嘗試執行本地驗證碼,然後按照您的建議向javascript提交表單。 –