|
Prosta księga gości
oparta na plikach
Stwórzmy więc na początek odpowiednie dokumenty:
index.php - strona główna księgi, jeśli chcemy, możemy ją nazwać także księga.php, aby nie robić zbytniego bałaganu na stronie
dodaj.php - w pliku tym napiszemy skrypt do dodawania wpisów do pliku wpisy.php
wpisy.php - tam będziemy zapisywać wpisy
W pliku index.php wpisujemy tylko jedno polecenie PHP:
<? include "wpisy.php" ?>
Spowoduje to włączenie pliku wpisy.php tam, gdzie mają się pojawiać wpisy. Poniżej należy także stworzyć formularz, przez który użytkownicy będą mogli dodać swój własny wpis.
<FORM action="dodaj.php" method="POST">
Twój nick: <INPUT type="text" name="nick"><BR>
Twój e-mail: <INPUT type="text" name="email"><BR>
Treść wpisu: <BR>
<TEXTAREA name="tresc" rows=5 cols=50><</TEXTAREA>
<BR><BR>
<INPUT type="submit" value=". ok ">
</FORM>
Oczywiście nic nie stoi na przeszkodzie zmienić wygląd tego formularza. Wystarczy tylko pamiętać o zachowaniu nazewnictwa pól, gdyż będzie ono wykorzystywane jako zmienne ("<INPUT {...} name="nazwa">") oraz pliku, do którego ma się odwołać formularz ("<FORM action="">").
Zapisujemy i zamykamy plik i rozpoczynamy edycję pliku dodaj.php
Na samym początku warto sprawdzić, czy użytkownik aby na pewno wysłał dane przez formularz. Wpisujemy więc:
<?
if($REQUEST_METHOD != "POST") {
echo "Dane muszą zostać wysłane przez formularz!";
exit;
}
Z początku ustalmy może szablon pojedynczego wpisu. Dopisujemy więc do pliku dodaj.php:
$szablon = "<A href=\"mailto:%s\">%s</a> twierdzi, że<BR>%s";
Później tylko sformatujemy ten szablon przy użyciu funkcji sprintf().
Teraz trzeba skopiować plik z wpisami do pliku tymczasowego - tmp.php. Dodajemy kolejną linię:
copy("wpisy.php", "tmp.php");
Teraz otwieramy plik "wpisy.php" a odpowiednim argumentem, zamazującym poprzednią zawartość pliku ("w"). Bez obawy jednak, nie stracimy zawartości pliku, przecież skopiowaliśmy jego zawartość do pliku tymczasowego.
$handle = fopen("wpisy.php", "w");
Teraz trzeba dopisać na początek nowy wpis. Pamiętamy o szablonie - wystarczy tylko wypełnić go odopwiednimi wartociami.
$wpis = sprintf($szablon, $email, $nick, $tresc);
Pierwszy argument to zmienna z szablonem. Kolejne zmienne to wartości "%s" Koniecznie pamiętajcie o ich kolejnośći!
Teraz zapisujemy te dane przy użyciu funkcji fwrite(). Jako argumenty podajemy uchwyt pliku (tu: $handle) oraz zawartość do dopisania (tu: $wpis).
fwrite($handle, $wpis);
Teraz możemy zamknąć uchwyt poleceniem fclose(). Jako argument podajemy zmienną z uchwytem - $handle:
fclose($handle);
Teraz należy dopisać poprzednie wpisy na koniec obecnego pliku. Pamiętajmy, iż mamy je zapisane w pliku tmp.php.
Otwieramy więc plik tmp.php do odczytu (argument 'r'):
$handle_tmp = fopen("tmp.php", "r");
Teraz zastosujemy pętle, która będzie wykonywana dopóki nie odnaleziony zostanie koniec pliku w uchwycie $handle_tmp.
while(!feof($handle_tmp)) {
$zaw = fgets($handle_tmp, 4096);
$dodaj_wpisy .= $zaw;
}
Jak już z pewnością zauważyliście pętla ta wykonuje kilka rzeczy - przy pomocy funkcji fgets() pobiera 4 kb KB pliku $handle_tmp oraz dopisuje na koniec pliku $dodaj_wpisy te właśnie 4 kb.
Teraz można skasować ten plik tymczasowy przy użyciu funkcji unlink()
unlink("tmp.php");
Ostatnim etapem pracy na plikach będzie dopisanie na koniec pliku wpisy.php zmiennej, a dokładniej wartości zmiennej $dodaj_wpisy. Otwieramy więc ten plik, tym razem z argumentem 'a', aby PHP dopisało dane na końcu pliku.
$_handle = fopen("wpisy.php", "a");
fwrite($_handle, $dodaj_wpisy);
fclose($_handle);
Tutaj już chyba nie trzeba nic tłumaczyć - jest to podobny kod do tego na początku.
I praktycznie teraz wszystko jest gotowe. Warto jednak zrobić taki ciekawy bajerek, aby użytkownik został automatycznie przekierowany do księgi z jego wpisem (czyli odpada stosowanie JavaScriptu, gdyż cofnie nas do strony, jednak nie będzie widocznego najnowszego wpisu). Zastosujemy tutaj funkcję header(). Dopisujemy na końcu pliku:
Header("Location: index.php");
Dzięki temu automatycznie czytelnicy zostaną przeniesieni do pliku index.php
Aha. Na systemach rodziny UNIX konieczne jest nadanie odpowiednich praw odpowiednim folderom/plikom. Można to zrobić np. w Windows Commander, zaznaczając odpowiedni plik, wybierając File -> Change Attributes i zaznaczając Read oraz Write dla każdej grupy.
Kod źródłowy można pobrać tu. Możecie spokojnie jej używac u siebie, pamiętajcie jednak o odpowiednim wyglądzie tej strony.
Kamil Szmyd
<== WSTECZ
=
|