<?php /**/ ?><?php
 
if (stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) {
  
header("Content-type: application/xhtml+xml");
  echo 
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
 } else {
  
header("Content-type: text/html");
  echo 
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
 }
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr">
<head>
<title> Guestbook </title>
<meta name="language"    content="en" />
<meta name="author"      content="Agilo" />
<meta name="contact"     content="agilo3@gmail.com" />
<meta name="description" content="A guestbook made by Agilo." />
<meta name="keywords"    content="Agilo, Agilo's guestbook, guestbook, PHP, free." />
<style type="text/css" title="Default stylesheet">
/* <![CDATA[ */
 body {
  font-family: helvetica, arial, verdana;
 }
 a, a:link, a:visited {
  text-decoration: underline;
  color: #600;
 }
 a:hover, a:active {
  text-decoration: none;
  color: #F00;
 }       
 .main {
  width: 100%;
  text-align: center;
 }
 .main .body {
  width: 506px;
  margin: 0px auto;
  text-align: left;
 }
 .main .body .top {
  width: 100%;
  text-align: center;
  margin-bottom: 25px;
 }
 .main .body .top .menu {
  width: 333px;
  border: 1px solid #000;
  padding: 10px;
  margin: 0px auto;
 }
 img {
  border: 0px;
 }
 .right {
  text-align: right;
 }
 .line {
  margin: 20px 0px;
  border: 1px solid #000;
 }
 .main .body .sign {
  width: 500px;
 }
 .main .body .txt {
  width: 425px
 }
 .main .body fieldset, dl {
  margin: 20px 0px;
  padding: 2px 4px;
 }
 .main .body dl dt {
  margin-bottom: 2px;
 }
 .main .body dl dd {
  margin-bottom: 8px;
  margin-left: 12px;
 }
 .main .body .right {
  margin-top: 25px;
  text-align: right;
 }
/* ]]> */
</style>
</head>
   
<body>


<div class="main">
 <div class="body">
  <?php
   
// Agilo's Guestbook version 1.1.
   // Created by Agilo (agilo3@gmail.com) on March 6, 2005.


   // Settings:
   
$database 'gbdb.txt';      // Entries database -- be sure to make this file writeable (chmod 777).
   
$wrap_num 10;              // How many entries to show per page.
   
$min_len  30;              // Minimum length of a comment (if smaller than this, the users' entry will not be accepted).


   // Advanced settings (do not edit unless know what they are for):
   
$br '<br />';              // Type of line-break to use.
   
$hr '<hr class="line" />'// Type of horizontal line to use.



   // Do not edit anything below this line!
   // -------------------------------------
  
?>

  <div class="top">
   <div class="menu">
    <a href="guestbook.php">View guestbook</a> &nbsp; - &nbsp; <a href="?sign">Sign guestbook</a>
   </div>
  </div>

  <?php

   
// Error handler.
   
function error($msg) {
    global 
$br$hr;

    echo 
$br."<strong>Error!</strong>".$br.$br."\n  ".$msg.$br.$br.$hr.$br."\n";
   }

   
// Strip backslashes and HTML characters.
   
function strip($text) {
    return 
stripslashes(htmlentities($text));
   }

   
// Get a request variable.
   
function get($id) {
    return 
$_REQUEST[$id];
   }

   
// Display page selection box.
   
function select() {
    global 
$wrap_num$database;

    
$i=1;
    
$total_entries count(@file($database));

    if (
$total_entries $wrap_num) {
     echo 
"  <form method=\"get\" action=\"".$_SERVER['PHP_SELF']."\">\n".
          
"   <div class=\"right\">\n".
          
"    <select name=\"offset\">\n".
          
"     <optgroup label=\"Pages\">\n";
     for (
$x=$total_entries$x>=0$x--) {
      
$page_num = ($x*$wrap_num);
      if (
$page_num $total_entries) {
       if (isset(
$_GET['offset']) && is_numeric($_GET['offset']) && ($_GET['offset'] == $page_num)) $selected ' selected="selected"';
       echo 
"      <option".$selected." value=\"".$page_num."\">Page ".$i."</option>\n";
       if (isset(
$selected)) unset($selected);
       
$i++;
      }
     }
     echo 
"     </optgroup>\n".
          
"    </select>\n".
          
"    <input type=\"submit\" value=\"Go\" />\n".
          
"   </div>\n".
          
"  </form>";

     echo 
"\n\n";
    }
   }

   
