6.2.2007

PHP - Guest book without MySQL

Jednoduchá návštěvní kniha, která příspěvky ukládá do souboru na serveru. Funguje v PHP ve verzi 4.x a vyšší.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title> G - book </title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">

<SCRIPT Language="JavaScript">
<!--
function VlozSmile (str)
{
  document.formular.komentar.focus();
  document.formular.komentar.value += (str);
}
//-->
</SCRIPT>

<STYLE type=text/css>
body {
 background: #000000;  color: #FFFFFF;
}

table {
 font-variant: small-caps;
}

.navigace {
 font-size: 14px; font-variant: small-caps;
}

.navigace a {
 font-weight: bold;
}

.komentare div {
 text-align: left; width: 600px; border-bottom: 2px #FFFFFF solid;
}

.komentare h3 {
 font-size: 18px; font-weight: bold; font-variant: small-caps; padding: 10px 0 3px 0; margin: 0;
}

.komentare h4 {
 font-weight: normal; padding: 0px 0px 0px 6px; margin: 0;
}

.komentare h5 {
 font-size: 14px; font-weight: normal; background-color: #444444; padding: 4px 4px 4px 6px; margin: 0;
}

.komentare h6 {
 font-size: 10px; font-style: italic; padding: 0; margin: 0;
}

</STYLE>

</head>

<body>
<center>
  <form action="gbook.php" method="POST" Name="formular">
  <table>
    <tr><td> Jméno </td><td> <input Type="Text" Name="jmeno" Value="" align=left maxlength="30" size="30"> </td></tr>
    <tr><td> E-mail </td><td> <input Type="Text" Name="email" Value="" align=left maxlength="40" size="30"> </td></tr>
    <tr><td colspan="2"> <textarea Name="komentar" Rows="5" Cols="54"></textarea> </td></tr>
    <tr><td align="left"> <input Type="submit" Name="submit" Value="Odeslat"> </td>
        <td align="right"> <input Type="reset" value="Smazat"> </td></tr>
    <tr><td colspan="2" align="center">
      <a Href="javascript:VlozSmile (' *:-)* ')"><img Border="0" Src="Img/pic1.gif"></a>
      <a Href="javascript:VlozSmile (' *:-/* ')"><img Border="0" Src="Img/pic2.gif"></a>
      <a Href="javascript:VlozSmile (' *:-(* ')"><img Border="0" Src="Img/pic3.gif"></a>
      <a Href="javascript:VlozSmile (' *:-O* ')"><img Border="0" Src="Img/pic4.gif"></a>
    </td></tr>
  </table>
  </form>

<?
// a teď samostatný PHP skript
  $jmenoSouboru = "komentare.txt"; // kam se budou ukládat příspěvky

  if ( isset($_POST['jmeno']) && $_POST['jmeno']!= null && isset($_POST['komentar']) 
       && $_POST['komentar']!= null && isset($_POST['submit']) ) {

    $jmeno = htmlSpecialchars (substr ($_POST['jmeno'],0,30)); // odstranění html značek a zkrácení na 30 znaků
    $email = htmlSpecialchars (substr ($_POST['email'],0,60));
    $komentar = htmlSpecialchars (substr ($_POST['komentar'],0,900)); // komentář bude zkrácen na 900 znaků
    $komentar = wordwrap ($komentar,45," ",1); // rozdělení delších slov
    $komentar = str_replace (chr(10), "<br>", $komentar); // nahrazení ENTRU za značku <br>
    $komentar = str_replace (chr(13), "", $komentar);
    $poleCo = array("*:-)*" , "*:-/*" , "*:-(*" , "*:-O*");
    $poleNa = array('<img src="Img/pic1.gif">','<img src="Img/pic2.gif">',
                    '<img src="Img/pic3.gif">','<img src="Img/pic4.gif">');
    $komentar = str_replace ($poleCo, $poleNa, $komentar); // řetězce v $poleCo budou nahrazeny za $poleNa
    $Today = (date ("j.m.Y H:i")); // datum příspěvku

    if ( eregi ("^([a-zA-Z0-9.-])+@([a-zA-Z0-9-]+\.)+([a-zA-Z0-9]{2,4})$" , $email)) {
      $Input = "<h3>$jmeno</h3> <h4><b>Email:</b>$email</h4> <h5><b>Napsal:</b>$komentar</h5> <h6><b>Datum:</b>$Today</h6>\n";
    }
    else {
      $Input = "<h3>$jmeno</h3> <h5><b>Napsal:</b>$komentar</h5> <h6><b>Datum:</b>$Today</h6>\n";
    }
    // zápis do souboru
    $datawrite = fopen( $jmenoSouboru,"a");
    FPuts($datawrite,$Input); 
    fclose( $datawrite );
  }

  // zobrazení příspěvků, pokud soubor existuje
  if (file_exists($jmenoSouboru)) {
    $zobraz = 20; //počet zobrazovaných příspěvků
    $poleSouboru = file($jmenoSouboru);

    // pokud nebude zadáno od jakého příspěvků má zobrazovat vybere 1
    if ( isset($_GET["od"]) && is_numeric($_GET["od"]) ) $od = $_GET["od"];
    else $od = 1;

    // pokud bude více příspěvků něž $zobraz tak přidá navigaci
    if(count($poleSouboru) > $zobraz) {
      echo "<div class=\"navigace\">Zobrazuji komentaře <b>$od - ".($od + $zobraz -1)."</b><br/>";
      if ($od != 1) echo " <a href=\"?od=1\"><<</a> ";
      if ($od > $zobraz) echo " <a href=\"?od='.($od - $zobraz).'\"><</a> ";
      if ($od + $zobraz < count($poleSouboru)) echo "<a href=\"?od=".($od + $zobraz)."\">></a> ";
      if ($od < count($poleSouboru) - $zobraz) echo "<a href=\"?od=".(count($poleSouboru) - $zobraz)."\">>></a> ";
      echo('<br>');

      for($i = 1;$i < Count($poleSouboru); $i += $zobraz) {
        if($i != $od) echo "[<a href=\"?od=$i\">$i - ".($i + $zobraz - 1)."</a>] ";
        else echo "<b>[$i - ".($i + $zobraz - 1)."]</b> ";
      }
      echo "</div>\n";
    }
    echo "<div class=\"komentare\">";
    for($i = count($poleSouboru) - ($od); ($i > count($poleSouboru) - $zobraz -  $od) & ($i >= 0)  ; $i--) {
      echo "<div>$poleSouboru[$i]</div>";
    }
    echo "</div>";
  }
?>
</center>
</body>
</html>

CLOSE