Foros del Web » Programando para Internet » PHP »

APORTE: Sistema de Captcha

Estas en el tema de APORTE: Sistema de Captcha en el foro de PHP en Foros del Web. Saludos a todos. Estoy por ausentarme un tiempo del foro, y no quería dejar este proyecto inconcluso. Se trata de una clase basada en PHP ...

  #1 (permalink)  
Antiguo 29/03/2008, 20:17
okram
Invitado
 
Mensajes: n/a
Puntos:
APORTE: Sistema de Captcha

Saludos a todos. Estoy por ausentarme un tiempo del foro, y no quería dejar este proyecto inconcluso. Se trata de una clase basada en PHP y GD que genra códigos e imágenes Captcha. Entre sus principales características están:
  • Es fácilmente adaptable a un formulario HTML/PHP terminado.
  • Permite el uso de fuentes e imágenes de fondo para generar la imagen Captcha.
  • Permite el uso de un archivo externo con códigos que se desee usar.
  • Los caracteres usados, así como la longitud de la cadena Captcha son configurables.
  • Incluye un filtro de dificultad configurable que distorciona la imagen y el texto.
  • Incluye funciones de almacenamiento y verificación del código Captcha.
  • Otras funciones que incrementan la seguridad del sistema.
  • Está presentado como un objeto, por lo tanto se presta a modularización y extendibilidad.
En su forma más simple genera esta imagen:



y con algo de personalización puede generar imágenes similares a esta:



(Ambas muestras son generadas en tiempo real, y pueden ser cambiadas recargando esta página)

En la página web del script se encuentra un pequeño tutorial sobre su uso y su configuración, así como algunos ejemplos. Desde allí se puede descargar el script y también un juego de fuentes y fondos que se pueden emplear con el script.

http://phperu.net/captcha

Saludos,

Última edición por okram; 31/12/2008 a las 11:08 Razón: Cambiando URLs
  #2 (permalink)  
Antiguo 30/03/2008, 05:51
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Re: APORTE: Sistema de Captcha

Cita:
Iniciado por okram Ver Mensaje
Saludos a todos. Estoy por ausentarme un tiempo del foro, y no quería dejar este proyecto inconcluso. Se trata de una clase basada en PHP y GD que genra códigos e imágenes Captcha. Entre sus principales características están:
  • Es fácilmente adaptable a un formulario HTML/PHP terminado.
  • Permite el uso de fuentes e imágenes de fondo para generar la imagen Captcha.
  • Permite el uso de un archivo externo con códigos que se desee usar.
  • Los caracteres usados, así como la longitud de la cadena Captcha son configurables.
  • Incluye un filtro de dificultad configurable que distorciona la imagen y el texto.
  • Incluye funciones de almacenamiento y verificación del código Captcha.
  • Otras funciones que incrementan la seguridad del sistema.
  • Está presentado como un objeto, por lo tanto se presta a modularización y extendibilidad.
En su forma más simple genera esta imagen:



y con algo de personalización puede generar imágenes similares a esta:



(Ambas muestras son generadas en tiempo real, y pueden ser cambiadas recargando esta página)

En la página web del script se encuentra un pequeño tutorial sobre su uso y su configuración, así como algunos ejemplos. Desde allí se puede descargar el script y también un juego de fuentes y fondos que se pueden emplear con el script.

http://www.phperu.net/phpcaptcha

Saludos,
Espléndido! Sorprendete! Guapisiiiiiiimo! sin palabras Okram!

Fabuloso, me has dejado con la boca abierta viendo todas las configuraciones que puedes añadirle y tan fácil configuración!

Qué quieres aumentar la dificultad, pam, que quieres mas lineas pam, que quieres usar fondos pam! tremendo.

Un 10
  #3 (permalink)  
Antiguo 30/03/2008, 05:58
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Re: APORTE: Sistema de Captcha

Lo que no he conseguido es hacer las letras mas pequeñas


Código PHP:

<?php

include_once 'PHPCaptcha.lib.php';

$captcha = new Captcha;
$captcha->confCaptcha("fuentes","fuentes");
$captcha->confCaptcha("tamano",10);
$captcha->confCaptcha("fondos","fondos");
$captcha->confCaptcha("dificultad",8);
$captcha->confCaptcha("nlineas",50);
$captcha->confCaptcha("clineas",true);
$captcha->confCaptcha("ancho",180); 
$captcha->confCaptcha("alto",50);

$captcha->generaCaptcha();
$captcha->muestraCaptcha();

?>
Me gustaría que el tamaño fuese 180x50 , entonces se me cortan las letras, intento reducir el tamaño del texto pero no cambia
  #4 (permalink)  
Antiguo 30/03/2008, 09:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 188
Antigüedad: 18 años, 11 meses
Puntos: 6
De acuerdo Re: APORTE: Sistema de Captcha

Cita:
Iniciado por okram Ver Mensaje
Saludos a todos. Estoy por ausentarme un tiempo del foro, y no quería dejar este proyecto inconcluso. Se trata de una clase basada en PHP y GD que genra códigos e imágenes Captcha. Entre sus principales características están:
  • Es fácilmente adaptable a un formulario HTML/PHP terminado.
  • Permite el uso de fuentes e imágenes de fondo para generar la imagen Captcha.
  • Permite el uso de un archivo externo con códigos que se desee usar.
  • Los caracteres usados, así como la longitud de la cadena Captcha son configurables.
  • Incluye un filtro de dificultad configurable que distorciona la imagen y el texto.
  • Incluye funciones de almacenamiento y verificación del código Captcha.
  • Otras funciones que incrementan la seguridad del sistema.
  • Está presentado como un objeto, por lo tanto se presta a modularización y extendibilidad.

