Foros del Web » Programando para Internet » PHP »

Captcha en formulario (no hay manera)

Estas en el tema de Captcha en formulario (no hay manera) en el foro de PHP en Foros del Web. Llevo un par de dias intentando incluir un captcha en un formulario y no lo consigo. Soy nuevo en todo esto, así que me imagino ...
  #1 (permalink)  
Antiguo 17/04/2012, 11:04
 
Fecha de Ingreso: marzo-2012
Mensajes: 19
Antigüedad: 12 años, 7 meses
Puntos: 0
Captcha en formulario (no hay manera)

Llevo un par de dias intentando incluir un captcha en un formulario y no lo consigo. Soy nuevo en todo esto, así que me imagino que habré hecho una tonteria en algún sitio. Pensaba que lo del captcha iba a ser fácil pero... no hay manera :(

Explico:


Con este formulario, en el archivo formform.php

<form action="<?=$_SERVER['PHP_SELF']?>" method="post" name="formweb" onSubmit = "return valida(this)">

<TABLE class="formulario" WIDTH="100%" CELLSPACING="20">

<TR>
<TD></TD>
<TD><p></p></TD>
<TD></TD>
</TR>

<TR>
<TD><h2> <span style="color: #FFFFFF">Nombre</h2></TD>
<TD>
<INPUT class="tb2" type=text name="nombre" size="30" maxlength="50">
</TD>
<TD><b>Escriba aquí su nombre...</b>
</TD>
</TR>

<TR>
<TD><h2><span style="color: #FFFFFF">Dirección de email</h2></TD>
<TD>
<INPUT class="tb2" type=text name="email" size="20" maxlength="30">
</TD>
<TD><b>Escriba aquí su email.</b>
</TD>
</TR>

y sigue y sigue

hasta que se cierra con

<TR>
<TD><h2><span style="color: #FFFFFF">Código de seguridad</h2></TD>
<TD><img src="/captcha/captcha.php" /><br/><input type="text" size="12" name="captcha" />

</TD>
<TD><b></b></TD>
</TR>

</TABLE>
<input class="tb2" type="reset" value="Borrar" />
<input class="tb2" type="submit" name="procesa_form" value="Enviar"/>
</FORM>

El captcha es captcha facil.

Como habreis visto, al pulsar Submit (enviar), mando la información a la función javascript valida(this), que se encarga de verificar que todo ha sido introducido correctamente.

function valida(form)
{

if(form.nombre.value.length==0)
{
alert("hay que meter el nombre!!");
form.nombre.focus()
return false;
}

if(form.email.value.length==0)
{
alert("hay que meter el email!!");
form.email.focus();
return false;
}

etc, etc, hasta llegar a la parte PHP

else
{
<?php

$nombre = "";
$email = "";
$nombrew = "";

$formcontent="";
$recipient = "";
$subject = "";
$mailheader = "";

$nombre = $_POST['nombre'];
$email = $_POST['email'];
$nombrew = $_POST['nombrew'];

$formcontent="Nombre: $nombre \n Email: $email \n Web: $nombrew";
$recipient = "[email protected]";
$subject = "NombreWeb";
$mailheader = "formulario";

mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");

?>
}
return true;

}

Pues lo he intentado todo: muchos captchas diferentes, pasar el código a una variable javascript, usar echos, hacer al principio de la parte PHP esto (como recomienda el autor del captcha):

if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO EXITOSO AQUI
# }else{
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO DE ERROR AQUÍ
# }

Ya he perdido la cuenta de todo lo que he intentado. Antes de introducir el captcha todo funcionaba perfectamente.

¿Alguna ayuda, please?

Y gracias de antemano.
  #2 (permalink)  
Antiguo 17/04/2012, 14:09
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Captcha en formulario (no hay manera)

Sin el captcha funcionaba todo? al agregarlo arroja algún error?
Verificaste que no tengas problemas con session? no veo en ningún lado de tu ejemplo "session_start();"
__________________
Saludos!!!
Maru.-
  #3 (permalink)  
Antiguo 17/04/2012, 16:58
 
Fecha de Ingreso: marzo-2012
Mensajes: 19
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Captcha en formulario (no hay manera)

Gracias por contestar. Aunque ya he probado muchas cosas, voy a ir hacíendolo de nuevo y escribo aquí los resultados. Creo que el problema viene de mezclar en un archivo PHP el formulario en html y las funciones de validación en javascript y PHP, pero en algunas webs lo he visto explicado así.

Bueno, pues si cambio la parte de PHP por esto (los cambios en negrita):


else
{
alert("entramos en else");
<?php
session_start();
if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"])
{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO EXITOSO AQUI
echo "aprobado";





$nombre = $_POST['nombre'];
$email = $_POST['email'];
$nombrew = $_POST['nombrew'];

$formcontent="Nombre: $nombre \n Email: $email \n Web: $nombrew";
$recipient = "[email protected]";
$subject = "Nombre Web";
$mailheader = "Formulario";

mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
}
else
{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO DE ERROR AQUÍ
echo "reprobado";
}



?>
return false;
}
return true;

}