// Show the entries.
   
function show_entry($e_id$e_name$e_mail$e_site$e_url$e_txt$sign_date$total) {
    global 
$hr;

    echo 
"  <!-- Entry ".($e_id+1)." of ".$total.", posted on ".$sign_date.". -->\n\n".
         
"  <a name=\"".($e_id+1)."\"></a>\n".
         
"  <p class=\"right\">Signed on <strong>".$sign_date."</strong>.</p>\n".
         
"  <dl>\n".
         
"   <dt><strong>Name:</strong></dt>\n".
         
"   <dd>".$e_name."</dd>\n".
         
"   <dt><strong>E-Mail address:</strong></dt>\n".
         
"   <dd><a href=\"mailto:".$e_mail."\">".$e_mail."</a></dd>\n".
         (
$e_site=="none" "" "   <dt><strong>Site name:</strong></dt>\n".
                                 
"   <dd>".$e_site."</dd>\n").
         (
$e_url=="none" "" "   <dt><strong>Site URL:</strong></dt>\n".
                                 
"   <dd><a href=\"".$e_url."\">".$e_url."</a></dd>\n").
         
"   <dt><strong>Comments:</strong></dt>\n".
         
"   <dd>".$e_txt."</dd>".
         
"\n  </dl>\n\n\n  ".$hr."\n\n\n";
   }


   
// Check to see if the database exists and is writeable.
   
if (!file_exists($database)) {
    
// The database does not exist.  Try to create it.
    
if (!@touch($database)) {
     
error("The database file: ".$database." does not exist!".$br."Script was unable to create it.");
    }
   } else {
    if (!
is_writable($database)) {
     
// The database file is not writeable.  Try to chmod.
     
if (!@chmod($database0777)) {
      
error("The database is not writeable.".$br."Script failed to <q><kbd>chmod 0777 ".$database."</kbd></q>");
     }
    }
   }



   
