- Comunidades
- Internet y Tecnología
- Diseño y Programacion Web
- Ayuda con Libro de visitas
Ayuda con Libro de visitas
Resulta que tengo un formulario de libro de visitas el cual lo eh usado y funciona bien pero se me planteo un problema ahora y no logro solucionarlo. El problema es que me empezo a llenar el libro con spam mi idea era poner un captcha para que si lo hace se le complique un poco mas y en teoria no tendria mas problema de spam.
Necesito ayuda para poder insertar un captcha en el formulario del libro de visita de una web. El formulario de esta web funciona mas o menos asi.
Primero hay una pagina q se llama "visitas.php" a continuacion esta el codigo del formulario que esta dentro de la pagina "visitas.php"
<div id="main_content">
<div id="main_content2">
<div id="main_content_header">
<h2>FIRMA NUESTRO LIBRO DE VISITAS</h2>
</div>
<div id="main_content_body">
<div id="content_box">
<p>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td width="16%" align="center" valign="top">
<p align="center"><strong><a name="firmar"></a></strong></p>
<table width="90%" cellspacing="1" cellpadding="1">
<tr>
<td align="left">
<?php
print "<table border=0 width=95% cellspacing=1>
<form method='post' action='firmar.php'>
<tr><td width=30%><b>Nombre :</b></b></td><td width=70%><input name=nombre maxlenght=30 type=text></td></tr>
<tr><td width=30%><b>Email:</b></td><td width=70%><INPUT name=email type=text></td></tr>
<tr><td width=30%><b>Nombre de tu web:</b></td><td width=70%><INPUT name=nombreweb type=text></td></tr>
<tr><td width=30%><b>Url:</b></td><td width=70%> Http://<INPUT name=weburl type=text></td></tr>
<tr><td width=30%><b>País:</b></td><td width=70%><input maxlenght=50 name=pais type=text></td></tr>
<tr><td width=30%><b>Ciudad:</b></td><td width=70%><input maxlenght=50 name=ciudad type=text></td></tr>
<tr><td width=30%><b>Nos encontraste en:</b></td><td width=70%><select name=desde>
<option value=Buscador>En un buscador</option>
<option value=Amigo>Me recomendo un amigo</option>
<option value=Directorio>Un enlace de una web</option>
<option value=...>Otro sitio</option>
</select></td></tr>
<tr><td width=30%><b>Valoración :</b></td><td width=70%><select name=valoracion>
<option value=10>10</option>
<option value=9>9</option>
<option value=8>8</option>
<option value=7>7</option>
<option value=6>6</option>
<option value=5>5</option>
<option value=4>4</option>
<option value=3>3</option>
<option value=2>2</option>
<option value=1>1</option>
</select></td></tr>
<tr><td width=30%><b>Comentarios :</b></td><td width=70%><textarea name=comentario rows=5 cols=23></textarea>
<input type=submit value=Enviar></td></tr>
</form></table>";
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p> </p>
<div align="center"><br />
<br />
<?php include("Libro.txt"
; #aquí para cambiar la ruta del archivo que muestra las entradas
?>
<br />
<br />
</div>
<p> </p>
</div>
</div>
<div id="main_content_footer"> </div>
</div>
</div>
Una vez que uno completa el formulario y pone enviar este lo redirecciona a "firmar.php" y este escribe en un txt en este caso se llama "libro.txt" a continuacion esta el codigo de firmar.php:
<?php
$pvm = getdate();
$archivo="libro.txt"; #aquí para cambiar la ruta del archivo donde se guardan las entradas
$uusi="<table border=0 width=95% cellspacing=1><tr><td width=30%><b>nombre:</b></td><td width=70%> $nombre </td></tr><tr><td width=30%><b>Fecha: </b></td><td width=70%>$pvm[mday]-$pvm[mon]-$pvm[year]</td></tr><tr><td width=30%><b>E-mail:</b></td><td width=70%><a href='mailto:$email'><font color='000000'>$email</font></a></td></tr><tr><td width=30%><b>Web:</b></td><td width=70%><a href='http://$weburl' target='_blank'><font color='000000'>$nombreweb</font></a></td></tr><tr><td width=30%><b>Localización:</b></td><td width=70%>$pais - $ciudad </td></tr><tr><td width=30%><b>Nos encontró en un:</b></td><td width=70%> $desde </td></tr><tr><td width=30%><b>Valoración:</b></td><td width=70%> $valoracion </td></tr><tr><td width=30%><b>Comentario:</b></td><td width=70%> $comentario </td></tr><br /></table><hr width=70%>\n\n";
$fp=fopen($archivo, "r+"
;
$vanha=fread($fp, filesize($archivo));
fseek($fp, 0);
fwrite($fp, "${uusi}${vanha}"
;
fclose($fp);
?>
Lo que yo quiero saber es como puedo agregar en el formulario un casillero mas que sea para el control de spam (captcha) pido tu ayuda ya que no entiendo mucho de php ni de captcha tampoco.
Una firma en el libro.txt quedaria asi:
<table border=0 width=95% cellspacing=1><tr><td width=30%><b>nombre:</b></td><td width=70%> Lucas </td></tr><tr><td width=30%><b>Fecha: </b></td><td width=70%>4-3-2009</td></tr><tr><td width=30%><b>E-mail:</b></td><td width=70%><a href='mailto:luckys0921@hotmail.com'><font color='000000'>luckys0921@hotmail.com</font></a></td></tr><tr><td width=30%><b>Web:</b></td><td width=70%><a href='http://www.lucasweb.com.ar' target='_blank'><font color='000000'>LUcas Web</font></a></td></tr><tr><td width=30%><b>Localización:</b></td><td width=70%>Argentina - Villa Angela- Chaco </td></tr><tr><td width=30%><b>Nos encontró en un:</b></td><td width=70%> Directorio </td></tr><tr><td width=30%><b>Valoración:</b></td><td width=70%> 10 </td></tr><tr><td width=30%><b>Comentario:</b></td><td width=70%> Que bueno saber que a los visitantes de la pagina, les gusto el diseño y su contenido, que se ha realizado para la gente de Maga-Lih Fm.
Saludos </td></tr><br /></table><hr width=70%>
Espero me puedan ayudar amigos
11 Respuestas
Lo del captcha, es una pavada. Fijate que si buscas en google, hay una pagina muy buena que a mi me ayudo (http://blog.unijimpe.net/crear-captcha-con-php/)
Si pudiste hacer eso que hiciste vos, vas a entender joya todo el codigo de ese link que te pase.
Sino, cualquier duda, chifla... Yo que vos tambien estudio un poco las funciones de la libreria GD de php... Es muy facil todo, si prestas atencion.
Esta función Javascript simple engañará a prácticamente todos los robots que hacen spam:
<script type="text/javascript"> //generate an email address function contact(domain, user, tld) { document.write('<a href=\"mailto:' + user + '@' + domain + '.' + tld + '\">') document.write(user + '@' + domain + '.' + tld + '</' + 'a>') } contact("kcl.ac","alan.turing","uk"

; </script>[/quote]Ahora para el form:
the $badStrings: foreach($_POST as $k => $v){ foreach($badStrings as $v2){ if(strpos(all_ascii($v), $v2) !== false){ sleep(rand(2, 5)); // delay spammers a bit header("HTTP/1.0 403 Forbidden"

; exit; } } } // Continue onward to mail()Ahora para el codigo para el form:
// donde dice 'email' es donde
// tenes que poner tu direccion de correo
if (empty($_POST) || !isset($_POST['email'])) {
header("Location: /"

;exit;
}
// Your form should have a honey pot field 'pooh' that is left blank by human users
if (!isset($_POST['pooh']) || $_POST['pooh']!=""

{sleep(rand(2, 5)); // delay spammers a bit
header("HTTP/1.0 403 Forbidden"

;exit;
}
$crlf = "\r\n";
// Insert into PHP scripts before mail()
// Check $_GET if your contact form uses GET method.
$badStrings = array("Content-Type:",
"MIME-Version:",
"content-type:",
"mime-version:",
"multipart/mixed",
"content-transfer-encoding:",
"to:",
"Content-Transfer-Encoding:",
"bcc:",
"cc:",
"href="

;function all_ascii( $stringIn ){
$final = '';
$search = array("\r","\n"

;$replace = array(" "," "

;$hold = str_replace($search[0],$replace[0],$stringIn);
$hold = str_replace($search[1],$replace[1],$hold);
if(!function_exists('str_split')){
function str_split($string,$split_length=1){
$count = strlen($string);
if($split_length < 1){
return false;
} elseif($split_length > $count){
return array($string);
} else {
$num = (int)ceil($count/$split_length);
$ret = array();
for($i=0;$i < $num;$i++){
$ret[] = substr($string,$i*$split_length,$split_length);
}
return $ret;
}
}
}
$holdarr = str_split($hold);
foreach ($holdarr as $val) {
if (ord($val) < 128) $final .= $val;
}
return $final;
}
// Loop through each POST'ed value and test if it contains
// one of the $badStrings:
foreach($_POST as $k => $v){
foreach($badStrings as $v2){
if(strpos(all_ascii($v), $v2) !== false){
sleep(rand(2, 5)); // delay spammers a bit
header("HTTP/1.0 403 Forbidden"

;exit;
}
}
}
// Continue onward to mail()
Este "truco" me funciono siempre y no tengo spam, no necesito captcha con esto.

Bueno a lo principal, fijate en este post:
Post
En un comentario dejé un ejemplo básico de como podría ser un libro de visitas, usa esa base, y retocalo para adecuarlo a tu sitio, por más que sea un txt, tendrás que asegurarlo contra XSS, para que no te lo defiguren o peor... luego, bastará que discutamos la seguridad del mismo, que como expliqué en mi post: [Enlace] Podés usar algunas cosillas simples en PHP para proteger scripts automatizados y ES (external submiting). Pero para no ahogarnos en un post primero acomodá eso porque sinceramente no me dan ganas de perderme en tu código :/
Pichon, yo a este libro de visitas no lo arme yo, lo copie de una web y lo hice funcionar me podras dar una mano con el armado de esto porq no estoy en php hace mucho tiempo y ya ni recuerdo los codigos basicos.
luckys0921 dijo:Gracias
Pichon, yo a este libro de visitas no lo arme yo, lo copie de una web y lo hice funcionar me podras dar una mano con el armado de esto porq no estoy en php hace mucho tiempo y ya ni recuerdo los codigos basicos.
No hay problema para eso estamos, simplemente toma como base el ejemplo que enuncie antes y recordate usando google que hacía cada cosa, la duda que te surja nos la planteas


Primero que nada si tenés la web arriba pasanos el enlace, es mejor verlo en plena acción que solo el código acá... luego create una carpeta "prueba" y ahi vas probando hasta que quede a tu gusto, pero mientras googlea, si ya tenés una noción de lo que es PHP lo retomás al toque... suerte.
EL MAS AVANZADO LIBRO DE VISITAS
http://net.taringa.net/posts/downloads/2148202/Guestbook-para-web-Tutorial-+-Descarga.html
thespeed94 dijo:MEJOR ENTRA A MI POST
EL MAS AVANZADO LIBRO DE VISITAS
http://net.taringa.net/posts/downloads/2148202/Guestbook-para-web-Tutorial-+-Descarga.html
Dale, promové el copipasteo de códigos web, acá intentamos crear cosas, no copiar y pegar códigos.




