Max's Guestbook ile Math Captcha birleşimi..

Başlatan Sypro, 07 Eylül 2009 - 00:09:45

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Sypro

Selamlar,
adam akıllı olmayan Php bilgimle üç-beş şey yapmaya çalışıyorum. Son zamanlardaki takıntım (ya da takıldığım nokta) bir ziyaretçi defteri ile bir captcha sistemini birleştirmeye çalışmak oldu.

Bu adresten ücretsiz edinilebilen Max's Guestbook adlı ziyaretçi defterini (bunu seçmemin sebebi database gerektirmiyor olması diyebiliriz) ile bu adresten yine ücretsiz edinilebilen captcha sistemini (2 sayıyı çarpma toplama ve çıkarma üzerine kurulu, nedense anlamsız sözcüklerden daha mantıklı) birbiriyle çalışır hale getirmek için aklınıza gelen bir metod varsa memnuniyetle dinlerim. Nedense reCaptcha ile denediğimde de bu şekilde denediğimde de iki tane submit oluyor, birini hidden yapıyorum, diğerine basıldığında ikisi için de submit olduğu için birbiri ile birlikte değil birbirinden bağımsız çalışıyorlar. Yani form dolu ama captcha boş iken mesaj gidiyor, capcha dolu ama form boşken guestbook hata veriyor.

Not: Eğer önerebileceğiniz üstte mesajlar atta form (+captcha) bir sistem varsa denemekten çekinmem; fakat genelde bulabildiğim tüm ziyaretçi defterleri yeni pencerede form açıyor, bana aynı sayfada olan bir sistem lazım.


"Milliyetin çok belirgin vasıflarından biri dildir. Türk milletindenim diyen insan, her şeyden evvel ve mutlaka Türkçe konuşmalıdır. Türkçe konuşmayan bir insan, Türk kültürüne, topluluğuna bağlılığını iddia ederse buna inanmak doğru olmaz."

Sypro

3 gün geçti ve bu sorun devam etmekte:) Neredeyse hiç ilerleme kaydedemedim diyebilirim. Hatta o kadar sıkıldım ki bundan biraz uzaklaşıp başka şeylere bile yöneldim; fakat sorunun çözümünde yardımcı olmadı:) Bu yüzden geri dönüp sorunlarımla yüzleşmeyi düşünüyorum ve halen fikirlere açığım:)


"Milliyetin çok belirgin vasıflarından biri dildir. Türk milletindenim diyen insan, her şeyden evvel ve mutlaka Türkçe konuşmalıdır. Türkçe konuşmayan bir insan, Türk kültürüne, topluluğuna bağlılığını iddia ederse buna inanmak doğru olmaz."

raspacı

#2
Veri girerken iki sayı toplamını soran bir uygulama koydum içine basitçe. maxguestbook.class.php dosyasının içine bir kaç satır kod ekledim. Basit oldu ama geliştirilebilr. Zaten bu uygulama için yeterli gibi.

<?php

/**

 * Max's Guestbook

 * 

 * This is the Max's Guestbook business logic class. 

 * For more details please read the readme.txt

 */

?>


<?php

class maxGuestbook{

   var 
$messageDir 'messages';

   var 
$dateFormat 'Y-m-d g:i:s A';

   var 
$itemsPerPage 5;

   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><th align='left'><a href=\"mailto:$email\">$name</a></th>

                 <th class='right'>
$submitDate</th></tr>";

      
echo "<tr><td colspan='2'>".nl2br(htmlspecialchars($content))."<br/></td></tr>";

      }

      echo 
"</table>";

      if (
sizeof($list) == 0){

         echo 
"<center><p>No messages at the moment!</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(){
$a rand(115);
$b rand(1,18);
$c $a $b;

?>
 

  <form class="iform" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

    Name:<br/>

    <input type="text" name="name" size="30"/><br/><br/>

    Email:<br/>

    <input type="text" name="email" size="30"/><br/><br/>
    <input type="hidden" name="gizli" value="<?php echo $c?>">

    Your message:<br/>

    <textarea name="message" rows="7" cols="49"></textarea><br/>
    <?php echo $a." + ".$b;?> Toplamı yaz: <br /><input type="text" name="sayi" >

    <center><input type="submit" name="submit" value="Save" /></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'] : '';

   
$top = isset($_POST['sayi']) ? $_POST['sayi'] : '';
   
$gizli $_POST['gizli'];

   if (
trim($name) == ''$name 'Anonymous';

   if (
strlen($content)<OR $gizli !== $top) {

      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);

   

}

}

?>



edit: Hatayı düzelttim. > ekledim input sonuna.
nereye gidersen git kendini de götürürsün.