Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Komunikaty po wykonaniu danej operacji + osobna strona transakcji
Forum PHP.pl > Forum > Przedszkole
nait
Pisze mały panel admina od jakiegoś czasu, ciągle coś zmieniam, ulepszam i chyba mniej więcej mam to co sobie zaplanowałem i chciałbym zapytać bardziej doświadczonych ludzi czy to dobre rozwiązanie.
Chodzi o wyświetlanie komunikatów podczas dodania, edycji itd, także o puste pola itp.
Tak więc mam powiedzmy link.php i w niej mam odpowiedni formularz, z niego dane przesyłane są transact.php i tam przetwarzane, sprawdzanie czy poprawnie zostało wszystko wypełnione itd i w zależności od powodzenia operacji i przesyłam spowrotem getem id komunikatu jaki powinien wyświetlić się w tym wypadku na link.php <-- odpowiednią funkcję sobie napisałem do tego bo chciałem taki system wykorzystać do każdej podstrony.

np report_l=1,2, a później to rozbijam na odp komunikaty i wyświetlam je.
Skrócony przykład funkcji:
  1. function OperationReport() {
  2. if ((!empty($_GET['p']) && isset($_GET['p'])) &&
  3. !empty($_GET['report_l']) && isset($_GET['report_l'])) {
  4.  
  5. // ---- Links Start ------------------------------------------------------------------------------ //
  6.  
  7. $reports = explode(',', $_GET['report_l']);
  8. foreach($reports as $value) {
  9. switch ($value) {
  10.  
  11. // --- Dodaj --------------------------------------------------------------------- //
  12.  
  13. case '1': //
  14. $report[1][] = "Pole link nie może być puste";
  15. $report[1][] = 0; // 0 - niepowodzenie operacji, 1 - operacja pomyślnie wykonana
  16. break;
  17. case '2': //
  18. $report[2][] = "Pole opis nie może być puste";
  19. $report[2][] = 0;
  20. break;
  21. case '3': //
  22. $report[3][] = "Link nie może przekroczyć 350 znaków";
  23. $report[3][] = 0;
  24. break;
  25. case '4': //
  26. $report[4][] = "Opis nie może przekroczyć 350 znaków";
  27. $report[4][] = 0;
  28. break;
  29. case '5': //
  30. $report[5][] = "Błąd podczas ustalania pozycji linku";
  31. $report[5][] = 0;
  32. break;
  33. case '6': //
  34. $report[6][] = "Nie można dodać linku do bazy";
  35. $report[6][] = 0;
  36. break;
  37. case '7': //
  38. $report[7][] = "Link dodany do bazy";
  39. $report[7][] = 1;
  40. break;;
  41.  
  42. // --- Edytuj --------------------------------------------------------------------- //
  43.  
  44. }
  45. }
  46. foreach ($report as $value){
  47. echo "<div style=\"width:100%;background-color:" . ($value[1] ? '#628f3d' : '#b02f2f') . ";padding:4px;\">$value[0]</div>\n";
  48. }
  49. }
  50. }


