2011-02-08 1 views
0

Я сделал свой собственный класс captcha на PHP, просто чтобы узнать. Все нормально, работаю так, как я хочу. Я попытался добавить кнопку «Обновить изображение», но я не знаю, как это сделать.PHP и JavaScript: Reload captcha image

Код формы:

<p><img src="img.php" alt="Captcha!" /></p> 

код img.php:

<?php 
require_once 'captcha.class.php'; 
$captcha = Captcha::instance(10); 
echo $captcha; 
?> 

Метод __toString:

public function __toString() 
{ 
    ob_start(); 
    header('Content-Type: image/jpeg'); 
    imagejpeg($this->drawImage(), null, 100); 
    return ob_get_flush(); 
} 

Это код выведет капча. Как я могу обновить этот образ? Что-то в AJAX было бы здорово! Спасибо.

ответ

0

Как вы проверяете капчу, правильно, когда форма заполнена? Переменная сеанса?

Если это единственная переменная сеанса, вы можете просто обновить изображение, используя простой javascript. Добавление строки случайного запроса в конец URL-адреса изображения позволит избежать проблем с кешированием.

+0

Спасибо. Это работает! – thom

+0

:)), разве это не то, что делает код? –

0

Не могли бы вы перезагрузить вызов AJAX на страницу, которая создает новую капчу, возвращает вновь созданный результат в DIV?

+0

Мой класс captcha сбрасывает изображение, см. Выше, спасибо. – thom

0
<html> 
<head> 
<script type="text/javascript"> 
    function reload() 
    { 
     var img = new Image(); 
     img.src = 'img.php'; 
     var x = document.getElementById('captcha'); 
     x.src = img.src; 
    } 
</script> 
</head> 
<body> 
<a href="javascript: reload()" >Reload</a> 
<img src="img.php" alt="Captcha!" id="captcha" /> 
</body> 
</html> 

Может быть простая x.src = 'img.php' будет делать трюк, но только, чтобы быть уверена, что получит это новый запрос я сделал это с помощью другого изображения (это allso дает вам немного больше искать/учиться).

+0

Я всегда получаю то же изображение. Как насчет очистки кеша? Я попробую, спасибо. – thom

+0

не shure, если он исправит ошибку, но сделайте так, чтобы вы устанавливали заголовки в прошлом, когда вы выводили изображение из класса. smth like 'header (" Истекает: Сб, 26 июля 1997 года 05:00:00 GMT "); // Дата в прошлом', я полагаю, сделал бы трюк –

+0

Вам нужно на самом деле установить его на другой URL-адрес, а не просто на другое имя переменной (что бессмысленно). Я предлагаю нечто вроде '' img.php? Random = '+ Math.random() '. – igorw