10.03.2007

Изрядно устав бороться со спамерами , раз в минуту гадившими в мои форумы (формы обратной связи и т.п.), решил, что бороться с ними, используя картинку с кодом дело неблагодарное, ибо спамерам пофиг, а уважаемым посетителям моих сайтов принесет огромные неудобства. Было придумано следующее решение (вполне вероятно, что я не первый такой умный, но конкретных реализаций не видел)

Пример защищенной от спама формы

gb.php
<?php

$main_cv="nospamcode";
$mysqlserver='localhost';
$mysqluser='xxx';
$mysqlpass='xxx';
$mysqldbname='mydb';

$name=htmlspecialchars($name);
$email=htmlspecialchars($email);
$msg=htmlspecialchars($msg);

if ($btn) {
if ($main_cv==$cv) {
   $ip=GetEnv('REMOTE_ADDR');
   mysql_connect("$mysqlserver",$mysqluser,$mysqlpass) or die ("Connection Error. Please try again in few minutes");
   mysql_select_db($mysqldbname);
   $stmt="insert into GB (DT,IP,NAME,EMAIL,MSG_TEXT) values (now(),"$ip","$msg")";
   $result=mysql_query($stmt);
   echo 'Спасибо. Ваш отзыв принят';
   return;
  }
}

?>

<form action="gb.php" name="msg_form">
<b>Оставить отзыв</b>
Ваше имя:  <input name="name" size=30 value="<? echo $name; ?>"><br>
Ваш e-mail: <input name="email" size=30 value="<? echo $email; ?>"><br>
Текст сообщения
<textarea name=msg id=msg rows=10 cols=50><? echo $msg; ?></textarea><br>
<input name=btn type="submit" value=" Отправить ">
<input id="cv" name=cv type=hidden value="null">
</form>
<script>
m=document.getElementById("cv");
m.value="<? echo $main_cv; ?>";
</script>