i przykład strony transakcji:
  1. // Zamiana kluczy z $_POST na zmienne
  2. // $_POST['$klucz'] na $klucz
  3. foreach ($_POST as $key => $value) {
  4. $$key = $value;
  5. }
  6.  
  7. switch ($_GET['p']) {
  8. // ================================================================================
    =============== //
  9. // ---- Links Start ------------------------------------------------------------------------------ //
  10.  
  11. case 'links':
  12. $report = 'report_l';
  13. $redirect = '../admin.php?p=links';
  14. $report_id = '';
  15. switch ($_POST['action']) {
  16.  
  17. // ---------------------------------------------------------------------------------- //
  18.  
  19. case 'Dodaj':
  20. FilterInputData($link);
  21. FilterInputData($description);
  22. if (empty($link))
  23. $report_id .= '1,';
  24. AddHttp($link);
  25. if (empty($description))
  26. $report_id .= '2,';
  27. if (strlen($link) > 350)
  28. $report_id .= '3,';
  29. if (strlen($description) > 350)
  30. $report_id .= '4,';
  31. $query_p = "SELECT COUNT(id)+1 AS position FROM links";
  32. $result_p = mysqli_query($connect, $query_p);
  33. $position = mysqli_fetch_assoc($result_p);
  34. extract($position);
  35. if(!$result_p)
  36. $report_id = '5,';
  37. mysqli_free_result($result_p);
  38. if(empty($report_id)) {
  39. $query = "INSERT INTO links values (
  40. 'NULL',
  41. '" .$position. "',
  42. '" .$link. "',
  43. '" .$description. "',
  44. '" .MYSQL_DATE. "')";
  45. $result = mysqli_query($connect, $query);
  46. if(!$result)
  47. $report_id = '6,';
  48. }
  49. if (empty($report_id))
  50. $report_id = '7';
  51. echo $report_id;
  52. header("Location: $redirect&link=a&$report=$report_id");
  53. break;
  54.  
  55. // ---------------------------------------------------------------------------------- //
  56. }
  57. break;
  58. }
  59.  

Sorry za lekki chaos w tym tongue.gif Po prostu chciałbym się dowiedzieć czy te rozwiązania są dobre i czy w miare rozsądnie to napisalem.
Z góry dzieki!
vokiel
Ja do komunikatów (tzw flash'y) korzystam z sesji. Po wykonaniu jakiejś akcji komunikat dodaję do tablicy komunikatów. Wykonuję tak wszystkie akcje, niezbędne przekierowania, etc. Na finalnej stronie pobieram komunikaty i wyświetlam (z odpowiednim kolorowaniem), a przy tym usuwam z sesji.

W ten sposób nie przekazuję tego jawnie poprzez $_GET, nie wyświetla się nic podwójnie po odświeżeniu strony, nikt nikomu psikusa nie zrobi wysyłając spreparowany link, który wyświetli stronę stwierdzającą poprawne usunięcie konta w systemie.
nait
W sumie genialne wstydnis.gif Mogłem odrazu spytać.
A np. mam zrobione, że po kliknięciu na link czy tam button pojawia się formularz edycji, dodania itd sprawdzam czy w $_GET'cie jest dana zmienna np link=a i pokazuje formularz, czy link=d&id=1 pyta o potwierdzenie usunięcia rekordu. Takie rzeczy też lepiej zastąpić zmiennymi sesyjnymi czy w tych przypadkach to raczej bez różnicy?
Jak Wy to rozwiązujecie?smile.gif
vokiel
Sprawdzasz przy takim ustaleniu linków do usuwania (link=d&id=1) czy użytkownik ma odpowiednie prawa? Bo jak nie, to wiesz, jeden skrypt i jest czysto wink.gif

Jeśli usuwasz przez formularz, to usuwaj operując na $_POST, moim zdaniem adresy (zmienne $_GET) powinny służyć nawigacji.
nait
Zn w moim przypadku będzie tylko 1 użytkownik, admin więc chyba nie ma co sprawdzać i takie rozwiązanie chyba jest jak najbardziej ok? A tak z ciekawości jak w tym przypadku można by sprawdzać prawa?;p
vokiel
Jeśli masz tylko jednego użytkownika to uprawnień nie musisz sprawdzać, wystarczy, że sprawdzisz czy jest zalogowany.
nait
Ok rozumiem. Ale nawiązując do tego co pisałeś żeby $_GET'a używać tylko do nawigacji to jak to załatwić postem, mianowicie:
Mam tam wiersze rekordów z bazy i w nich odnośniki do edycji np. link=e&id=1 - jak to $_POST'em załatwić? Spekuluje że: sprawdzić jaki input został wciśnięty i ew hiddenami dodatkowe potrzebne dane po przesyłać do posta tak?
cer98
jakiego wzorca używasz ?
nait
yyy żadnego. Nie pisze tego obiektowo bo obiektówki dopiero się uczę. Piszę tak dla siebie w celu utrwalenia wiedzy
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.