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.