Foros del Web » Programando para Internet » PHP »

Actualizar el Captcha

Estas en el tema de Actualizar el Captcha en el foro de PHP en Foros del Web. Hola a Todos Tengo una Pequeña Dudad sobre los captcha en php mi Codigo es el siguiente Captcha.php Código PHP: <?php      @ session_start (); ...
  #1 (permalink)  
Antiguo 02/01/2009, 12:42
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Actualizar el Captcha

Hola a Todos Tengo una Pequeña Dudad sobre los captcha en php
mi Codigo es el siguiente
Captcha.php
Código PHP:
<?php
    
@session_start();
    unset(
$_SESSION["Captcha"]);
    
session_register("Captcha");
    class 
CaptchaCode
    
{
        var 
$Font "Captcha/font23.ttf";
        function 
GenerarCode($CantCar)
        {
            
$Letras "023456789ABCDEFJHIJKMNOPQRSTUVWXYZabcdefjhijkmnopqrstuvwxyz";
            
$Codigo "";
            for(
$i 0$i $CantCar$i++)
            {
                
$Codigo.=substr($Letras,rand(0,60),1);
            }
            return 
$Codigo;
        }
        function 
CaptchaCode($Width 150$Height 50,$CantCar )
        {
            
header('Content-type: image/gif');
            
$Code $this->GenerarCode($CantCar);//Generamos una clave al azar
            
$Size $Height*0.50;//Tamaño de Letra a Dar depende de el Alto del texto
            
$Fondo imagecreatefromgif("Captcha/11.gif");
            
$FondoSize getimagesize("Captcha/11.gif");
            
$Image imagecreatetruecolor($Width,$Height);
            
//Insertamos el Fondo con la Opacidad q le Asignemos Dandole un Posicion x e y
            
imagecopyresampled($Image,$Fondo0000$Width$Height,
                               
$FondoSize[0], $FondoSize[1] );
            
$LineaColor imagecolorallocate($Image100100100);                   
            
//Generando un Random de Lineas en el Fondo
            
for( $i=0$i<($Width $Height)/700$i++ ) 
            {
                
imageline($Imagemt_rand(0,$Width), mt_rand(0,$Height), mt_rand(0,$Width),
                         
mt_rand(0,$Height), $LineaColor);
            }
            
//Generando un Random de Puntos en el Fondo
            
for( $i=0$i<($Width $Height)/7$i++ ) 
            {
                
imagefilledellipse($Imagemt_rand(0,$Width), mt_rand(0,$Height), 11,
                 
$LineaColor);
            }
            
$Color imagecolorallocate($Image2040100);
            
$Text imagettfbbox($Size,0,$this->Font,$Code);
            
$x = ($Width $Text[4])/2;
            
$y = ($Height $Text[5])/2;
            
imagettftext($Image$Size5$x$y$Color$this->Font $Code);
            
imagegif($Image);
            
imagedestroy($Image);
            
$_SESSION["Captcha"] = $Code;
            
session_write_close();//Cierra la Sesion y Guarda los Datos
        
}
    }
    
$Width = isset($_GET["w"]) ? $_GET["w"] : 250;
    
$Height = isset($_GET["h"]) ? $_GET["h"] : 50;
    
$Car = isset($_GET["c"]) ? $_GET["c"] : 7;
    
$Captcha = new CaptchaCode($Width,$Height,$Car);
?>
con esto me genero un Captcha q va a ser reicibido en una imagen
y lo muestro en una imagen
Código PHP:
 <img id="ImgCaptcha" name="ImgCaptcha"
            
src="Captcha.php"/>
<
img src="../Imagenes/Adornos/reload.gif" width="22" height="22" class="MenImg"
            
title="Ver un Nuevo Conjunto de Caracteres"
             
