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>