Podczas tworzenia skryptu strony napotkałem problem. Cała strona ma działanie dynamiczne tj. linki w stylu bla.php?akcja=bla&akcja2=ble. Dajmy na to pojawia się problem przy wysyłaniu komentarza do newsa: ktoś nie wypełni pola nick i pola treść. W moim systemie zakładam, że wiadomość będzie wyświetlać się dynamicznie: jest jeden plik który po otrzymaniu wartości zmiennej $wiadomosc wyświetla ją jako jedyny tekst na świecie (wszystko inne znika, zaś wiadomość zostaje ładnie wycentrowana i wyświetlona). Niby proste ale pojawiają się problemy...
oto kilka plików dla przedstawienia problemu: index.php - odpowiedzialny za dynamiczne wyświetlanie strony:
<?php if (!$_GET['akcja']){ include ('news.php'); }elseif ($_GET['akcja'] == 'raporter'){ $plik = $_GET['akcja']; include "$plik.php"; include ('includes/config.php'); }else{ $wiadomosc .= '<font color="red">Podana podstrona nie istnieje!</font><br>'; } } ?>
plik news.php - wyświetlanie newsów i dodawanie komentarzy:
<?php /*****************************************/ /* PerfectMT2 */ /* By: ZuyPan */ /* www.perfectmt2.pl */ /* */ /*****************************************/ $baza = 'perfectmt2'; include ('includes/config.php'); if (!$_GET['akcja2']){ $zapytanie = 'SELECT * FROM newsy'; } }else{ $wiadomosc .= '<font color="red">Brak newsów do wyświetlenia.</font>'; } }elseif($_GET['akcja2'] == 'pokaz_komentarze'){ if ($_GET[id]){ $id = $_GET['id']; $formularz = "<table border='0' width='400'> <form action='?akcja=news&akcja2=pokaz_komentarze&id=$_GET[id]' method='POST'> <tr><td>Nick: </td><td><input type='text' name='nick' size='26'></td></tr> <tr><td>Treść: </td><td> <textarea name='tresc' cols='25' rows='5'></textarea></td></tr> <tr><td><input type='submit' name='submit' value='Wyślij'></td><td><Input type='reset' name='reset' value='Wyczyść'></td></tr> </form></td></tr></table> "; if (!$_POST['submit']){ $zapytanie = "SELECT * FROM komentarze_newsy WHERE id_newsa='$id'"; if ($_SESSION['ranga'] == 'admin'){ } } }else{ } }else{ if ($_POST['nick']){ $nick = zabezpiecz(0, $_POST['nick']); }else{ $wiadomsc .= '<font color="red">Proszę wpsiać nick!</font>'; } if ($_POST['tresc']){ $tresc = zabezpiecz(0, $_POST['tresc']); }else{ $wiadomosc .= '<font color="red">Proszę wpisać treść!</font>'; } if ($nick && $tresc){ $zapytanie = "INSERT INTO komentarze_newsy (id_newsa, autor, tresc) VALUES ('$id', '$nick', '$tresc')"; if ($query){ $wiadomosc .= '<font color="green">Pomyślnie dodano komentarz do newsa.<br> <a href="index.php">Wróć na stronę główną</a></font>'; }else{ $wiadomosc .= '<font color="red">Wystąpił błąd podczas dodawania komentarza. Spróbuj ponownie.<br> <a href="index.php?akcja=news">Wróć do wszystkich newsów</a></font>'; } }else{ } } }else{ $wiadomosc .= '<font color="red">Błędne id newsa. Proszę spróbować ponownie.</font>'; } }elseif ($_GET['akcja2'] == 'usun_komentarz'){ if ($_SESSION['ranga'] == 'admin'){ if ($_GET['id']){ $zapytanie = "DELETE FROM komentarze_newsy WHERE id_komentarza='$_GET[id]'"; if ($query){ $wiadomosc .= '<font color="green">Pomyślnie usunięto komentarz <a href="index.php">Wróć</a></font>'; }else{ $wiadomosc .= '<font color="red">Nie udało się usunąć komentarza <a href="?akcja=news">Wróć</a></font>'; } }else{ $wiadomosc .= '<font color="red">Błędne id komentarza!</font>'; } }else{ $wiadomosc .= '<font color="red">Nie masz odpowiednich uprawnień aby tu przebywać!</font>'; } } if ($wiadomosc){ } ?>
kod troszkę przydługi ale uspokajam - nie chodzi o jego całość a raczej o logikę... Jak widać jeśli jest coś do wyświetlenia (jakiś komunikat) to przypisuje się go do zmiennej $wiadomosc. Pod koniec skryptu jeśli zmienna istnieje następuje przekierowanie do index.php?akcja=raporter (część raportująca komunikaty).
Niby wszystko działa, ale dzieje się dziwna rzecz - strona owszem zmienia się na index.php?akcja=raporter ale tylko na jedną sekundę i znów wraca do swojej postaci. Poza tym widoczne jest, że nie tylko treść wiadomości się wyświetla ale także formularz do wysyłania komentarzy. Sam się zastanawiam dlaczego tak się dzieje. Macie jakieś inne pomysły jak rozwiązać problem wyświetlania takich komunikatów? Jest to dość częsty skrypt spotykany na większości for (również na tym forum są tego typu komunikaty).
Liczę na odpowiedź, pozdrawiam