我有联系表格。提交时,它使用AJAX加载" /forms/contact_received.php"给我发电子邮件&将用户的联系信息添加到数据库。数据库中10%的条目(以及相关的电子邮件)都没有电子邮件地址。
我似乎无法复制这个问题。有一段时间,我把表单发给我用户代理,希望他们都有相同的浏览器,但它是一个横截面,一些旅行,一些mozilla,一些IE,一些移动,一些桌面。此外,空白电子邮件提交似乎也不是恶意的,这些都是来自实际人类的合法问题。
我的脚本看起来像这样:
<script type="text/javascript">
function checkForm() {
hideAllErrors();
var formIsValid =
showErrorAndFocusIf('FieldData0', isEmpty, 'nameError')
&& showErrorAndFocusIf('FieldData2', isEmpty, 'emailError')
&& showErrorAndFocusIf('FieldData2', isAnInvalidEmail, 'emailError2')
&& showErrorAndFocusIf('FieldData1', isEmpty, 'questionError');
return formIsValid;
}
function showErrorAndFocusIf(fieldId, predicate, errorId) {
var field = document.getElementById(fieldId);
if (predicate(field)) {
document.getElementById(errorId).style.display = 'inline';
if (field.select) {
field.select();
}
field.focus();
return false;
}
return true;
}
function isEmpty(field) {
return field.value == '';
}
function isAnInvalidEmail(field) {
var email = field.value;
var ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
for(i = 0; i < email.length; i++){
if(ok.indexOf(email.charAt(i)) < 0) {
return true;
}
}
re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
return re.test(email) || !re_two.test(email);
}
function hideAllErrors() {
document.getElementById("nameError").style.display = "none"
document.getElementById("emailError").style.display = "none"
document.getElementById("emailError2").style.display = "none"
document.getElementById("questionError").style.display = "none"
}
</script>
和我的HTML看起来像这样:
<style>
.error{display:inline;margin:0;}
</style>
<form id="contact" name="contact" action="">
<b>Name</b>
<input class="valid" name="name" value="" maxlength="100" size="30" style="display:block;" type="text">
<b>Email</b> (will not be published)
<input class="error" name="email" value="" maxlength="100" size="30" style="display:block;" type="email">
<label class="error" generated="true" for="email">Please enter a valid email address</label>
<b>Question</b>
<textarea class="error" name="message" cols="50" rows="5" style="display:block;"></textarea>
<label class="error" generated="true" for="message">Please enter your message in the box above</label>
<input name="page" value="[URL]" type="hidden">
<input class="btn" value="Contact Us" name="Submit" type="submit">
</form>
我的验证可能失败的可能情况是什么?就像我说的那样,验证对我来说很好,我无法弄清楚它是如何被绕过的。
答案 0 :(得分:0)
如果您的检查仅在客户端完成,那么绕过它们是微不足道的。
例如,任何禁用了js的用户都不会收到任何警告,并会成功发布您的表单。
您还必须在服务器端检查值。
编辑:
最好的方法是始终在服务器端执行所有检查,返回解释问题的页面。
然后,使用javascript来改善用户体验,如果它被禁用,则回退到旧方法。