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