...

En la página web del script se encuentra un pequeño tutorial sobre su uso y su configuración, así como algunos ejemplos. Desde allí se puede descargar el script y también un juego de fuentes y fondos que se pueden emplear con el script.

http://www.phperu.net/phpcaptcha

Saludos,
Increíble Esto hay que probarlo

Hace un tiempo me hice una clase para generar captchas. Pero lo único que hace es generar la imagen a partir de una cadena aleatoria. Tengo que probar el tuyo, que le da mil vueltas al mío... Gracias !!

Suscribo lo dicho por neodani, un 10
  #5 (permalink)  
Antiguo 30/03/2008, 12:58
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: APORTE: Sistema de Captcha

Gracias por los comentarios

Cita:
Iniciado por neodani Ver Mensaje
Lo que no he conseguido es hacer las letras mas pequeñas
Código PHP:
$captcha->confCaptcha("tamano",10); 
Me gustaría que el tamaño fuese 180x50 , entonces se me cortan las letras, intento reducir el tamaño del texto pero no cambia
La configuración del tamaño del texto debes hacerla usando la palabra "tamaño" y no "tamano" (EDITO: hay un error en eso en el tutorial, que dice que se debe usar tamano en vez de tamaño, arreglaré eso ):

Código PHP:
$captcha->confCaptcha("tamaño",10); 
Además, recuerda que para que apliquen los ajustes de tamaño de texto debes usar la opción de fuentes (Veo que si la usas ) Al usar la fuente del sistema el script ajusta el tamaño de la fuente para que entre todo el código en la imagen.

Saludos,
  #6 (permalink)  
Antiguo 30/03/2008, 15:28
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Re: APORTE: Sistema de Captcha

Cita:
Iniciado por okram Ver Mensaje
Gracias por los comentarios


La configuración del tamaño del texto debes hacerla usando la palabra "tamaño" y no "tamano" (EDITO: hay un error en eso en el tutorial, que dice que se debe usar tamano en vez de tamaño, arreglaré eso ):

Código PHP:
$captcha->confCaptcha("tamaño",10); 
Además, recuerda que para que apliquen los ajustes de tamaño de texto debes usar la opción de fuentes (Veo que si la usas ) Al usar la fuente del sistema el script ajusta el tamaño de la fuente para que entre todo el código en la imagen.

Saludos,
Solucionado pues.

Gracias crack!
  #7 (permalink)  
Antiguo 31/03/2008, 14:21
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Re: APORTE: Sistema de Captcha

Excelente, muchas gracias por el aporte :hifive:
  #8 (permalink)  
Antiguo 07/04/2008, 12:42
 
Fecha de Ingreso: octubre-2007
Mensajes: 14
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

hola...
alguien podria ponerme un ejemplo de como adaptar el captcha a un simple formulario de html es que no consigo verlo claro en la web del autor

muchas gracias
  #9 (permalink)  
Antiguo 07/04/2008, 16:18
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: APORTE: Sistema de Captcha

El formulario HTML lo procesas procesa en una página PHP cierto? Para insertar el captcha en el formulario simplemente hazlo como cualquier otra imagen. Creas un archivo captcha.php, allí instancias la clase, generas el captcha, y lo muestras; y es ese archivo el que pondrás el un tag <img> en tu formulario. Creas un campo de texto donde el usuario ingresará el código. Luego, cuando procesas el formulario, haces la comprobación usando el método verificaCaptcha() tal y como lo pongo en el tutorial y en el ejemplo que allí hay.

Si tienes más dudas, publica el código de tu formulario para ayudarte a integrarlo un poco.

Un saludo,
  #10 (permalink)  
Antiguo 08/04/2008, 11:11
 
Fecha de Ingreso: octubre-2007
Mensajes: 14
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

mejor me explicas un poco:

este formulario esta en una pagina html a secas, entonces que archivos tengo que adjuntarle y que cambios hago?

muchas gracias de verdad por vuestra ayuda


Código:
<form action="/cgi-sys/guestbook.cgi" target=guestwindow onSubmit="return enviado()">

                          <p>

  <input type="hidden" name="user" value="xxxxxxxxxx">

  <input type="hidden" name="action" value="addguest">

  <input type="hidden" name="basehref" value="http://xxxxx.org">

  <input type="hidden" name="template" value="default">

                          <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong><span class="Estilo15">* </span><span class="Estilo4">Nome:</span><strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /><img src="imaxes/2t3.jpg" /><img src="imaxes/2t3.jpg" /><img src="imaxes/2t3.jpg" /><img src="imaxes/2t3.jpg" /></span><span class="Estilo15">*</span></strong> <span class="Estilo17">Campos requeridos</span><br>

                            <input name="name" type="text" class="Estilo3" size="35"><br>

                            

                            <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong><span class="Estilo15">*</span><span class="Estilo4"> Email:</span><br>

                            <input name="email" type="text" class="Estilo3" size="35"><br>

                            

                            <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong><span class="Estilo4">Web:</span><br>

                            <input name="url" type="text" class="Estilo3" size="35">

                            <br>

                            <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong><span class="Estilo15">*</span> <span class="Estilo4">Comentarios:</span><br>

                            <textarea name="comments" cols="35" rows="5" class="Estilo12"></textarea>

                            <br>

                            <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong>

                            <input type="submit" class="Estilo1" value="Asinar libro">

                            <strong><span class="Estilo6"><img src="imaxes/2t3.jpg" /></span></strong>

                            <INPUT TYPE="RESET" class="Estilo1" VALUE="Borrar">
                          </p>

                          </form>
