[PHP] Jak stworzyć system komentarzy pod newsami, artykułami lub zdjęciami bez użycia bazy danych?
Chcesz umożliwić użytkownikom komentowanie newsów, zdjęć, artykułów.
Wykonanie prostego systemu do komentowania newsów czy artykułów nie jest trudne, a umożliwia poznanie opinii innych osób i daje możliwość wypowiedzenia się na określony temat (i jednocześnie podnosi oglądalność serwisu!).
Komentarze są bardzo popularne i można je wykonać na wiele różnych sposobów. Jednym z nich jest zapisywanie komentarzy do plików tekstowych - sposób szybki i łatwy w obsłudze, więc wykonajmy coś takiego.
<?
$katalog="komentarze/";
$id=$_REQUEST["id"];
$pole1 = trim($_POST["pole1"]);
$pole2 = trim($_POST["pole2"]);
if ($pole1<>"" and $pole2<>"") {
$pole1 = stripslashes($pole1);
$pole2 = stripslashes($pole2);
$pole2=eregi_replace("\r","",$pole2);
$pole2=eregi_replace("\n","<br>",$pole2);
$data = sprintf("%04d-%02d-%02d %02d:%02d:%02d",
date("Y"), date("m"), date("d"), date("H"), date("i"), date("s"));
$f=fopen("$katalog$id.txt","a");
fputs($f,"$data`$pole1`$pole2\n");
fclose($f);
}
if (file_exists("$katalog$id.txt")) {
$dane = file("$katalog$id.txt");
$dane = array_reverse($dane);
foreach ($dane as $linia) {
$l = explode("`", $linia);
echo "<p>Dnia <b>$l[0]</b> użytkownik <b>$l[1]</b> napisał:<br>$l[2]";
}
} else echo "Twój komentarz może być pierwszy...";
?>
<p><form action="index.php" method="post">
<input type="hidden" name="id" value="<? echo $id; ?>">
<table>
<tr><td>imie i nazwisko:</td><td><input type="text" name="pole1"></td></tr>
<tr><td>komentarz:</td>
<td><textarea name="pole2" rows="5" cols="20"></textarea></td></tr>
<tr><td> </td><td><input type="submit" value=" wyślij "></td></tr>
</table>
</form>
Do pełni szczęścia potrzebny będzie nam numer lub identyfikator newsa, do którego komentarze będziemy dodawać. Ponieważ newsy i tak musisz pokazać na stronie w zależności od numeru, wykorzystamy go przy tworzeniu komentarza. Numer newsa przypisany będzie do zmiennej $id. Po wejściu do newsa, np. index.php?id=123 będzie go można skomentować.
Utwórz w tym celu katalog, gdzie będą przechowywane komentarze i nadaj mu prawa do czytania, uruchamiania i zapisywania dla każdego użytkownika (chmod 777). W przykładzie jest to katalog "komentarze/".
Gdy znasz numer newsa, możesz wstawić go do formularza w ukrytym polu. Gdy ktoś dopisze komentarz, zapiszemy tekst w katalogu z komentarzami w pliku z numerem newsa i rozszerzeniem .txt, np. 123.txt. Wszystkie komentarze dotyczące newsa 123 będą zapisywanie w tym pliku.
Sposób z osobnymi plikami dla każdego newsa jest bardzo wydajny, bo nie musisz tworzyć jednego, ogromnego pliku z wszystkimi komentarzami, w którym trzeba długo wyszukiwać opinie dla wybranego newsa.
Gdy komentarz zostanie przesłany, odbieramy wartości pól tekstowych i zapisujemy każdy komentarz w postaci linijki tekstu w pliku tekstowym. Poszczególne pola w tekscie oddzielone są znakiem ` i zapisane w formacie data`imie`komentarz
Przed zapisaniem komentarza do pliku usuwane są z pól ukośniki przed cudzysłowami za pomocą funkcji stripslashes(). Formularz dodaje je automatycznie gdy przesyła cudzysłów. W drugim polu (TEXTAREA) użytkownik może wpisać znaki przejścia do nowej linii, więc trzeba je skasować (bo wpis ma być w jednej linijce w pliku) i zastąpić elementem <br>.
Pozostało jeszcze wygenerować datę wpisu i całość zapisać w pliku z numerem newsa. Zapisujemy przez dodanie nowej treści, stąd literka "a" przy fopen().
Gdy otworzysz newsa, skrypt sprawdza za pomocą funkcji file_exists() czy w katalogu z komentarzami istnieje plik o nazwie newsa. Jeżeli tak, pobiera jego zawartość, rozbija linijkę na poszczególne pola i wypisuje ich treść pod newsem jako komentarze. Jeżeli plik nie istnieje (nikt nie dodał komentarza) to pojawia się napis "Twój komentarz może być pierwszy...".