我有点困惑,越来越担心。我在这个实时网站上找到了一封电子邮件简报注册表: http://rattletree.com/
请注意,如果您去那里,并尝试单击发送而不至少输入一些值,则会收到错误消息。另外,在这种情况下,我没有收到电子邮件。我能够收到电子邮件的唯一方法是,如果我付出一些价值。但出于某种原因,我偶尔会收到发送给我的空值的电子邮件。它是非常间歇性的,我认为它是某种机器人以某种方式通过我的过滤器,但我真的想知道如何这种情况发生?
以下是代码:
<div class="outeremailcontainer">
<div id="emailcontainer">
<form action="index_success.php" method="post" id="sendEmail" class="email">
<h3 class="register2">Newsletter Signup:</h3>
<ul class="forms email">
<li class="name"><label for="yourName">Name: </label>
<input type="text" name="yourName" class="info" id="yourName" value="" /><br />
</li>
<li class="city"><label for="yourCity">City: </label>
<input type="text" name="yourCity" class="info" id="yourCity" value="" /><br />
</li>
<li class="email"><label for="emailFrom">Email: </label>
<input type="text" name="emailFrom" class="info" id="emailFrom" value="" />
</li>
<li class="buttons email">
<button type="submit" id="submit">Send</button>
<input type="hidden" name="submitted" id="submitted" value="true" />
</li>
</ul>
</form>
<div class="clearing">
<script type="text/javascript">
$(document).ready(function(){
$('#emailFrom')
.focus(function(){
if ($('#overlay').length) { return; } // don't keep adding overlays if one exists
$('#sendEmail')
.find('.name, .city').slideDown(300, function(){ $(this).show(); });
$('.outeremailcontainer').css({ position: 'relative', bottom: 0, left: 0, zIndex : 1001 });
$('<div id="overlay"></div>').appendTo('body');
});
$('#overlay').live('click', function(){
$('#sendEmail')
.css({ backgroundColor : 'transparent' })
.find('.name, .city').slideUp(300);
$('.outeremailcontainer').css({ position : 'static' });
$('#overlay').remove();
});
});
</script>
以下是电子邮件验证:
$(document).ready(function(){
$('#emailFrom')
.focus(function(){
if ($('#overlay').length) { return; } // don't keep adding overlays if one exists
$('#sendEmail')
.find('.name, .city').slideDown(300, function(){ $(this).show(); });
$('.outeremailcontainer').css({ position: 'relative', bottom: 0, left: 0, zIndex : 1001 });
$('<div id="overlay"></div>').appendTo('body');
});
$('#overlay').live('click', function(){
$('#sendEmail')
.css({ backgroundColor : 'transparent' })
.find('.name, .city').slideUp(300);
$('.outeremailcontainer').css({ position : 'static' });
$('#overlay').remove();
});
});
$(document).ready(function(){
$("#submit").click(function(){
$(".error").hide();
var hasError = false;
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
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;
}
var yourNameVal = $("#yourName").val();
if(yourNameVal == '') {
$("#yourName").after('<span class="error">You forgot to enter your name.</span>');
hasError = true;
}
var yourCityVal = $("#yourCity").val();
if(yourCityVal == '') {
$("#yourCity").after('<span class="error">You forgot to enter your city.</span>');
hasError = true;
}
if(hasError == false) {
$(this).hide();
$("#sendEmail li.buttons").append('<img src="/wp-content/themes/default/images/template/loading.gif" alt="Loading" id="loading" />');
$.post("/includes/sendemail.php",
//emailTo: emailToVal,
{ emailFrom: emailFromVal, yourName: yourNameVal, yourCity: yourCityVal },
function(data){
$("#sendEmail").slideUp("normal", function() {
$("#sendEmail").before('<h3 class="register2">Success!</h3><p class="emailbox">You are on the Newsletter email list.</p>');
});
}
);
}
return false;
});
});
答案 0 :(得分:2)
您的验证基于JavaScript。 大多数机器人不使用JavaScript,因为他们对动态内容不感兴趣。作为测试,我使用NoScript禁用了JavaScript,并且无需输入任何内容即可提交表单。
永远不要相信您的客户,如果输入无效,您应该在服务器上进行验证并提供错误页面。
答案 1 :(得分:0)
这很简单 - 最终用户只是禁用JavaScript或使用众多开发人员插件中的一个来禁用/调整验证。
对于这些表单,您真的需要依靠服务器端验证才能获得有效的解决方案。
答案 2 :(得分:0)
您可能希望在所有内容之上使用字段验证程序。这是一个非常好的jQuery插件Validation
,它具有用于验证电子邮件的特定处理程序。请在此处查看:http://docs.jquery.com/Plugins/validation
例如,验证电子邮件很简单:
$("#sendMail").validate({
rules: {
"emailFrom":{
email:true
}
}
});