onclick="CambiarCar('ImgCaptcha');"/> 
el Js es el Siguiente
Código PHP:
function CambiarCar(img)
{
    var 
Obj document.getElementById(img);
    if (!
ObjObj window.document.all.ImgCaptcha;
    if(
Obj)
    {
        
Obj.src "Captcha.php";
    }

Mi problema es q al hacerle click ala imagen reload.gif la imagen de captcha no cambia he tratado de mil formas de ver porq no cambia quisiera ayuda estoy deseperado
me han dicho q tal vez pueda ser la sesion pero no se como hacerlo ni tengo idea de otro planteamiento por favor ayuda
  #2 (permalink)  
Antiguo 02/01/2009, 12:48
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: Actualizar el Captcha

Fijate si con esto funciona (por si es la cache):

Código:
function CambiarCar(img)
{
    var Obj = document.getElementById(img);
    if (!Obj) Obj = window.document.all.ImgCaptcha;
    if(Obj)
    {
var date = new Date();
var timestamp = date.getTime();


        Obj.src = "Captcha.php?time="+timestamp;
    }
}
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #3 (permalink)  
Antiguo 02/01/2009, 13:12
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Actualizar el Captcha

Gracias hgp147 el problema consistia el cache del navegador por fin me salio agrege lo q me dijiste y todo me corre Ok aqui les dejo el codigo modificado en caso les sirva a alguien
Captcha.php
Código PHP:
@session_start();
    class 
CaptchaCode
    
{
        var 
$Font "Captcha/font23.ttf";
        function 
GenerarCode($CantCar)
        {
            
$Letras "023456789ABCDEFJHIJKMNOPQRSTUVWXYZabcdefjhijkmnopqrstuvwxyz";
            
$Codigo "";
            for(
$i 0$i $CantCar$i++)
            {
                
$Codigo.=substr($Letras,rand(0,60),1);
            }
            return 
$Codigo;
        }
                
//Esta Funcion me Permite Averiguar si ya existe la sesion Captcha
        
function isSesion()
        {
            if(isset(
$_SESSION["Captcha"]))unset($_SESSION["Captcha"]);
            
session_register("Captcha");
        }
        function 
CaptchaCode($Width 150$Height 50,$CantCar )
        {
            
$Code $this->GenerarCode($CantCar);//Generamos una clave al azar
            
$this->isSesion();//Verifico la variable de sesion si ya existe esto me ayuda para q no queden datos grabados asi q si existe lo elimino y creo uno nuevo
            
$_SESSION["Captcha"] = $Code;
                        
//Elimino la cache por si queda grabada para evitarme problemas
            
header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
            
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
            
header("Cache-Control: no-store, no-cache, must-revalidate");
            
header("Cache-Control: post-check=0, pre-check=0"false);
            
header("Pragma: no-cache");
            
header('Content-type: image/gif');
            
$Size $Height*0.50;//Tamaño de Letra a Dar depende de el Alto del texto
            
$Fondo imagecreatefromgif("Captcha/11.gif");
            
$FondoSize getimagesize("Captcha/11.gif");
            
$Image imagecreatetruecolor($Width,$Height);
            
//Insertamos el Fondo con la Opacidad q le Asignemos Dandole un Posicion x e y
            
imagecopyresampled($Image,$Fondo0000$Width$Height,
                               
$FondoSize[0], $FondoSize[1] );
            
$LineaColor imagecolorallocate($Image100100100);                   
            
//Generando un Random de Lineas en el Fondo
            
for( $i=0$i<($Width $Height)/700$i++ ) 
            {
                
imageline($Imagemt_rand(0,$Width), mt_rand(0,$Height), mt_rand(0,$Width),
                         
mt_rand(0,$Height), $LineaColor);
            }
            
//Generando un Random de Puntos en el Fondo
            
for( $i=0$i<($Width $Height)/7$i++ ) 
            {
                
imagefilledellipse($Imagemt_rand(0,$Width), mt_rand(0,$Height), 11,
                 
$LineaColor);
            }
            
$Color imagecolorallocate($Image2040100);
            
$Text imagettfbbox($Size,0,$this->Font,$Code);
            
$x = ($Width $Text[4])/2;
            
$y = ($Height $Text[5])/2;
            
imagettftext($Image$Size5$x$y$Color$this->Font $Code);
            
imagegif($Image);
            
imagedestroy($Image);
            
session_write_close();//Cierra la Sesion y Guarda los Datos
        
}
    }
    
$Width = isset($_GET["w"]) ? $_GET["w"] : 250;
    
$Height = isset($_GET["h"]) ? $_GET["h"] : 50;
    
$Car = isset($_GET["c"]) ? $_GET["c"] : 7;
    
$Captcha = new CaptchaCode($Width,$Height,$Car); 
Registro.php
Código PHP:
......
 <
img id="ImgCaptcha" name="ImgCaptcha"
            
src="Captcha.php"/>
<
img src="../Imagenes/Adornos/reload.gif" width="22" height="22" class="MenImg"
            
title="Ver un Nuevo Conjunto de Caracteres"
             
onclick="CambiarCar('ImgCaptcha');"/>  
...... 
aqui va el js q ha sido corregido

Código PHP:
function CambiarCar(img)
{
    var 
Obj document.getElementById(img);
    if (!
ObjObj window.document.all.ImgCaptcha;
    if(
Obj)
    {
        var 
date = new Date();
        var 
Time date.getTime();
        
Obj.src "Captcha.php?Time="+Time;
    }

Ahora el Captcha si Cambia Gracias a Todos
  #4 (permalink)  
Antiguo 02/01/2009, 16:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Actualizar el Captcha

Hola:

No puedo creer que se siga usando document.all... (¿y los navegadores que no sean MS...? )

Aparte de la cuestión del parámetro fantasma para evitar la caché, se podría usar la propia imagen para cambiar ese código:

<img src="captcha.php?n=<?=rand(...);?>" onclich="this.src = 'captcha.php?n=' + Marh.random()"...

En mi página hay algo similar (ver perfil)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:47.