2017-06-16 7 views
2

Ich habe eine Validierung Formular mit Javascript. Es muss den Namen, die E-Mail-Adresse und das Captcha validieren. Aber durch meine Validierungsfunktion werden der Name und die E-Mail validiert, aber die captcha wird nicht validiert nach der onclick der Schaltfläche senden.Javascript Captcha Code funktioniert nicht

folgende Funktionen zeigen meinen Code:

<script type="text/javascript"> 
function validateform(){ 
var cm_name=document.supportus_form.cm_name.value; 
var cm_email=document.supportus_form.cm_email.value; 
var atpos = cm_email.indexOf("@"); 
var dotpos = cm_email.lastIndexOf("."); 


if (cm_name==null || cm_name=="") 
{ 
    alert("Name can't be blank"); 
    return false; 
} 
else if(atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
{ 
    alert("Not a valid e-mail address"); 
    return false; 
} 
var why = ""; 

if(theform.CaptchaInput.value == ""){ 
why += "- Please Enter CAPTCHA Code.\n"; 
} 
if(theform.CaptchaInput.value != ""){ 
if(ValidCaptcha(theform.CaptchaInput.value) == false){ 
why += "- The CAPTCHA Code Does Not Match.\n"; 
} 
} 
if(why != ""){ 
alert(why); 
return false; 
} 
} 

var a = Math.ceil(Math.random() * 9)+ ''; 
var b = Math.ceil(Math.random() * 9)+ ''; 
var c = Math.ceil(Math.random() * 9)+ ''; 
var d = Math.ceil(Math.random() * 9)+ ''; 
var e = Math.ceil(Math.random() * 9)+ ''; 

var code = a + b + c + d + e; 
document.getElementById("txtCaptcha").value = code; 
document.getElementById("CaptchaDiv").innerHTML = code; 

// Validate input against the generated number 
function ValidCaptcha(){ 
var str1 = removeSpaces(document.getElementById('txtCaptcha').value); 
var str2 = removeSpaces(document.getElementById('CaptchaInput').value); 
if (str1 == str2){ 
return true; 
}else{ 
return false; 
} 
} </script> 

Das Folgende ist mein HTML-Code für das Formular, das ich verwende:

<form class="form-horizontal" role="form" action='<?php echo 
site_url(); ?>/Welcome/insert_support_info' method="post" enctype="multipart/form-data" onsubmit="return validateform()" name="supportus_form"> 
         <br style="clear:both"/> 
          <h3 style="margin-bottom: 25px; text-align: center;"><u>Let us Know your Interest</u></h3> 
           <div class="form-group"> 
            <input type="text" class="form-control" name="cm_name" id="fullname" placeholder="Enter Your Name"/> 
            <input type="text" class="form-control" name="cm_email" id="email" placeholder="Enter Your E-Mail"/> 
            <input type="text" class="form-control" name="cm_phone" id="phone" placeholder="Enter Your Phone Number or Mobile Number"/> 


           <textarea class="form-control" name="cm_message" id="message" rows="3" placeholder="Add your Query"></textarea> 
           <span class="help-block"><p id="characterLeft" class="help-block ">Limit - 100 words</p></span> 
           <input class="form-control" name="datetime" value="<?php 
            date_default_timezone_set('Asia/Kolkata'); 
            $date = date('m/d/Y h:i:s a', time()); echo $date; 
           ?>" type="hidden" /> 
           <!-- START CAPTCHA --> 
<br> 
<div class="capbox"> 

<div id="CaptchaDiv"></div> 

<div class="capbox-inner"> 
Type the above number:<br> 

<input type="hidden" id="txtCaptcha"> 
<input type="text" name="CaptchaInput" id="CaptchaInput" size="15"><br> 

</div> 
</div> 
<br><br> 
<!-- END CAPTCHA --> 

           <button type="submit" class="btn btn-success">Submit</button> &nbsp;&nbsp;&nbsp; 
           </div> 
           <hr/> 

         </form> 

ich die CSS gehalten habe das Captcha Formular zu zeigen,

<style> 
    .capbox { 
    background-color: #92D433; 
    border: #B3E272 0px solid; 
    border-width: 0px 12px 0px 0px; 
    display: inline-block; 
    *display: inline; zoom: 1; /* FOR IE7-8 */ 
    padding: 8px 40px 8px 8px; 
    } 

.capbox-inner { 
    font: bold 11px arial, sans-serif; 
    color: #000000; 
    background-color: #DBF3BA; 
    margin: 5px auto 0px auto; 
    padding: 3px; 
    -moz-border-radius: 4px; 
    -webkit-border-radius: 4px; 
    border-radius: 4px; 
    } 

#CaptchaDiv { 
    font: bold 17px verdana, arial, sans-serif; 
    font-style: italic; 
    color: #000000; 
    background-color: #FFFFFF; 
    padding: 4px; 
    -moz-border-radius: 4px; 
    -webkit-border-radius: 4px; 
    border-radius: 4px; 
    } 

