나는 지금까지 아래 양식 확인을 성공적으로 사용 해왔다. 필드, 전자 메일 유효성 검사 및 스팸 허니팟이 필요합니다. 그러나 양식을 전혀 제출하지 않아도 내 고객 중 한 명이 공백 양식 결과를 얻고 있습니다. 어쩌면 나는 명백한 것을 보지 못할 것이다. 내가 생각하기에 아주 간단한 코드입니다. 누구든지 빨리 살펴보고 내가 놓친다면 알려주실 수 있습니까?양식 유효성 검사 및 허니팟 - 내 코드가 맞습니까?
다른 점은 스팸 로봇이 허니팟보다 더 똑똑해 졌습니까?
<script>
function verify() {
var themessage = "You are required to complete the following fields: ";
var x=document.form.email.value
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (document.form.address.value!="") {
themessage = "You are not human! No form for you!";
}
if (document.form.first_name.value=="") {
themessage = themessage + " - First Name";
}
if (document.form.last_name.value=="") {
themessage = themessage + " - Last Name";
}
if (document.form.email.value=="") {
themessage = themessage + " - E-mail";
}
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) {
themessage = "You need to enter a valid email address";
}
//alert if fields are empty and cancel form submit
if (themessage == "You are required to complete the following fields: ") {
document.form.submit();
}
else {
alert(themessage);
return false;
}
}
</script>
과 HTML : (떨어져 이메일에서) 필드에 공백을 넣는
<form name="form" method="post" action="output.php">
<div id="input">
<div id="field">First Name:</div>
<input name="first_name" type="text" id="first_name">
</div>
<div id="input">
<div id="field">Last Name:</div>
<input name="last_name" type="text" id="last_name">
</div>
<div id="input">
<div id="field">Email:</div>
<input name="email" type="text" id="email">
</div>
<div class="input address"><!-- This is the Honeypot -->
<div id="field">Address:</div>
<input name="address" type="text" id="address">
</div>
<div id="input">
<div id="field">Phone:</div>
<input name="phone" type="text" id="phone">
</div>
<div id="input">
<div id="field3">Comments:</div>
<textarea name="comments" id="comments"></textarea>
</div>
<input type="button" value="Submit" onclick="verify();">
</form>
전자 메일 필드를 포함하여 양식 결과가 모두 비어 있습니다. 코드 필드에 무언가가 올바르지 않거나 로봇이 더 똑똑 해지고 유효성 검사를 수행 할 방법이 있음을 알립니다. 내 코드에 따르면 이름과 성이 비어 있으면 양식이 통과되지 않아야합니까? – Julesfrog
빈칸으로는 chr (32)을 의미했습니다. 그러나 이메일도 비어 있다면, 나의 의심은 잘못되었습니다. –
입력하신 Eugen을 보내 주셔서 감사합니다. – Julesfrog