Przyszło mi dzisiaj napisać możliwie najprostszą możliwą księgę gości w PHP. Stwierdziłem, że się z wami podzielę :) Miała nie korzystać z bazy danych i nie mieć walidacji :) także jest naprawdę prosta. Na dodatek całość zawiera się aż w jednym pliku.

Najpierw zdefiniujemy sobie stałą, w której będziemy trzymać nazwę pliku przechowującego wpisy:

define("DB_FILE_NAME", 'baza.dat');

Następnie stworzymy metodę, która sprawdzi czy plik DB_FILE_NAME istnieje, a jeśli nie – to go utworzy:

function gb_init(){
  // sprawdzamy czy plik istnieje
  if (!file_exists(DB_FILE_NAME)){
    // jesli nie, to go tworzymy
    $f = fopen(DB_FILE_NAME, 'w');
    fclose($f);
  }
}

Następnie utworzymy metodę która będzie dodawać nam wpisy. Jeśli ktoś nie będzie miał nicka, to jako nick wpisze “Gość”:

function add_entry($nick, $tresc){
  $nick = HTMLSpecialChars($nick);
  $tresc = HTMLSpecialChars($tresc);
  if($nick=="")  $nick =  "Gość";
  $date = date("j.m.Y G:i");
  $text = ereg_replace("\n", "<br />", $tresc);
  $wynik = '<b>'. $nick . '</b>'. "     " . $date . '|||' .$text.  "\n";

  $fp = fopen(DB_FILE_NAME, "a");
  
  fwrite ($fp, $wynik);
  fclose($fp);
}

Następnie całość inicjujemy (przed htmlem – ponieważ to jest obsługa dodawania wpisów, a nie ich wyświetlania):

  gb_init();
  if ($_POST['nick'] && $_POST['tresc']){
    add_entry($_POST['nick'], $_POST['tresc']);
  }

Teraz pozostaje nam wyświetlić pliki:

$myFile = fopen(DB_FILE_NAME, "r");
$i = -1;
while (!feof($myFile)) {
  $myLine = fgets($myFile, 2000);
  $i++;
}
fclose($myFile);

echo "Ilość wpisów w Księdze: $i<br /><br />";
// ładujemy pliki w odwrotnej kolejnosci
$file = array_reverse(file('baza.dat'));
// I wyświetlamy rozdzielajac dane - seperator to |||
foreach ($file as $key => $value) {
  list($imie, $tresc) = explode("|||", $value);
  echo $imie . '<br />';
  echo $tresc . '<br /><br />';
  echo '<hr>';
}

Pozostaje nam jeszcze tylko formularz dodawania wpisów:

<form method="post" action="ksiega.php?id=zapisz">
<div>
   Imię: <input type="text" name="nick" /><br />
   Treść:<br />
    <textarea cols="35" name="tresc" rows="12"></textarea>  <br />
   <input type="submit" value="Wyślij"/>
</div>
</form>