Avatar billede funkylezzz Praktikant
10. januar 2011 - 20:53 Der er 2 kommentarer og
1 løsning

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>&nbsp;</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 &raquo;</a></div>";
            } else {
              // Nothing to display
            }
        } else {
            if ($endItem < sizeof($list)){
              echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; Prev</a></div>";
              echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next &raquo;</a></div>";
            } else {
              echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; 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);
 
}
}
?>
Avatar billede nissen2630 Novice
10. januar 2011 - 22:29 #1
Her noget du burde kunne bruge:
http://www.phpcaptcha.org/
Avatar billede funkylezzz Praktikant
19. juni 2011 - 20:30 #2
Lukker lidt sent
Avatar billede nissen2630 Novice
19. juni 2011 - 21:54 #3
Og løsningen var ???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester