my captcha field
<p style="height:30px;"><img id="captcha" src="includes/secureimage/securimage_show.php?sid=<?php echo md5(time()); ?>" alt="CAPTCHA Image" />
<a tabindex="-1" style="border-style: none; margin-left:5px;" href="#" title="Refresh Image" onclick="document.getElementById('captcha').src = 'includes/secureimage/securimage_show.php?sid=' + Math.random(); return false"><img src="images/refresh.png" alt="Reload Image" onclick="this.blur()" style="vertical-align: top; border:0;" /></a></p></div>
<p><label for="seccode">Verification Code:<span class="important">*</span></label><input id="seccode" type="text" name="seccode" size="10" class="required" /></p>
my jquery validate plugin code for captcha
seccode: {
required: true,
remote: {
url: "checkuser.php",
type: "post",
data: {
seccode: function() {
//alert($("#seccode").val());
return $("#seccode").val();
}
}
}
}
my php
if($_POST['seccode'])
{
$securimage = new Securimage();
return $securimage->check($_POST['seccode']);
}
i am using securimage for captcha. message for required condition for captcha is working. but remote condition is not working. Ofcourse i have included required class file in php and also started session_start() in the start of php file.
[note] the error gone now. something new comes now. First time the captcha works when i focus out, but after that it continues to callback the validation method on each change.. see the firebug output below...
GET http://localhost:8080/property/html/captcha.php?seccode=pzubwg
GET http://localhost:8080/property/html/captcha.php?seccode=pzubwg
200 OK
36ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=l
GET http://localhost:8080/property/html/captcha.php?seccode=l
200 OK
39ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=ln
GET http://localhost:8080/property/html/captcha.php?seccode=ln
200 OK
41ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnr
GET http://localhost:8080/property/html/captcha.php?seccode=lnr
200 OK
36ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrg
GET http://localhost:8080/property/html/captcha.php?seccode=lnrg
200 OK
38ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgu
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgu
200 OK
32ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgue
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgue
200 OK
25ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgu
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgu
200 OK
34ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrg
GET http://localhost:8080/property/html/captcha.php?seccode=lnrg
200 OK
40ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgv
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgv
200 OK
42ms
jquery.min.js (line 140)
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgve
GET http://localhost:8080/property/html/captcha.php?seccode=lnrgve
200 OK
37ms
Basically when your jquery validates the captcha code, the captcha code is destroyed in the very same function where the validation occurs. Thats why i was getting the problem. The code works fine once you refresh the captcha again.
Validation requires you to return "true" if the remote validation was successful, also I prefer using different server-side checking for remote validations just like this demo.
So the captcha validation will be, post_captcha.php
:
<?php
session_start();
include_once 'securimage/securimage.php';
$securimage = new Securimage();
if ($securimage->check($_POST['seccode']) == false) {
// the code was incorrect
// handle the error accordingly with your other error checking
// or you can do something really basic like this
//die('The code you entered was incorrect. Go back and try again.');
echo "false";
} else {
echo "true";
}
?>
Open the demo link and with your firebug enabled and only submit the username field with any username and then check it with one of the taken usernames (for e.g. "asdf"), you will notice that the responses it just like my post_captcha.php
responses!
Ibrahim