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>
February 12, 2011 — 15:58
A po co Ci ten ‘id=zapisz’ w action??
February 13, 2011 — 01:32
Tak naprawdę to po nic. Używałem tego do testów jak to kodziłem i tak naprawdę to po prostu mi się nie usunęło :) Można to też ukryć w polu typu hidden i po tym rozdzielać akcje w kontrolerze (poj. pliku który ma kilka akcji).
December 2, 2012 — 22:43
jestem z tych zielonych wiec zanim zaczne to zapytam co to znaczy to definiujemy na poczatku opisu i czy te wszystkie etapy maja byc zawarte w tej kolejnosci w jednym pliku x.php i jeszcze jedno czy mozna ten skrypt uzywac wielokrotnie na jednej stronie i roznych podstronach jako ksiege gosci i komentarze?
December 3, 2012 — 10:09
Tak, całość powinna być w jednym pliku (w kolejnosci takiej jak w poście). Oczywiście można tego uzywać także do komentarzy, jednak warto pamiętać, że to bardzo prosty skrypt który nie ma zadnych zabezpieczeń przed spamerami.
September 14, 2013 — 19:04
dlaczego po wciśnięciu wyślij wyskakuje mi strona nie została znaleziona???