PHP - gotowe rozwiązania - Forum Dyskusyjne
| DZIAŁANIE: |
Screeny z działania :![]() Screen nr.2 ![]() |
Kod:
KOD ZAPYTAŃ SQL :

Plik 134forum_add.php :

Plik 134forum_show.php :

Ewentualne Objaśnienia:
Mamy tutaj przykład realizacji dzięki PHP w połączeniu z bazą danych MySQL - Forum Dyskusyjnego. Jak widać na screenach - może nie wygląda to bardzo estetycznie, ładnie graficznie itd - ale, rzecz jasna jest taka, że to wszystko można całkiem łatwo modyfikować. Przedstawiłem Wam kod SQL ( zapytanie ) jakie należy wykonać, czy też na tej podstawie stworzyć sobie pola przez phpmyadmin.
Pierwszy plik 134forum_add.php - to plik odpowiedzialny za dodawanie nowych postów czy też odpowiedzi na poszczególne posty. To czy dopisujemy nowy post czy też odpowiadamy na jakiś już istniejący zależy od tablicy $_GET['ref'] - to on określa numer rekordu - na który odpowiadamy. Jeżeli odpowiadamy na post, który w bazie MySQL w polu nr ma wartość 1 - to w naszym nowym poście - wpisujemy mu jako wartość w polu ref właśnie 1. Tak więc wszystkie posty, które są odpowiedziami na jakiś główny post - mają w polu ref w bazie danych wartość pola nr tego głównego postu. Jeżeli nie ma takiej zmiennej - czyli $_GET['ref'] = 0 - wpisywany jest jako ref 0 - czyli oznacza nam to, że jest to nowy główny wątek/post. Jeśli wypełniono formularz oraz wszystkie jego pola - wpis zostaje dodany do bazy wraz z odpowiednią wartością pola 'ref' zależną od zmiennej $_GET[ref'] ( przekazywanej z pliku 134forum_show.php ). Jeżeli wyślemy formularz, ale nie wypełniliśmy wszystkich pól - deklarowane są zmienne $tresc, $tytul, $osoba - które jak widać są wartościami domyślnymi naszego formularza do dodawania postów - a to wszystko wiadomo po to, aby po wysłaniu formularza bez wszystkich pól - zostały te wypełnione z wartościami wpisanymi - aby nie trzeba było od nowa ich wpisywać, tylko należy dopisać te, których brakuje.
Natomiast jeżeli nie wysłaliśmy formularza jeszcze, ale istnieje zmienna $_GET['ref'] - odczytujemy odpowiedni rekord z bazy - czyli ten, którego identyfikator 'nr' jest taki sam jak tablica $_GET['ref']. Wyświetlamy info, że chcemy odpowiedzieć właśnie na ten post oraz pojawia się formularz do tego służący. W ukrytym polu formularza - musimy przechowywać parametr $_GET['ref'] - po to aby po wysłaniu go wiadomo było czy to nowy post (0) czy też odpowiedz na jakiś istniejący.
Zwróć też uwagę na to co się dzieje - z treści usuwamy wszelkie znaczniki HTMLowe <br> oraz znaki końca wiersza , dodajemy dwukropek i spacje - to takie jakby cytowanie. Do zmiennej $tytul - dodajmy wpis na początku "Re: " - czyli, oznacza to przy odpowiedzi, że jest to odpowiedz na jakiś post.
W przypadku oczywiście kiedy jeszcze nie wysyłamy formularza, ani też nie ma zmiennej $_GET['ref'] - wyświetlany jest formularz dodania nowego postu.
No to teraz drugi plik 134forum_show.php :
Tutaj na początku deklarujemy funkcję, która służy do wypisywania forum - nie
będę jej dokładnie opisywał - powiem tyle - zresztą to widać, że jest to funkcja
korzystająca z rekurencji - proponuje przeanalizować jej działanie - to naprawdę
proste !! Funkcja tak jak widać korzysta z tablic $fref, $fdata.... nie
przekazujemy danych jako parametr, lecz stosujemy je jako zmienne globalne -
przedrostek global. Robimy tak a nie inaczej gdyż przy dużym forum przekazywanie
danych w wywołaniach rekurencyjnych mogłoby zbyt obciążać pamięć.
Dalej wszystko zależy od zmiennej $nr, która ma wartość tablicy $_GET['nr'] -
jeżeli przekażemy jakiś numer - czyli nr posta do wyświetlenia - no to
oczywiście odczytujemy z bazy odpowiedni rekord i wyświetlamy go oraz dalsza
strukturę forum dzięki naszej napisanej funkcji. Tutaj zamiast mysql_fetch_assoc
używamy mysql_fetch_array - działa niemal tak samo, ale naszą tablicę $rekord
nie określa już jako $rekord['nazwa_pola_z_bazy'] lecz $rekord['indeks_liczbowy']
LUB też tak jak mysq_fetch_assoc. Czyli : mysql_fetch_assoc - zapisuje do
tablicy asocjacyjnej, a mysql_fetch_array - do asocjacyjnej, albo
numerycznej albo do obu!
Jeśli nie ma takiego rekordu w bazie do
wyświetlenia - zmiennej $nr nadajemy wartość 0 co dalej będzie wiązać się z tym,
że wyświetlimy całe forum. Jeżeli również nie podaliśmy wartość $_GET['nr']
czyli po prostu wchodzimy sobie bez żadnych parametrów na plik 134forum_show.php
- znowu zmiennej $nr nadajemy wartość 0 - oraz wywołujemy naszą napisaną funkcją
z parametrem właśnie jako zmienna $nr - wyświetla się nam cała struktura forum.