2014-09-25 102 views
0

我是网络开发新手,我试图将CAPTCHA放入我的网站。我坚持这一点。我找不到任何帮助。如何使用php和jquery验证CAPTCHA

以下是我的表单代码:

<tr> 
    <td> 
     <img src="html-contact-form-captcha/captcha_code_file.php?rand=<?php echo rand(); ?>" id='captchaimg' ><br> 
    </td> 
    </tr> 
    <tr> 
     <td align="right"><b> Enter Image Text </b></td> 
     <td><input placeholder="Enter the code above here" id="6_letters_code" name="6_letters_code" type="text"><br> 
      <small>Can't read the image? click <a href='javascript: refreshCaptcha();'>here</a> to refresh</small> 
     </td> 
    </tr> 

这同一页上,我试图验证此验证码通过下面的代码:

var cde = document.getElementById('6_letters_code'); 
    if(cde.value == "" || 
     ($_SESSION['6_letters_code'] != $_POST['6_letters_code'])) { 

       alert("Code Matched!"); 
       //alert("Code Doesn't Match! \n Code Not Entered!"); 
       return false; 
    } 

而这正是我得到我的验证码:(captcha.php)

session_start(); // Staring Session 
$captchanumber = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz'; // Initializing PHP variable with string 
$captchanumber = substr(str_shuffle($captchanumber), 0, 6); // Getting first 6 word after shuffle. 
$_SESSION["code"] = $captchanumber; // Initializing session variable with above generated sub-string 
$image = imagecreatefromjpeg("bj.jpg"); // Generating CAPTCHA 
$foreground = imagecolorallocate($image, 175, 199, 200); // Font Color 
imagestring($image, 5, 45, 8, $captchanumber, $foreground); 
header('Content-type: image/png'); 
imagepng($image); 

任何帮助,将不胜感激。

预先感谢您。

+0

我加密了captcha字符串:'$ captchanumber'把它放在一个会话中。然后,如果客户端输入它,发布的验证码在服务器端得到加密,并与会话进行比较。 – 2014-09-25 09:36:36

+0

你似乎在混合JavaScript和PHP代码。你不能这样做。 – 2014-09-25 09:36:37

+0

你不能在Javascript中使用PHP变量('$ _SESSION'和'$ _POST')。 – 2014-09-25 09:36:38

回答

0

请尝试下面的代码。我希望它的工作。我想从头开始编写代码: -

<?php session_start(); 
// Staring Session 
$im = imagecreate(90, 30); 
$bg = imagecolorallocate($im, 255, 255, 255); 
$textcolor = imagecolorallocate($im, 0, 0, 0); 

$captchaKey = substr(md5(time()), 0, 5); 
$_SESSION["code"] = $captchaKey; 
imagestring($im, 45, 20, 5, $captchaKey, $textcolor); 

//header("Content-type: image/png"); 
$save = "captcha.png"; 
$x1 = imagepng($im, $save); 
?> 

<script> 
    function checkCaptcha() { 
var cde = document.getElementById('6_letters_code'); 

if(cde.value == '<?php echo $_SESSION['code']; ?> 
    ') { 

    alert("Code Matched!"); 
    //alert("Code Doesn't Match! \n Code Not Entered!"); 
    return false; 
    } else { 
     alert('Code not matched!') 
     } 
    } 
</script> 

<tr> 
    <td><img src="captcha.png" id='captchaimg' > 
    <br> 
    </td> 
</tr> 
<tr> 
    <td align="right"><b> Enter Image Text </b></td> 
    <td> 
    <input placeholder="Enter the code above here" id="6_letters_code" name="6_letters_code" type="text"> 
    <br> 
    <button onclick="checkCaptcha()"> 
     Click to check 
    </button><small>Can't read the image? click <a href='javascript: refreshCaptcha();'>here</a> to refresh</small></td> 
</tr> 
+0

对不起,但这会将您的验证码直接放入HTML源代码中。所以,它可能有效,但很容易规避。 – 2014-09-25 10:00:35

+0

嗨Dinesh: 感谢您的时间,但它的兄弟还没有工作... – MaXx 2014-09-25 10:14:39

+0

验证部分有错误.. – MaXx 2014-09-25 10:15:29

1

在Javascript中

如果你要评估的验证码是在Javascript中,它在浏览器中通过PHP在生成的页面后运行正确的服务器,那么Javascript将不得不有办法检查它。

为此,您必须使用会话,您可以在其中存储验证码值。使用这些步骤:

  1. 在生成表单的PHP文件的开头,您应该选择一个验证码。您将其存储在会话变量中。

  2. 您在PHP中生成验证码的哈希值,并将其置于窗体的隐藏字段中。给这个字段一个适当的ID,所以你可以用Javascript找到它。

    $hash = sha1($captcha); // this is PHP code 
    
  3. 使用存储的会话变量生成验证码的图像。

  4. 遗憾的是,Javascript没有任何本机哈希算法。所以,现在

http://caligatio.github.io/jsSHA/

您还可以验证码的哈希值,这是由用户输入到表单,在Javascript:其他人已经解决了这一点。你需要做的就是检查它与PHP在表单隐藏字段中放置的散列值。如果他们匹配验证码是正确的。

正如你所看到的,这并不容易。

在PHP

这是比较容易做检查PHP中提交表单后。我想我可以假设你的作品captcha.php。在那里你将$captchanumber存储在用户的会话中。这是一个好主意。

因此,您制作表单,将验证码放入其中,并让用户提交。该检查将现在PHP来完成,像这样:

$captchaNumber = $_SESSION['code']; 
$userNumber = $_POST['6_letters_code']; // a name starting with number? eh?? 
if ($captchaNumber == $userNumber) 
{ 
    <.... the user did it correctly ....> 
} 
else 
{ 
    // it was the wrong code, back to the form 
    header('Location: '.<... url of form ...>); 
} 

header()功能应任何输出之前使用。对于初学者,我建议将表单提交给另一个PHP脚本。一旦工作,你可以尝试将表单脚本和提交脚本合并到一个PHP脚本中。

+0

我很抱歉...这一切都在我的头上.. 你说,它更容易做PHP中的检查..你能给一个例子.. ..? – MaXx 2014-09-25 10:21:57

+0

我添加了PHP示例。 – 2014-09-25 12:09:39