#CaptchaInput { margin: 1px 0px 1px 0px; width: 135px; } 

    </style> 

Mit dem obigen Code funktioniert das Captcha nicht. Ich verwende Captcha zum ersten Mal.

+4

Haben Sie erkennen, dass jemand (ein Spam-Bot einschließlich) auf dem Captcha betrügen, indem man sich die Quelle der Seite suchen und zu sehen, was in dem txtCaptcha versteckten Feld ist? Eine bessere Lösung könnte sein, eine etablierte Captcha-Lösung wie Google ReCaptcha zu verwenden, die die Validierung sicher auf einem Remote-Server durchführt. – ADyson

+0

@ADyson, bitte hilf mir, das zu tun. Wie funktioniert Google ReCaptcha? Ich bin neu in diesem .. – Keynes

+3

Sie können die Anleitung auf ihrer Website folgen: https://www.google.com/recaptcha/intro/ ist das allgemeine Intro, und https://developers.google.com/recaptcha/ enthält die Anleitung für Entwickler. Es ist kostenlos zu benutzen. Wenn Sie es implementieren und es nicht als eine Frage hier mit Ihrem Code arbeiten lassen. – ADyson

Antwort

2

Hey Sie verwenden bedingte Tags in nicht ordnungsgemäßer Weise. Das führt zu unbekannten Fehlern. Der folgende Javascript-Code funktioniert korrekt.

function validateform(){ 
    var cm_name=document.supportus_form.cm_name.value; 
    var cm_email=document.supportus_form.cm_email.value; 
    var atpos = cm_email.indexOf("@"); 
    var dotpos = cm_email.lastIndexOf("."); 
    var captha = document.getElementById("txtCaptcha").value; 
    var capthaValue = document.getElementById('CaptchaInput').value.replace(/ /g,''); 
    console.log(typeof captha); 
    if(capthaValue == "" || captha != capthaValue) { 
     validCaptcha() 
    } 

    if (cm_name==null || cm_name=="") 
    { 
     alert("Name can't be blank"); 
     return false; 
    } 
    else if(atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
    { 
     alert("Not a valid e-mail address"); 
     return false; 
    } 
    function validCaptcha() { 
     var why = ""; 
     if(capthaValue == ""){ 
      why += "- Please Enter CAPTCHA Code.\n"; 
     } 
     if(capthaValue != ""){ 
      if((captha != capthaValue) == false){ 
       why += "- The CAPTCHA Code Does Not Match.\n"; 
      } 
     } 
     if(why != ""){ 
     alert(why); 
     return false; 
     } 
    } 
} 

var a = Math.ceil(Math.random() * 9)+ ''; 
var b = Math.ceil(Math.random() * 9)+ ''; 
var c = Math.ceil(Math.random() * 9)+ ''; 
var d = Math.ceil(Math.random() * 9)+ ''; 
var e = Math.ceil(Math.random() * 9)+ ''; 

var code = a + b + c + d + e; 
document.getElementById("txtCaptcha").value = code; 
document.getElementById("CaptchaDiv").innerHTML = code; 
+0

oh du bist ein bisschen spät dran, aber egal wie ich mit diesem Code oben testen werde ..! – Keynes

+0

@Keynes Ok Sicher Wenn es einen Fehler gibt, lassen Sie es mich wissen –

+2

@VijayKumarB Dies könnte den Code beheben, aber ich möchte für zukünftige Leser bemerken, dass es nicht die Tatsache ändert, dass das Design grundlegend fehlerhaft ist. Das liegt daran, dass die Antwort auf das Captcha in der Quelle der Seite selbst enthalten ist, wodurch es unsicher wird und das Ergebnis nicht vertrauenswürdig ist. Darüber hinaus kann jede vollständig clientseitige Validierung überhaupt nicht vertrauenswürdig sein, da ein böswilliger Benutzer den Code (mithilfe der Entwicklertools) einfach ändern könnte, um die Prüfung zu umgehen, und ein Bot könnte das Skript vollständig umgehen und das Formular direkt senden. Die serverseitige Validierung von _all_ Daten sollte immer auch erfolgen – ADyson

Verwandte Themen