Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemilla al crear un captcha con php

Estas en el tema de Problemilla al crear un captcha con php en el foro de PHP en Foros del Web. Buenas a todos antes de nada dar las gracias a quien me pueda ayudar. He creado un captcha con el siguiente código. Código: session_start(); function ...
  #1 (permalink)  
Antiguo 06/11/2013, 04:53
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 6 años, 6 meses
Puntos: 0
Problemilla al crear un captcha con php

Buenas a todos antes de nada dar las gracias a quien me pueda ayudar.


He creado un captcha con el siguiente código.

Código:
session_start();
function randomText($length) {
    $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
    for($i=0;$i<$length;$i++) {
      $key .= $pattern{rand(0,35)};
    }
    return $key;
}
 
$_SESSION['tmptxt'] = randomText(8);

// Imagen que va a mostrar de fondo
$fondo = "../themes/image/captcha.png"; 
 
// Se define el header
header("Content-type: image/png");
 
// Creando el fondo con la imagen
$imagen = imagecreatefrompng("$fondo");
 
// Color del texto (R,G,B)
$color = imagecolorallocate($imagen,100,60,255);
 
// Texto que se va a mostrar
$texto1 = $_SESSION['tmptxt'];
 
imagestring($imagen,50,80,30,$texto1,$color);
 
// Salida de la imagen
imagepng($imagen);
Guardo el resultado de la función en la variable de sesión de $_SESSION['tmptxt']


Hasta aquí todo bien.


El problema viene en el momento que abro otra sesión en el formulario de registro.

Este es el código del formulario

Código:
<form method="post" action="#">
			<p class="RegisterFormUserInput" id="registerPuser">
				<label>Nombre de usuario</label>
				<br>
				<input type="text" name="username" id="RegisterUsername" required>
			</p>
			<p class="RegisterFormUserInput" id="registerPmail">
				<label>Corréo electrónico</label>
				<br>
				<input type="email" name="email" id="RegisterMail" required>
			</p>
			<p class="RegisterFormUserInput" id="registerPpasswd1">
				<label>Contraseña</label>
				<br>
				<input type="password" name="passwd1" id="RegisterPasswd1" required>
			</p>
			<p class="RegisterFormUserInput" id="registerPpasswd2">
				<label>Repita la contraseña</label>
				<br>
				<input type="password" name="passwd2" id="RegisterPasswd2" required>
			</p>
			<p id="RegisterimgCaptcha">
				<img src="users/captcha.php" id="RegisterCaptcha" alt="Captcha">
			</p>
			<p class="RegisterFormUserInput" id="registerPcaptcha">
				<label>Escriba lo que pone en la imágen</label>
				<br>
				<input type="text" name="captchaValue" id="RegistercaptchaValue" required>
			</p>
			<p id="registerPcondition">
				<input type="checkbox" name="conditions" id="RegisterConditions">
				<span>Acepto los términos y condiciones de uso. <a href="#">Leer términos y condiciones</a></span>
			</p>
			<p id="regiterPsubmit">
				<input type="submit" value="Crear cuenta" id="RegisterSubmit">
			</p>
		</form>
	</div>

	<div id="RegisterPoptions">
		<p>Si tienes cuenta pero has olvidado tu contraseña pincha <a href="">aquí...</a></p>
		<p><a href="">Volver a workdyant</a></p>
	</div>

	<?
	session_start();

	echo $_SESSION['tmptxt'];
	?>
El problema es que el código que aparece insertado en la imagen de captcha no coincide con la variable $_SESSION['tmptxt']

El resultado de la variable muestra el código anterior al usado en la imagen.

Parece como desfasado.

Os dejo un enlace en el cual se ve el código de captcha en la imagen del formulario y un echo de la variable en la esquina inferior izquierda

http://workdyant.hol.es/sign-up/