// Main pages start here.

   
if (get(save) && empty($_POST['preview'])) {
    
//Save an entry to the database.

    
if (strlen(get(comments)) >= $min_len) {

     
// Quickly do a check for spam/bots on known keywords (more can be added manually):
     
$keywords = Array("viagra""Sylvia-Saint""<script""tits""pussy""sex""xxx""subscribe""<b>",
                       
"<a ""<img ""free sex""free porn""order online""prozac""levitra""paxil""http");
     for (
$i=0$i<count($keywords); $i++) {
      if (
preg_match("/".$keywords[$i]."/i"get(name)))     $write_entry 1;
      if (
preg_match("/".$keywords[$i]."/i"get(mail)))     $write_entry 1;
      if (
preg_match("/".$keywords[$i]."/i"get(site)))     $write_entry 1;
      if (
preg_match("/".$keywords[$i]."/i"get(http)))     $write_entry 1;
      if (
preg_match("/".$keywords[$i]."/i"get(comments))) $write_entry 1;
     }
     if (isset(
$write_entry)) error("Anti-spam script in effect. &nbsp;Your post has been rejected!");

     
// Check if Name and E-Mail address have been filled in.
     
if (empty($_POST['name']) || empty($_POST['mail'])) {
      
$write_entry 1;
      
error("Name and E-Mail must be filled in.");
     } else {
      if (!
preg_match("/(([_\.0-9a-z-]+)\@([0-9a-z][0-9a-z-]+)\.([a-z]{2,6}))/i"$_POST['mail'])) {
       
error("Invalid E-Mail address.");
       
$write_entry 1;
      }
     }

     
// Check to see if the entry isn't TOO large.
     
if (strlen(get(comments)) > 2500) { // 2500 is still a very generous amount.  Edit if wanted.
      
$write_entry 1;
      
error("Comments entry is <strong><em>WAY</em></strong> too large!");
     }


     if (empty(
$write_entry)) {
      
// Write the entry to the database

      // Get old content.
      
$file = @fopen($database"rb");
      
$entries = @fread($filefilesize($database));
      
$entry_id = @count(file($database));
      @
fclose($file);

      
// Safety checks.
      
$entry_name     strip(get(name));
      
$entry_mail     strip(get(mail));
      
$entry_comments strip(get(comments));
      
$entry_comments preg_replace("/\n/"'\n'$entry_comments);
      
$entry_comments preg_replace("/\r/"''$entry_comments);
      if (
get(site) != NULL && get(http) != NULL && get(http) != "http://") {
       
$entry_site    strip(get(site));
      } else {
       
$entry_site    "none";
      }
      if (
get(http) != NULL && get(http) != "http://" && $entry_site != "none") {
       
$entry_http    strip(get(http));
      } else {
       
$entry_http    "none";
      }
      
$entry_name     preg_replace("/\|/""&#124;"$entry_name);
      
$entry_mail     preg_replace("/\|/""&#124;"$entry_mail);
      
$entry_site     preg_replace("/\|/""&#124;"$entry_site);
      
$entry_http     preg_replace("/\|/""&#124;"$entry_http);
      
$entry_comments preg_replace("/\|/""&#124;"$entry_comments);

      
// Generate string to write.
      
$save_string $entry_id."|".$_SERVER['REMOTE_ADDR']."|".$entry_name."|".$entry_mail."|".
                     
$entry_site."|".$entry_http."|".$entry_comments."|".date("F j, Y, g:iA")."|\n".$entries;


      
// Open file for saving.
      
$file = @fopen($database"w+");

      
// Write it.
      
if (!@fwrite($file$save_string)) {
       
error("Unable to save data.");
      } else {
       echo 
$br."Data saved successfully.".$br."<a href=\"".$_SERVER['PHP_SELF']."\">View</a> your entry.";
       
$saved_ok 1;
      }
      @
fclose($file);
     }
    } else {
     
error("Size of the comment was too small.".$br."Nothing was written to the database.");
    }

   }
   if (isset(
$_REQUEST['sign']) || $_POST['save'] == 1) {
    if(!isset(
$saved_ok)) {
     
// Write an entry.

     // Preview entry.
     
if (isset($_POST['preview'])) {
      
// A few safety checks.
      
$a_comments strip(get(comments));
      while (
preg_match("/!!/"$a_comments)) $a_comments preg_replace("/!!/""!"$a_comments);
      while (
preg_match("/\?\?/"$a_comments)) $a_comments preg_replace("/\?\?/""?"$a_comments);
      
$a_comments_len strlen($a_comments);
      
$a_comments preg_replace("/\n/"$br$a_comments);
      
$a_comments preg_replace("/\r/"''$a_comments);
      
// Truncate multiple line-breaks:
      
while (preg_match("/".addcslashes($br.$br.$br.$br"/")."/"$a_comments)) $a_comments str_replace($br.$br.$br.$br$br.$br.$br$a_comments);
      
$a_comments preg_replace("/  /"" &nbsp;"$a_comments);
      
// URL's to HTML links (not made/invented by Agilo -- credit goes out to php.net):
      
$a_comments preg_replace("/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i""<a href=\"\\0\">\\0</a>"$a_comments);
      
// E-Mail links to HTML E-Mail links (not made/invented by Agilo -- credit goes out to php.net):
      
$a_comments preg_replace("/(([_\.0-9a-z-]+)\@([0-9a-z][0-9a-z-]+)\.([a-z]{2,6}))/i""<a href=\"mailto:\\0\">\\0</a>"$a_comments);

      if (
strlen($a_comments) < $min_len) {
       echo 
$br.$br."<strong>Warning:</strong> The size of the comment is too small, nothing will be written!\n  ".
            
$br.$br."Minimum size: ".$min_len."\n  ".$br."Current size: ".$a_comments_len."\n  ".$hr."\n\n";
      }

      echo 
"  <dl>\n".
           
"   <dt><strong>Name:</strong></dt>\n".
           
"   <dd>".strip(get(name))."</dd>\n".
           
"   <dt><strong>E-Mail address:</strong></dt>\n".
           
"   <dd><a href=\"mailto:".strip(get(mail))."\">".strip(get(mail))."</a></dd>\n".
           (
get(site)=="" || (get(http)=="http://" || get(http)=="") ? "" "   <dt><strong>Site name:</strong></dt>\n".
           
"   <dd>".strip(get(site))."</dd>\n").
           (
get(http)=="http://" || get(http)=="" || get(site)=="" "" "   <dt><strong>Site URL:</strong></dt>\n".
           
"   <dd><a href=\"".strip(get(http))."\">".strip(get(http))."</a></dd>\n").
           
"   <dt><strong>Comments:</strong></dt>\n".
           
"   <dd>".$a_comments."</dd>".
           
"\n  </dl>\n\n\n  ".$hr."\n\n\n";
     }
     
  
?> 
  <div class="sign">
   <form method="post" action="<?= $_SERVER['PHP_SELF'?>?sign">
    <fieldset>
     <legend>Sign Guestbook</legend>
     <dl>
      <dt><label for="name">Name:</label></dt>
      <dd><input type="text" name="name" id="name" class="txt" value="<?= strip(get(name)) ?>" /></dd> 
      <dt><label for="mail">E-Mail address:</label></dt>
      <dd><input type="text" name="mail" id="mail" class="txt" value="<?= strip(get(mail)) ?>" /></dd>
      <dt><label for="site">Site name (optional):</label></dt>
      <dd><input type="text" name="site" id="site" class="txt" value="<?= strip(get(site)) ?>" /></dd>
      <dt><label for="http">Site URL (optional):</label></dt>
      <dd><input type="text" name="http" id="http" class="txt" value="<?= (isset($_POST['http']) ? strip(get(http)) : "http://"?>" /></dd>
      <dt><?= $br ?><label for="comments">Comments (<abbr title="HyperText Markup Language">HTML</abbr> is <strong>not</strong> permitted!):</label></dt>
      <dd><textarea name="comments" id="comments" class="comments" rows="10" cols="52"><?= strip(get(comments)) ?></textarea></dd>
     </dl>
     <input type="hidden" name="save" value="1" />
     <label><input type="checkbox" name="preview" <?= (isset($_POST['preview']) ? 'checked="checked" ' ""?>/> Preview first.</label>
     <?= $br.$br ?> 
     <input type="submit" value="Sign the guestbook" />
    </fieldset>
   </form>
  </div>
  <?php
    
}
   } else {
    
// View guestbook entries.

    
echo "\n  ".$br."\n";
    
select();
    echo 
"  ".$hr."\n\n\n";

    
$gb_entries = @file($database);
    
$total_entries count($gb_entries);

    if (!empty(
$gb_entries)) foreach ($gb_entries as $entry) {
     
$var explode("|",$entry);

     
$view_comments preg_replace("/\\\\n/"$br$var[6]);
     
// Truncate multiple line-breaks:
     
while (preg_match("/".addcslashes($br.$br.$br.$br"/")."/"$view_comments)) $view_comments str_replace($br.$br.$br.$br$br.$br.$br$view_comments);
     
$view_comments preg_replace("/  /"" &nbsp;"$view_comments);
     
// Truncate words with over 55 characters:
     
$view_comments preg_replace('/([^<>\s]{55})/i',"\\0<br />"$view_comments);
     
// URL's to HTML links (not made/invented by Agilo -- credit goes out to php.net):
     
$view_comments preg_replace("/(?<!<a href=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i""<a href=\"\\0\">\\0</a>"$view_comments);
     
// E-Mail links to HTML E-Mail links (not made/invented by Agilo -- credit goes out to php.net):
     
$view_comments preg_replace("/(([_\.0-9a-z-]+)\@([0-9a-z][0-9a-z-]+)\.([a-z]{2,6}))/i""<a href=\"mailto:\\0\">\\0</a>"$view_comments);

     if (isset(
$_GET['offset']) && is_numeric($_GET['offset'])) {
      if (
$var[0] > $_GET['offset'] && $var[0] < ($_GET['offset']+$wrap_num)) {
       
show_entry($var[0], $var[2], $var[3], $var[4], $var[5], $view_comments$var[7], $total_entries);
      } else {
       if (
$_GET['offset'] < || $_GET['offset'] > $total_entries) if (empty($bad_offset_var)) {
        
$bad_offset_var 1;
        
error("Bad offset.");
       }
      }
     } else {
      if (
$var[0] > ($total_entries-$wrap_num-1) && $var[0] < $total_entries) {
       if (
$total_entries >= $wrap_num && $var[0] >= $wrap_num) {
        
show_entry($var[0], $var[2], $var[3], $var[4], $var[5], $view_comments$var[7], $total_entries);
       } else if(
$total_entries <= $wrap_num) {
        
show_entry($var[0], $var[2], $var[3], $var[4], $var[5], $view_comments$var[7], $total_entries);
       }
      }
     }
    }
    
select();
   }
  
?> 
  <p class="right">
   <a href="http://validator.w3.org/check/referer"><img src="/xhtml.gif" alt="Valid XHTML 1.0!" /></a>
  </p>

 </div>
</div>

</body>
</html>