2014-09-25 228 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