No me deja poner el link :(


Otra vez gracias al que me pueda atender.

Última edición por sxwark; 06/11/2013 a las 04:56 Razón: No me dejaba poner un link
  #2 (permalink)  
Antiguo 06/11/2013, 06:20
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 11 años, 11 meses
Puntos: 96
Respuesta: Problemilla al crear un captcha con php

session_start() debe ir al inicio de todo codigo, lo que podrias hacer es borrar el sessiom_start() del captcha
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 06/11/2013, 06:21
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 15 años, 6 meses
Puntos: 56
Respuesta: Problemilla al crear un captcha con php

Holas, sxwark.

Si mal no entiendo, tú quieres que la variable $_SESSION["tmptxt"] se inicie en el captcha y luego la puedas recuperar en la página de formulario donde se muestra el captcha, no?

Debes tener presente que al cargar un script por SRC de una IMG, estás realizando dos cargas simultáneamente: la de la página que contiene la IMG, y la del archivo llamado por el SRC de dicha IMG. No puedes mezclar sus hilos, uno siempre terminará antes que el otro, y es probable que en tu caso, la carga de la página termine antes que el script del captcha.

Como sea, te sugiero que la asignación de valor a $_SESSION["tmptxt"] se haga en la página del formulario, y no en el script del captcha: prueba si de esta forma, al iniciar la sesión en el captcha.php puedes obtener la variable con el valor correcto.

Formulario:
Código PHP:
<?php
include "funcion_captcha.php";
$_SESSION["tmptxt"] = randomText(8); 
?>
<!-- aca va el formulario donde esta el IMG que llama a captcha.php -->
Suerte, saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #4 (permalink)  
Antiguo 06/11/2013, 07:38
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: Problemilla al crear un captcha con php

Pues ya lo siento pero lo único que he conseguido hasta el momento es crear dos cadenas aleatorias XD


Si pudieses darme más detalles estaría agradecido.
  #5 (permalink)  
Antiguo 06/11/2013, 08:33
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 15 años, 6 meses
Puntos: 56
Respuesta: Problemilla al crear un captcha con php

Recuerda que la idea era mover la asignación de $_SESSION desde el captcha al formulario. O sea, debes eliminar de captcha la parte donde llenas la variable.

Captcha:
Código PHP:
session_start();

// Imagen que va a mostrar de fondo
$fondo "../themes/image/captcha.png"
 
// Se define el header
header("Content-type: image/png");

// y aca el resto de tu codigo captcha... 
Form:
Código PHP:
<?php
include "funcion_captcha.php";
$_SESSION["tmptxt"] = randomText(8); 
?>
<!-- aca el formulario -->
funcion_captcha.php
Código PHP:
function randomText($length) {
    
$pattern "1234567890abcdefghijklmnopqrstuvwxyz";
    for(
$i=0;$i<$length;$i++) {
      
$key .= $pattern{rand(0,35)};
    }
    return 
$key;

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #6 (permalink)  
Antiguo 06/11/2013, 11:39
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: Problemilla al crear un captcha con php

el problema esque el texto de la imagen lo genera tambien la función randomText(){}


de modo que lo introducido en la imagen seria la cadena que sacar la función.

Y es ese valor el que paso por la variable de sesion.


Que no se si lo que tu me estas diciendo es así o lo estoy entendiendo mal.
  #7 (permalink)  
Antiguo 06/11/2013, 13:15
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 15 años, 6 meses
Puntos: 56
Respuesta: Problemilla al crear un captcha con php

Uhm, no se me ocurre de qué otra forma explicarlo, pero eso es lo que precisamente te estoy ofreciendo en mis posts :( La idea es que llames a tu función randomText() sólo una vez: cuando se inicia la carga del formulario, de modo de asignarle el valor obtenido a la variable en sesión en ese momento.

En teoría, como la imagen se empieza a cargar después de la página del formulario, pensé que podría ser que pudieras recuperar de la sesión la variable ya seteada. Pero es teoría, porque hay que ver si entre que se asigna el valor a la sesión (al iniciar la carga del form) y se ejecuta el captcha (al iniciar la carga del script llamado por la IMG) hay suficiente tiempo para que este script alcance a tomar el valor recién cargado, y no otro anterior. Si el tiempo no es suficiente, podrías agregar un temporizador (sleep) para que transcurra a lo menos un segundo entre ambas cargas...

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #8 (permalink)  
Antiguo 06/11/2013, 13:36
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: Problemilla al crear un captcha con php

La verdad es que ha funcionado muchas gracias me ha costado el entender lo que me decías pero muchas gracias.


Dejo el código por si le sirve a alguien

Fichero del formulario
Código PHP:
<?
session_start
();

//Incluimos el fichero donde está la función
include('config/global_functions.php');

$_SESSION['captcha'] = randomText(8);
?>

Fichero Global_functions.php

Código PHP:
<?
function randomText($length) {
    
$pattern "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for(
$i=0;$i<$length;$i++) {
      
$key .= $pattern{rand(0,61)};
    }
    return 
$key;
}
?>

Código que genera el captcha

Código PHP:
<?php
session_start
();

// Imagen que va a mostrar de fondo
$fondo "../themes/image/captcha.png"
 
// Se define el header
header("Content-type: image/png");
 
// Creando el fondo con la imagen
$imagen imagecreatefrompng("$fondo");
 
// Color del texto (R,G,B)
$color imagecolorallocate($imagen,100,60,255);
 
// Texto que se va a mostrar
$texto1 $_SESSION['captcha'];
 
imagestring($imagen,50,80,30,$texto1,$color);
 
// Salida de la imagen
imagepng($imagen);

?>
Y esto es todo muchas gracias otra vez
  #9 (permalink)  
Antiguo 06/11/2013, 15:02
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 15 años, 6 meses
Puntos: 56
Respuesta: Problemilla al crear un captcha con php

Qué bueno! Y no tuviste que ponerle retardo ni nada? Entonces me servirá también a mí, para saberlo :P

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #10 (permalink)  
Antiguo 07/11/2013, 03:13
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 6 años, 6 meses
Puntos: 0
Respuesta: Problemilla al crear un captcha con php

Pues no tuve que poner retardo lo único que es lo que decias que carga antes la página que la imagen y así a funcionado.

Saludos y muchas gracias.

Etiquetas: captcha, formulario, registro, variable
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 01:17.