enviado() es este javascript:


Código:
</script>

<script LANGUAGE="JavaScript">

<!-- Begin

var cuenta=0;

function enviado() { 

if (cuenta == 0){

cuenta++;

return true;

}else{

alert("Libro xa asinado :-D");

return false;

}

}

// End -->

</script>
  #11 (permalink)  
Antiguo 22/04/2008, 17:26
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Re: APORTE: Sistema de Captcha

hola okram:
estoy testeando tu aporte y la verdad esta muy bueno pero tengo un par de dudas que espero me pudas ayudar:
Yo uso tu sistema para loguear los administradores de mi web, el problema que tengo es que nose como hacer para que una vez dentro de la administración si quiere ir al inicio de la web y volver despues a la administracion no me pida el login de nuevo.

No se si me explique bien?

salu2
  #12 (permalink)  
Antiguo 22/04/2008, 17:33
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Re: APORTE: Sistema de Captcha

otra ves sorprendiendo felicidades man
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #13 (permalink)  
Antiguo 23/04/2008, 21:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: APORTE: Sistema de Captcha

@destor77, eso ya no depende del script, sino de la forma como conserves los datos del usuario a lo largo de varias páginas. Puedes usar cookies o sesiones para propagar esta información. Si buscas en el foro o en Google, encontrarás muchos tutoriales al respecto.

@kaninox, gracias por el comentario.

Me han notificado por MP que no se puede acceder al sitio desde algunos territorios. Tengo reportes del bloqueo por parte de Speedy/Telefónica y otros ISP de algunos sitios, entre ellos, la compañía de Hosting ByeT, en la cual tengo hospedado el sitio entero. Trataré de hacer un poco de tiempo para solucionar esto (Ando buscando un nuevo proveedor de hosting). Podrían confirmarme el acceso al sitio?

Saludos,
  #14 (permalink)  
Antiguo 24/04/2008, 09:15
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Re: APORTE: Sistema de Captcha

Excelente aporte okram



Saludos.
  #15 (permalink)  
Antiguo 24/04/2008, 17:24
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Re: APORTE: Sistema de Captcha

Cita:
Iniciado por okram Ver Mensaje
@destor77, eso ya no depende del script, sino de la forma como conserves los datos del usuario a lo largo de varias páginas. Puedes usar cookies o sesiones para propagar esta información. Si buscas en el foro o en Google, encontrarás muchos tutoriales al respecto.
te preguntaba porque yo tengo este codigo para loguearme:
Código PHP:
public function cpanel(){
            require(
'modelo/AdminModelo.php');
            include_once 
"include/PHPCaptcha.lib.php";
            
//include('include/captcha.php');
            //creo el modelo
            
$admin=new AdminModel();
            if (
$_SESSION[captcha]==$_POST['captcha']){
                
$this->view->show("cpanel.php");
            }
            else{
                if(isset(
$_POST['captcha'])) {
                    
# Verificamos el código Captcha introducido
                    
if(Captcha::verificaCaptcha($_POST['captcha'])) {
                        
# El captcha ha sido ingresado correctamente, así que procedemos
                        # a procesar el formulario.
                        
$user=$_POST['dname'];
                        
$pass=md5($_POST['demail']);
                        
$login=$admin->get_admin($user,$pass);
                        if (
$login=="0"){
                            
$data['error']="usuario o contraseña incorrectos<br />";
                            
$this->view->show("error.php",$data);
                        }
                        else{

                            
$this->view->show("cpanel.php");
                        }
                    }
                    else {
                        if (
$_POST['dname']==""){
                            
# el campo dbname esta vacio
                            
$data['error']="No ingresaste el nombre de usuario<br />";
                        }
                        else{
                            if(
$_POST['demail']==""){
                                
# el campo dbmail esta vacio
                                
$data['error']="No ingresaste el nombre de usuario<br />";
                            }
                            else{
                                
# El captcha introducido es incorrecto
                                
$data['error']="Código incorrecto <br />";
                            }
                        }
                        
$this->view->show("error.php",$data);
                        echo 
"<br><br>";
                    }
                }
            } 
        } 
me hace el logueo pefectamente, pero si estoy en el admin y le doy refrescar al navegador me tira el error "codigo incorrecto" y nose como tomar el valor del captcha para mantenerlo y no tener que loguearme siempre
  #16 (permalink)  
Antiguo 27/04/2008, 15:32
 
Fecha de Ingreso: agosto-2004
Mensajes: 113
Antigüedad: 19 años, 8 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

