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>