Guestbook med captcha
Jeg bruger max guestbook på mit site.Men jeg bliver overdynget med spam fra spambots.
Hvordan kan jeg insætte et simpel captcha system i min guestbook.
Her min kode:
<?php
class maxGuestbook{
var $messageDir = 'messages';
var $dateFormat = 'Y-m-d g:i:s A';
var $itemsPerPage = 9;
var $messageList;
function processGuestbook(){
if (isset($_POST['submit'])) {
$this->insertMessage();
}
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$this->displayGuestbook($page);
}
function getMessageList(){
$this->messageList = array();
// Open the actual directory
if ($handle = @opendir($this->messageDir)) {
// Read all file from the actual directory
while ($file = readdir($handle)) {
if (!is_dir($file)) {
$this->messageList[] = $file;
}
}
}
rsort($this->messageList);
return $this->messageList;
}
function displayGuestbook($page=1){
$list = $this->getMessageList();
//echo "<center><a href='add.php'>Leave a message</a></center>";
echo "<table class='newsList'>";
//Get start point and end point
$startItem = ($page-1)*$this->itemsPerPage;
if (($startItem + $this->itemsPerPage) > sizeof($list)) $endItem = sizeof($list);
else $endItem = $startItem + $this->itemsPerPage;
for ($i=$startItem;$i<$endItem;$i++){
//foreach ($list as $value) {
$value = $list[$i];
$data = file($this->messageDir.DIRECTORY_SEPARATOR.$value);
$name = trim($data[0]);
$email = trim($data[1]);
$submitDate = trim($data[2]);
unset ($data['0']);
unset ($data['1']);
unset ($data['2']);
$content = "";
foreach ($data as $value) {
$content .= $value;
}
echo "<tr id=\"class-name\"><th align='left'>$name</th></tr>";
echo "<tr><td>".nl2br(htmlspecialchars($content))."<br/></td></tr>";
}
echo "</table>";
if (sizeof($list) == 0){
echo "<center><p>Be the first to write a comment!</p><p> </p></center>";
}
// Create pagination
if (sizeof($list) > $this->itemsPerPage){
echo "<div id=\"navigation\">";
if ($startItem == 0) {
if ($endItem < sizeof($list)){
echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next »</a></div>";
} else {
// Nothing to display
}
} else {
if ($endItem < sizeof($list)){
echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >« Prev</a></div>";
echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next »</a></div>";
} else {
echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >« Prev</a></div>";
}
}
echo "<br/></div><br/>";
}
echo "<hr />";
$this->displayAddForm();
}
function displayAddForm(){
?>
<form class="iform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name:<br/>
<input type="text" name="name" size="30" style="width: 200px"/><br/><br/>
Your message:<br/>
<textarea name="message" rows="7" style="width: 90%" wrap="hard" ></textarea><br>
<br/>
<center><input type="submit" name="submit" value="Save" /><br/>
<br/>
</center>
</form>
<?php
}
function insertMessage(){
$name = isset($_POST['name']) ? $_POST['name'] : 'Anonymous';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$submitDate = date($this->dateFormat);
$content = isset($_POST['message']) ? $_POST['message'] : '';
if (trim($name) == '') $name = 'Anonymous';
if (strlen($content)<5) {
exit();
}
$filename = date('YmdHis');
if (!file_exists($this->messageDir)){
mkdir($this->messageDir);
}
$f = fopen($this->messageDir.DIRECTORY_SEPARATOR.$filename.".txt","w+");
fwrite($f,$name."\n");
fwrite($f,$email."\n");
fwrite($f,$submitDate."\n");
fwrite($f,$content."\n");
fclose($f);
}
}
?>