1

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

我在互联网上和周围阅读了很多关于此的内容,但我的问题与大多数人似乎必须面对的问题不同。事实上,我在一个名为 - captcha.php - 的页面中创建验证码图像,然后在另一个名为 -contacts.php 的页面中 - 我为图像创建文字和一个随意的唯一字符串,我将其传递给 captcha.php 文件,如我不想使用会话或 cookie,而是使用带有名为 - 验证的表的数据库。用 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>

然后在我的 head 部分,我放了这个 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);
}

因为它又错了。

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

4

0 回答 0