Entonces no me entra siquiera en los If de la función valida que comprueban la validez de los datos introducidos cuando le doy a enviar con el formulario vacío, supogo que porque ejecutra antes PHP, ve que el captcha no es igual que lo introducido (¡porque no se ha introducido nada!) y se sale de la función. Tampoco puedo ir comprobando que va ocurriendo porque si uso echo con javascript para imprimir algo por pantalla, me escribe todo el código posterior al echo justo antes del formulario

Ale, seguiré probando cosas, pero de verdad que no me aclaro con esto.
  #4 (permalink)  
Antiguo 18/04/2012, 16:39
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 21 años, 3 meses
Puntos: 5
Respuesta: Captcha en formulario (no hay manera)

Hola!

encontré estos ejemplos, quizás te puedan servir

Ejemplo Captcha 1

Ejemplo Captcha 2

Ejemplo Captcha 3
__________________
Saludos!!!
Maru.-
  #5 (permalink)  
Antiguo 18/04/2012, 18:09
Avatar de ylellan  
Fecha de Ingreso: mayo-2010
Ubicación: en un lugar de Veracruz
Mensajes: 432
Antigüedad: 14 años, 5 meses
Puntos: 36
Respuesta: Captcha en formulario (no hay manera)

yo te recomiendo ver este post, yo estaba igual pero me ayudaron y ahi me postearon la solucion y a veces la ocupo
  #6 (permalink)  
Antiguo 23/04/2012, 04:24
 
Fecha de Ingreso: marzo-2012
Mensajes: 19
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Captcha en formulario (no hay manera)

Gracias a todos por contestar. Os cuento cómo lo resolví por si le sirve a alguien.

Primero quiero decir que por mi pequeña experiencia, mejor no mezclar código. Cuando he creado un archivo para PHP, otro para Javascript y otro para HTML es cuando esto ha empezado a funcionar.

Así que he creado una nueva carpeta en el root. Ahí están el html (contacto.html), el javascript para validar (validar.js) y el PHP para comprobar el captcha y enviar la info (contacto.PHP). Además, una carpeta captcha con los archivos de captcha fácil [URL="http://www.captchafacil.com.ar/"]http://www.captchafacil.com.ar/[/URL]

El archivo HTML con el formulario, con el siguiente código (resumido, que tiene muchísimas partes):


<form method="post" action="/prueba/contacto.php" onsubmit="return Validar(this);">


<TABLE class="formulario" WIDTH="100%" CELLSPACING="20" border="0">

<TR>
<TD>&nbsp&nbsp&nbsp&nbsp</TD>
<TD><p></p></TD>
<TD></TD>
<TD>&nbsp&nbsp&nbsp&nbsp</TD>
</TR>

<TR>
<td colspan="5"><h1 align=center><span style="color: #FFFFFF">DATOS</h1></td>
</TR>

<TR>
<TD></TD>
<TD><h2> <span style="color: #FFFFFF">Nombre</h2></TD>
<TD>
<INPUT class="tb2" type=text name="nombre" size="40" maxlength="50">
</TD>
<TD><b>Escriba aquí su nombre...</b>
</TD>
<TD></TD>
</TR>

<TR>
<TD></TD>
<TD><h2><span style="color: #FFFFFF">Dirección de email</h2></TD>
<TD>
<INPUT class="tb2" type=text name="email" size="20" maxlength="30">
</TD>
<TD><b>Escriba aquí su email.</b>
</TD>
<TD></TD>
</TR>

<TR>
<TD></TD>
<TD><h2> <span style="color: #FFFFFF">Dirección de email</h2></TD>
<TD>
<INPUT class="tb2" type=text name="email2" size="20" maxlength="30">
</TD>
<TD><b>...Y otra vez por favor</b>
</TD>
<TD></TD>
</TR>
.
.
.
.hasta llegar al captcha
.
.


<TR>
<TD></TD>
<TD><h2><span style="color: #FFFFFF">Código de seguridad</h2></TD>
<TD><img src="/captcha/captcha.php" /><br/><input type="text" size="12" name="captcha" />

</TD>
<TD><b></b></TD>
<TD></TD>
</TR>

</TABLE>
<input class="tb2" type="reset" value="Borrar" />
<input class="tb2" type="submit" name="procesa_form" value="Enviar"/>
</FORM>

El archivo validar.js con diferentes funciones para validar diferentes aspectos de la info introducida:

function Validar(form)
{

if(form.nombre.value.length==0)
{
alert("hay que meter el nombre!!");
form.nombre.focus()
return false;
}

if(form.email.value.length==0)
{
alert("hay que meter el email!!");
form.email.focus();
return false;
}

if(form.email2.value.length==0)
{
alert("hay que meter el email!!");
form.email.focus();
return false;
}

.
.

. Es muy largo también )P
.
.
.



Y por último, el archivo PHP

<?php

session_start();
if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"])
{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());

$nombre = "";
$email = "";

$formcontent="";
$recipient = "";
$subject = "";
$mailheader = "";

$nombre = $_POST['nombre'];
$email = $_POST['email'];

$formcontent="Nombre: $nombre \n Email: $email";
$recipient = "[email protected]";
$subject = "Correo";
$mailheader = "tralari \r\n";

mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
die("Muchas gracias, su mensaje fue enviado correctamente");
}
else
{
die("Error: El código introducido no es correcto");
}

?>

Y eso es todo.

Etiquetas: captcha, formulario, variables
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 22:11.