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>&nbsp;</p>
<div align="center"><br />
<br />
<?php include("Libro.txt"; #aqu&iacute; para cambiar la ruta del archivo que muestra las entradas
?>
<br />
<br />
</div>
<p>&nbsp;</p>
</div>
</div>

<div id="main_content_footer">&nbsp;</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

Compartir:
Calificar: 0
Tags:
  • SPAM
  • ,
  • visitas
  • ,
  • codigo
  • ,
  • captcha
  • ,
  • libro
  • ,
  • fuera
Creado El mes pasado
Visitas: 113

11 Respuestas


#1 - El mes pasado
En donde aparece la carita es ; ) por eso aparece la carita.
#2 - El mes pasado
Bueno, primero.. es un desastre entender con todos los colores y eso por ahi desparramado en cada etiqueta.. para eso esta css =).

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.
#3 - El mes pasado
Mira, para evitar los robost que tedejan spam yo uso el siguiente codigo:
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 =&gt; $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 &gt; $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 =&gt; $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.
#4 - El mes pasado
No llo entiendo muy bien a lo que subieron me podes exlicar un poco mejor?
#5 - El mes pasado
Rajani, lo peor del mundo es usar javascript para verificación de datos, puedo crear un simple script que salteé esa verificación y spammearte un rato. Voy a postear sobre eso para que no se genere malentendidos
#6 - El mes pasado
Primero que nada, tenés un bolonqui increible en la estructura de tu HTML, bah en general, si estás usando algun editor web asegurate que sea alguno avanzado, o sino aprendé algo de CSS.

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 :/
#7 - El mes pasado
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.
#8 - El mes pasado
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.
#9 - El mes pasado
#10 - El mes pasado
thespeed94 dijo:


Dale, promové el copipasteo de códigos web, acá intentamos crear cosas, no copiar y pegar códigos.
#11 - El mes pasado
<META HTTP-EQUIV="refresh" CONTENT="1; url=url/">
Para poder comentar en esta comunidad necesitas ser parte de la misma. Para eso necesitas Unirte
API - Trabaja en Taringa! - Anuncie en T! - Protocolo - Contacto - Enlazanos - Mapa del sitio - Prensa - Denuncias - T! em Português
Términos y condiciones - Privacidad de datos