Hola, no logro entender como integrar el sistema a la comprobación del formulario.
El código que uso para comprobar el formulario es
Código PHP:
 <?php if (isset($_POST['Submit'])){ 
$notaid $_POST['id'];
$nombre_vis $_POST['nombre_vis']; 
$mail_vis $_POST['mail_vis']; 
$coment $_POST['coment'];

mysql_query("insert into comentarios (notaid, nombre_vis, mail_vis, coment, fecha) VALUES ('".$id."','".$nombre_vis."','".$mail_vis."','".$coment."')") or die ("error:\n".mysql_error());
}
else { 
?>
y en la comprobación que usas para verificar si es robot o humano pones
Código PHP:
<?php
    
    
# Inclusión del script
    
include 'PHPCaptcha.lib.php';
    
    
# Si el formualrio ha sido enviado
    
if(isset($_POST['captcha'])) {
        
# Verificamos el código Captcha introducido    
        
if(Captcha::verificaCaptcha($_POST['captcha'])) {
            
# El captcha ha sido ingresado correctamente, así que procedemos
            # a procesar el formulario.    
            
echo "<span style=\"font: bold 25px Tahoma; color: #00f;\">Código correcto</span>";
        } else {
            
# El captcha introducido es incorrecto    
            
echo "<span style=\"font: bold 23px Tahoma; color: #f00;\">Código incorrecto</span>";
            echo 
"<br>Pusiste <b>$_POST[captcha]</b> y era <b>$_SESSION[phpcaptcha_codigo]</b>";
        }
        echo 
"<br><br>";
    }
?>
me podrías explicar como hacerlo porque no solo no logro que se autentifique sino que no envia los datos.
muchas gracias y felicitaciones por el sistema ya que todos escriben maravillas.
  #17 (permalink)  
Antiguo 28/04/2008, 09:11
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Hola a todos...

Me pasa lo siguiente: en localhost veo la imagen generada por el Captcha, pero cuando subo los archivos al Servidor (de pago), no veo la imagen.

Será problema de alguna habilitación del PHP en el Servidor?

Saludos.-
  #18 (permalink)  
Antiguo 28/04/2008, 09:14
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Re: APORTE: Sistema de Captcha

comprueba que en tu servidor esté permitido GD ^^
  #19 (permalink)  
Antiguo 28/04/2008, 10:11
 
Fecha de Ingreso: enero-2008
Mensajes: 28
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

A mi tampoco me funciona en el servidor i si que tiene instalado GD. Por que puede ser?
  #20 (permalink)  
Antiguo 28/04/2008, 10:20
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Si... el Servidor tiene instalado GD

PHP Version: 4.4.4

GD Version: (2.0.28 compatible)

FreeType Support: enabled

FreeType Linkage: with freetype

Pero aún así, la imagen no aparece!!!

Saludos.-
  #21 (permalink)  
Antiguo 28/04/2008, 10:30
 
Fecha de Ingreso: enero-2008
Mensajes: 28
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

Yo intento incluir echos en el codigo, por ejemplo al principio del phpcatpcha.lib.php para ver por donde puede estar el error, pero es que no me muestra ni siquiera ese echo estando al principio. Esto es lo que me deja precupado!!
  #22 (permalink)  
Antiguo 28/04/2008, 14:59
 
Fecha de Ingreso: enero-2008
Mensajes: 28
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

Bueno creo que el motivo por el que no nos funciona es por que al tener una versión menor que php5 las classes no estan bien interpretadas. Esto es cierto? I si lo és como podemos usar-lo com php4?

Gracias a todos cracks!
  #23 (permalink)  
Antiguo 28/04/2008, 23:42
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Hola a todos...

Bueno, orientado un poco por elpibeyf con respecto a que si era problemas de versión de PHP, el hecho de que no mostrara la imagen captcha... hice mi consulta y pedido de ayuda al soporte tecnico de mi umilde pero leal Servidor. Esta es su respuesta la cual copio y pego textualmente:

Estimado Cliente
Gracias por comunicarse con Soporte Tecnico

Efectivamente, el problema esta en la version de PHP.

Los atributos y metodos public, private y protected son validos unicamente a partir de php5.
He realizado un simple search & replace dentro del archivo PHPCaptcha.lib.php, reemplazando los metodos por "var" y el script comenzo a funcionar normalmente.

Quedamos a su disposicion por cualquier consulta adicional


Efectivamente, la imagen del Captcha está funcionando.

Porsupuesto que yo de eso no entiendo nada... pero acá hay muchos expertos que le echarán mano al asunto para ayudar a muchos interesados.

Saludos.-
  #24 (permalink)  
Antiguo 29/04/2008, 11:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

PHPCaptcha.lib.php para versiones de php4

Bueno, viendo que no aparece nadies por aquí... dejo el script PHPCaptcha.lib.php para los novatos como yo. Esto hará que se muestre la imagen Captcha en versiones php4

Código PHP:
<?php

/**
 * PHPcaptcha
 * @author Myokram
 * 29/03/08
 */

/**
 * Para usar esta clase:
 * Visita http://www.phperu.net/phpcaptcha
 *      
 */

class Captcha {
    
    var 
$codigo;
    var 
$refCodigos;
    var 
$refFondos;
    var 
$refFuentes;
    var 
$fuentes = array();
    var 
$refFiltro true;
    var 
$refColor = array(000);
    var 
$refTamano 25;
    var 
$refLineas true;
    var 
$refGradoDificultad 8;
    var 
$refNLineas 20;
    var 
$refCLineas false;
    var 
$refLongitud 6;
    var 
$refCaracteres = array();
    var 
$fondo;
    var 
$texto;
    var 
$ancho;
    var 
$alto;
    var 
$captcha;
    
    function 
__construct() {
    }
    
    function 
checkSession() {
        if(!isset(
$_SESSION)) { 
            @
session_start();
            return 
false
        }
    return 
true;
    }
    
     function 
generaCaptcha($nuevo true) {
        
$this->checkSession();
        if(empty(
$this->codigo)) {
            if(
$nuevo == false and !empty($_SESSION['phpcaptcha_codigo'])) {
                
$this->codigo $_SESSION['phpcaptcha_codigo'];
            } else {
                
$this->generarCodigo();
            }
        }
        
$this->generarFondo();
        if(
$this->refLineas == true) {
            
$this->generarLineas();
        }
        
$this->generarTexto();
        
$this->captcha imagecreatetruecolor($this->ancho$this->alto);
        
imagecopyresampled($this->captcha$this->fondo0000$this->ancho$this->alto$this->ancho$this->alto);
        
imagecopymerge($this->captcha$this->texto0000$this->ancho$this->alto60);
        return 
true;
    }
    
     function 
verificaCaptcha($codigo$mayus false) {
        
self::checkSession();
        
$sc = ($mayus == true) ? $_SESSION['phpcaptcha_codigo'] : strtolower($_SESSION['phpcaptcha_codigo']);
        
$vc = ($mayus == true) ? $codigo strtolower($codigo);
        if(!empty(
$sc) and $sc == $vc) {
            unset(
$_SESSION['phpcaptcha_codigo']);
            return 
true;
        }
        return 
false;
    }
    
     function 
guardaCaptcha() {
        
$this->checkSession();
        return 
$_SESSION['phpcaptcha_codigo'] = $this->codigo;
    }
    
     function 
muestraCaptcha() {
        
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/jpeg");
        
imagejpeg($this->captchanull70);
        exit;
    }
    
     function 
confCaptcha($p$v) {
        switch(
strtolower($p)):
            case 
"codigos"$this->refCodigos $v; break;
            case 
"fondos"$this->refFondos $v; break;
            case 
"fuentes"$this->refFuentes $v; break;
            case 
"dificultad"$this->refGradoDificultad = ((int)$v >= and (int)$v <= 40) ? (int)$v $this->refGradoDificultad; break;
            case 
"filtro"$this->refFiltro = ($v != false) ? true false; break;
            case 
"lineas"$this->refLineas = ($v != false) ? true false; break;
            case 
"nlineas"$this->refNLineas = ((int)$v >= 1) ? (int)$v $this->refNLineas; break;
            case 
"clineas"$this->refCLineas = ($v != false) ? true false; break;
            case 
"color"$this->refColor = ($c $this->rgbhex2rgb($v)) ? $c : array(0,0,0); break;
            case 
"tamaño"$this->refTamano = (int)$v; break;
            case 
"ancho"$this->ancho = (int)$v; break;
            case 
"alto"$this->alto = (int)$v; break;
            case 
"longitud"$this->refLongitud = ((int)$v >= 1) ? (int)$v $this->refLongitud; break;
            case 
"caracteres": if(is_array($v)) $this->confCaptcha("caracteres",implode("",$v)); else $this->refCaracteres str_split($v); break;
            default: return 
false; break;
        endswitch;
        return 
true;
    }
    
    function 
generarCodigo() {
        if(!empty(
$this->refCodigos) and file_exists($this->refCodigos)) {
            return 
$this->codigo $this->generarCodigoArchivo();
        }
        return 
$this->codigo $this->generarCodigoAleatorio();
    }
    
    function 
generarCodigoAleatorio() {
        
$caracteres = (count($this->refCaracteres) < 1) ? array_merge(range('a''z'), range(09)) : $this->refCaracteres;
        
$n count($caracteres);
        
$codigo '';
        while (
strlen($codigo) < $this->refLongitud) {
            
$codigo .= $caracteres[mt_rand(0$n-1)];
        }
        return 
$codigo;
    }
    
    function 
generarCodigoArchivo() {
        
$codigo file($this->refCodigos);
        
$codigo trim($codigo[array_rand($codigo)]);
        return !empty(
$codigo) ? $codigo $this->generarCodigoAleatorio();
    }
    
    function 
generarFondo() {
        
$this->ancho = ($this->ancho 1) ? $this->ancho 210;
        
$this->alto = ($this->alto 1) ? $this->alto 70;
        
        if(!empty(
$this->refFondos) and is_dir($this->refFondos)) {
            
$res opendir($this->refFondos);
            
$imagenes = array();
            while(
$archivo readdir($res)) {
                if(!
in_array(pathinfo($archivoPATHINFO_EXTENSION), array("gif""jpg""png"))) {
                    continue;
                }
                
$imagenes[] = $this->refFondos.'/'.$archivo;
            }
            
closedir($res);
        }
        if(
count($imagenes) < 1) {
            
$rs imagecreate($this->ancho$this->alto);
            
imagecolorallocate($rs255255255);
        } else {
            
$aleat $imagenes[array_rand($imagenes)];
            
$info getimagesize($aleat);
            
            
$bg null;
            
            switch (
$info[2]):
                case 
1$bg imagecreatefromgif($aleat); break;
                case 
2$bg imagecreatefromjpeg($aleat); break;
                case 
3$bg imagecreatefrompng($aleat); break;
            endswitch;
            
            
$bg imagerotate($bg,90*rand(1,4),-1);
            
            
$rs imagecreatetruecolor($this->ancho$this->alto);
            
            
imagecopyresampled($rs$bg0000$this->ancho$this->altoimagesx($bg), imagesy($bg));
        }
        
        return 
$this->fondo = ($this->refFiltro == true) ? $this->aplicarFiltro($rs) : $rs;
    }
    
    function 
generarLineas() {
        for (
$i 0$i $this->refNLineas$i++) {
            if(
$this->refCLineas != true) {
                
$c mt_rand(70250);
                
$clinea imagecolorallocate($this->fondo$c$c$c); 
            } else {
                
$clinea imagecolorallocate($this->fondomt_rand(80250), mt_rand(80250), mt_rand(80250));
            }
            
imageline($this->fondomt_rand(0$this->ancho), mt_rand(0$this->alto), mt_rand(0$this->ancho), mt_rand(0$this->alto), $clinea);
        }
        return;
    }
    
    function 
aplicarFiltro($rs$ligero 0) {
        
$extra = ($ligero == 1) ? (((int)$this->refGradoDificultad 1) ? (int)$this->refGradoDificultad ) : rand(2030);
        
$rsf imagecreatetruecolor($this->ancho+$extra$this->alto+$extra);
        
$dstH $this->ancho;
        
$srcH $this->ancho $extra;
        
$h rand(510);
        for (
$i 0$i $this->ancho$i++) {
            
$a = (sin(deg2rad(2*$i*$h))+sin(deg2rad($i*$h))) * 1.1;
            
imagecopyresized($rsf$rs$i0$i0$extra+$i$dstH+$extra*$a$extra+$i$srcH);
        }
        return 
$rsf;
    }
    
    function 
generarTexto() {
        
$t imagecreatetruecolor($this->ancho$this->alto);
        
        
$fcolor = ($this->refColor[0] == 255 and $this->refColor[1] == 255 and $this->refColor[2] == 255) ? imagecolorallocate($t000) : imagecolorallocate($t255255255);
                    
        
imagefill($t00$fcolor);
        
        
$tcolor imagecolorallocate($t$this->refColor[0], $this->refColor[1], $this->refColor[2]);
        
        if(!empty(
$this->refFuentes) and is_dir($this->refFuentes)) {
            
            
$res opendir($this->refFuentes);
            
$fuentes = array();
            while(
$archivo readdir($res)) {
                if(!
in_array(pathinfo($archivoPATHINFO_EXTENSION), array("ttf"))) {
                    continue;
                }
                
$fuentes[] = $this->refFuentes.'/'.$archivo;
            }
            
closedir($res);
            
            
$this->fuentes $fuentes;
            
            
$x 15;
            
            for (
$i 0$i strlen($this->codigo); $i++) {
                
imagettftext($t$this->refTamanorand(-3030), $x$this->refTamano+rand(525), $tcolor$this->fuenteAleatoria(), $this->codigo{$i});
                
$x += $this->refTamano 6;
            }
            
        } else {
            
$tfont rand(3,5);
            
$tancho imagefontwidth($tfont) * strlen($this->codigo);
            
$talto imagefontheight($tfont);
            
$margen $tancho 0.3 5;
            
$ttexto imagecreatetruecolor($tancho $margen$talto $margen);
            
            
imagefill($ttexto00$fcolor); // For GD2+
            
            
$tx $margen 2;
            
$ty $margen 2;
            
            
imagestring($ttexto$tfont$tx$ty$this->codigo$tcolor);
            
            
imagecopyresampled($t$ttexto0000$this->ancho$this->alto$tancho+$margen$talto+$margen);
        }
        
        if (
$this->refFiltro) {
            
$t $this->aplicarFiltro($t1);
        }
        
        
imagecolortransparent($t$fcolor);
        
        return 
$this->texto $t;
        
    }
    
    function 
fuenteAleatoria() {
        return 
$this->fuentes[array_rand($this->fuentes)];
    }
    
    function 
rgbhex2rgb($c) {
        if(!
$c) return false;
        
$c trim($c);
        
$out = array();
        if(
eregi("^[0-9ABCDEFabcdef\#]+$"$c)){
            
$c str_replace('#',''$c);
            
$l strlen($c);
            if(
$l != and $l != 6) return false;
            
$out[0] = $out['r'] = ($l == 3) ? hexdec(substr($c,0,1).substr($c,0,1)) : hexdec(substr($c,0,2));
            
$out[1] = $out['g'] = ($l == 3) ? hexdec(substr($c,1,1).substr($c,1,1)) : hexdec(substr($c,2,2));
            
$out[2] = $out['b'] = ($l == 3) ? hexdec(substr($c,2,1).substr($c,2,1)) : hexdec(substr($c,4,2));
        } elseif (
eregi("^[0-9]+(,| |.)+[0-9]+(,| |.)+[0-9]+$"$c)){
            if(
eregi(","$c)) $e explode(",",$c);
            elseif(
eregi(" "$c)) $e explode(" ",$c);
            elseif(
eregi("."$c)) $e explode(".",$c);
            else return 
false;
            if(
count($e) != 3) return false;
            if(
is_numeric($e[0]) and $e[0] >= and $e[0] <= 255)
                
$out[0] = $out['r'] = intval($e[0]);
            if(
is_numeric($e[1]) and $e[1] >= and $e[1] <= 255)
                
$out[1] = $out['g'] = intval($e[1]);
            if(
is_numeric($e[2]) and $e[2] >= and $e[2] <= 255)
                
$out[2] = $out['b'] = intval($e[2]);
        } 
        return (
count($out) != 6) ? false $out;
    }
    
}

?>
Saludos.-
  #25 (permalink)  
Antiguo 30/04/2008, 00:14
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Hola nuevamente...

Sería bueno, que alguien explique detalladamente y con ejemplos para los novatos, de cómo incorporar la comprobación del código captcha... yo no puedo hacerlo funcionar.

Incluso copie integramente el ejemplo del tutorial del autor y no funciona, tira errores.

Por favor, alguien que lo está haciendo funcionar o que sepa, que comparta como es, ya que el autor está desaparecido vaya a saber uno por que tierras de este mundo!!

Gracias y saludos.-
  #26 (permalink)  
Antiguo 30/04/2008, 16:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Hola nuevamente...

El asunto es que tengo un formulario en contacto.php al cual le incorpore el Captcha que me muestra la imagen con su código sin problemas.

Al enviar el formulario lo recepciona el archivo registro.php, es decir, sería el archivo que procesa el formulario. Este registro.php verifica si algunos campos (obligatorios) están llenos o no. Si todo está bien, incorpora los datos aportados en una BD y envía un correo al usuario para que active su cuenta.

Hasta ahí todo bien, el inconveniente que tengo y no puedo darme cuenta como es (después de mucho intentar), es cómo meter en el archivo registro.php la comprobación del código captcha ingresado... no puedo hacerlo funcionar!!!

Comprobación del Captcha
Código PHP:
if(Captcha::verificaCaptcha($_POST['captcha'])) {
    echo 
"Captcha correcto";
} else {
    echo 
"Captcha incorrecto";

Posteo el archivo registro.php que procesa el formulario.

Por favor, ayudenmé!!!

Gracias.

registro.php
Código PHP:
<?php
session_start
();
//datos para establecer la conexion con la base de mysql.
$conexion=mysql_connect('localhost','usuario','contraseña')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('BD')or die ('Error al seleccionar la Base de Datos: '.mysql_error());


//añadimos la funcion que se encargara de generar un numero aleatorio
function genera_random($longitud){
    
$exp_reg="[^A-Z0-9]";
    return 
substr(eregi_replace($exp_reg""md5(rand())) .
       
eregi_replace($exp_reg""md5(rand())) .
       
eregi_replace($exp_reg""md5(rand())),
       
0$longitud);
}


function 
formRegistro(){
?>


<?php
}

// verificamos si se han enviado ya las variables necesarias, las que tenemos en nuestro form cambialo, como sea el tuyo.
if (isset($_POST["apellido"])) {
    
$apellido $_POST["apellido"];
    
$nombre $_POST["nombre"];
    
$email $_POST["email"];
    echo 
"<div style='text-align:center;font-weight:bold;font-size:200%;color:#005784;margin-top:200px;'>";
    echo 
"<span>$apellido </span>";
    echo 
$nombre;
    echo 
"</div>";
    
// Hay campos en blanco
    
if($apellido==NULL|$nombre==NULL|$nacimiento==NULL|$residencia==NULL|$provincia==NULL|$email==NULL|$investiga==NULL) {
        echo 
"<div style='font-size:250%;text-align:center;font-weight:bold;color:#B40404;'>Algún campo obligatorio está vacio!</div>";
        
formRegistro();
    }else{
            
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
            
$checkemail mysql_query("SELECT email FROM gerrusarg WHERE email='$email'");
            
$email_exist mysql_num_rows($checkemail);
            if (
$email_exist>0) {
                echo 
"<div style='font-size:130%;text-align:center;font-weight:bold;color:#B40404;'>La cuenta de correo <span style='color:blue;'>$email</span> ya está en uso.</div>";
                
formRegistro();
        }else{

                  
//agregamos la variable $activate que es un numero aleatorio de
                  //20 digitos crado con la funcion genera_random de mas arriba

                  
$activate genera_random(20);

                  
//aqui es donde insertamos los nuevos valosres en la BD  activate y el valor 1 que es desactivado

                
$query 'INSERT INTO gerrusarg (apellido, nombre, nacimiento, residencia, provincia, email, web, investiga, argentina, rusia, activate, estado)
                VALUES (\''
.$apellido.'\',\''.$nombre.'\',\''.$nacimiento.'\',\''.$residencia.'\',\''.$provincia.'\',\''.$email.'\',\''.$web.'\',\''.$investiga.'\',\''.$argentina.'\',\''.$rusia.'\',\''.$activate.'\', 1)';
                
mysql_query($query) or die(mysql_error());



                echo 
"<div style=text-align:center;font-size:130%;>";
                echo 
"<span style='font-weight:bold;font-style:italic;color:#B40404;'>Parece que todo ha ido bien!!!</span><br />";
                echo 
"Ha sido registrado con la cuenta de correo: <span style='font-weight:bold;color:blue;'>$email</span> de manera satisfactoria.<br />";
                echo 
"Le enviaremos ahora un email para activar su cuenta al correo que nos facilito.<br />";
                echo 
"Luego de esa activación, integrará la lista Ger-Rus-Arg con los datos aportados.<br />";
                echo 
"<span style='font-weight:bold;font-style:italic;color:#B40404;'>Muchas gracias por participar!!!</span>";
                echo 
"</div>";



                
$query   "SELECT * FROM gerrusarg WHERE apellido='$apellido'";
         
$result mysql_query($query $conexion) or die ( mysql_error() );
         
$row   mysql_fetch_array($result);

         
$path="http://miweb/formulario/registros/"//creamos nuestra direccion, con las carpetas que sean si hay
         //armamos nuestro link para enviar por mail en la variable $activateLink
$activateLink=$path."activar_cuenta.php?id=".$row['id']."&activateKey=".$activate."";

                          
// Datos del email

$nombre_origen    "miweb";
$email_origen     "[email protected]";
$email_copia      "[email protected]";
$email_ocultos    "[email protected]";
$email_destino    "".$row['email']."";



$asunto           "".$row['apellido']." Active su cuenta";

$mensaje          '<table width="629" border="0" cellspacing="1" cellpadding="2">
  <tr>
    <td width="623" align="left"></td>
  </tr>
  <tr>
    <td bgcolor="#2EA354"><div style="color:#FFFFFF; font-size:14; font-family: Arial, Helvetica, sans-serif; text-transform: capitalize; font-weight: bold;"><strong>     Estos son sus datos de registro, '
.$row['apellido'].'</strong></div></td>
  </tr>
  <tr>
    <td height="95" align="left" valign="top"><div style=" color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; margin-bottom:3px;"> USUARIO: '
.$row['apellido'].'</strong><br><br><br>
          <strong>EMAIL : </strong>'
.$row['email'].'</strong><br><br><br>
          <strong>SU LINK DE ACTIVACION:<br><a href="'
.$activateLink.'">'.$activateLink.' </strong></a><br><br><br>
          <strong>POR FAVOR HAGA CLICK EN LINK DE ARRIBA PARA ACTIVAR SU CUENTA E INGRESAR AL LISTADO</strong><br><br><br>
          <strong>SI EL LINK NO FUNCIONA AL PRIMER INTENTO, HAGALO UNA SEGUNDA VEZ, EL SERVIDOR A VECES TARDA EN PROCESAR LA PRIMERA ORDEN</strong><br><br><br>

          <strong>Gracias por participar.</strong><br><br><br>
    </div>
    </td>
  </tr>
</table>'
;



$formato          "html";

//*****************************************************************//
$headers  "From: $nombre_origen <$email_origen> \r\n";
$headers .= "Return-Path: <$email_origen> \r\n";
$headers .= "Reply-To: $email_origen \r\n";
//*****************************************************************//

if($formato == "html")
   {   
$headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n";  }
     else {
       
$headers .= "Content-Type: text/plain; charset=iso-8859-1 \r\n";
   }
if (@
mail($email_destino$asunto$mensaje$headers))
    {  }






            }
        }

} else {
    
formRegistro();
}

?>
  #27 (permalink)  
Antiguo 30/04/2008, 17:51
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: APORTE: Sistema de Captcha

Saludos a todos. Ante todo pido mil disculpas por demorar en responder. El tiempo ahora es lo que más me falta.

Efectivamente, el script requiere una versión de PHP >=5, no es compatible con versiones inferiores ya que PHP5 introduce una nueva manera de procesar objetos. Y la tendencia ahora es migrar todos a PHP5, que se considera una transición hacia el ya llegando PHP6.

Ahora, los que piden como integar la comprobación. Es importante incluir el script antes de realizar la comprobación en el código. He aquí el código más sencillo:

Código PHP:
if (isset($_POST['Submit'])){  
 
    
# Comprobación Captcha
 
        # Inclusión del script (Es necesario)
        
include 'PHPCaptcha.lib.php'
 
       if(
Captcha::verificaCaptcha($_POST['captcha'])) { 
           echo 
"Captcha correcto"
       } else { 
           echo 
"Captcha incorrecto"
       }
 
    
# Fin Comprobación Captcha
 
    
$notaid $_POST['id']; 
    
$nombre_vis $_POST['nombre_vis'];  
    
$mail_vis $_POST['mail_vis'];  
    
$coment $_POST['coment']; 
    
mysql_query("insert into comentarios (notaid, nombre_vis, mail_vis, coment, fecha) VALUES ('".$id."','".$nombre_vis."','".$mail_vis."','".$coment."')") or die ("error:\n".mysql_error()); 

else { 
?> 
Saludos,
  #28 (permalink)  
Antiguo 30/04/2008, 18:47
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Re: APORTE: Sistema de Captcha

Hola okram...

Lo siento por mi torpeza... pero si no me ayudas con el ejemplo del archivo registro.php que muestro más arriba, no voy a poder hacerlo funcionar... estoy probando de varias maneras para incorporar la comprobación y no hay caso.

La verdad que el Capcha está espectacular... pero no hay forma de que lo pueda comprobar.

Si se me puede ayudar en eso muy agradecido y sino, muchas gracias igual.

Saludos.-
  #29 (permalink)  
Antiguo 30/04/2008, 18:57
 
Fecha de Ingreso: agosto-2004
Mensajes: 113
Antigüedad: 19 años, 8 meses
Puntos: 0
Re: APORTE: Sistema de Captcha

muchas gracias por la deferencia okram, te agradezco
Germán
  #30 (permalink)  
Antiguo 30/04/2008, 21:18
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: APORTE: Sistema de Captcha

Excelente okram, siempre un gusto leer tus códigos ;)


Espero que el tiempo de tu ausencia sea corto, y suerte en lo que vayas a emprender.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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.
Tema Cerrado

SíEste tema le ha gustado a 4 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 07:23.