如何仅重新加载验证码图像而不是整个页面

时间:2012-12-31 12:09:37

标签: php javascript

我需要一些帮助,因为我无法在我的表单中重新加载验证码图像,如果图像上的书写不是很清晰或不易阅读,有时可能会发生。

我在互联网上阅读了很多相关内容,但我的问题与大多数人似乎不得不面对的有所不同。事实上,我在名为 - captcha.php的页面中创建了验证码图像 - 然后在另一个名为 - contacts.php的页面中创建 - 我创建了图像的写入和我传递给captcha.php文件的随意唯一字符串,如我不想使用会话或cookie,但我使用的是一个名为 - validation的表的数据库。 在PHP中翻译所有这些,captcha.php有这个代码来检索字符串:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

try
    {
        $stmt = $pdo->prepare("SELECT * FROM validation WHERE url_key = ? AND expire_date > NOW()");

        $stmt->execute(array($_GET['token']));

        $row = $stmt->fetch(PDO::FETCH_ASSOC);          
    }
catch(PDOException $e)
    {
        echo "Error!: " . $e->getMessage() . "<br />";
        die(); 
    }       
etc.....

然后我的contacts.php有了这个:

 $url_key = sha1(uniqid(rand(), true)); 

    $captcha = random_string(4);

    try
        {
            $stmt = $pdo->prepare("INSERT INTO validation (id_validation, url_key, captcha, expire_date) VALUES ('', ?, ?, DATE_ADD(NOW(), INTERVAL 5 MINUTE))");

            $stmt->execute(array($url_key, $captcha));
        }
    catch(PDOException $e)
        {
            echo "Error!: " . $e->getMessage() . "<br />";
            die(); 
        }   

现在我确实需要刷新我的图像而不是整个contacts.php页面。 我知道你可以用Ajax做到这一点,但我对此并不了解。

我的contacts.php有标签img,向读者显示验证码:

 <img src="captcha.php?token=<?php echo $url_key; ?>" alt="" />

我试图以这种方式改变它:

  <img src="captcha.php?token=<?php echo $url_key; ?>" id="captcha" />
  <a href="#" onClick="return changeCaptcha('captcha')">Reload the image</a>

然后在我的脑子部分,我把这个Javascript代码:

  function changeCaptcha()
{
    document.getElementById('captcha').src = 'captcha.php' +
     Math.floor(Math.random()*100);
}

但它根本不起作用。 如果我点击链接,验证码就会完全消失。

我试着改变这个:

   <img src="captcha.php?token=<?php echo $url_key; ?>" id="captcha" />
   <a href="#" onClick="return reloadImg('captcha');">Reload the image</a>

然后使用新的Javascript文件,即:

  function reloadImg(id) {
   var obj = document.getElementById(id);
   var src = obj.src;
   var pos = src.indexOf('?');
   if (pos >= 0) {
   src = src.substr(0, pos);
  }  
  var date = new Date();
  obj.src = src + '?v=' + date.getTime();
  return false;
}

但即使这样也不行。问题出在-php echo $ url_key; - 因为我不知道如何对待这个。我不能这样做,例如:

  function changeCaptcha()
   {
    document.getElementById('captcha').src = 'captcha.php?token=<?php echo $url_key; ?>' +
    Math.floor(Math.random()*100);
}

因为它又错了。

你有什么想法吗? 先感谢您。 再见。

0 个答案:

没有答案