我需要一些帮助,因为我无法在我的表单中重新加载验证码图像,如果图像上的书写不是很清晰或易于阅读,有时会发生这种情况。
我在互联网上和周围阅读了很多关于此的内容,但我的问题与大多数人似乎必须面对的问题不同。事实上,我在一个名为 - 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);
}
因为它又错了。
你有什么想法吗?先感谢您。再见。