Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Blokowanie wysyłania podwójnego formularza.
Jediii
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.09.2011

Ostrzeżenie: (0%)
-----


Witam.

Nie mogę sobie poradzić z blokowanie wysyłania podwójnego formularza i odświeżania strony. Mam nadzieję, że uzyskam od Was jakie wskazówki, jak poradzić sobie z tym problemem.

Mam formularz w pliku form.php. Jego wysłanie zostaje przetworzone w tym samym pliku i gdy zostaną wykonane odpowiednio zapytania do bazy (załóżmy, że walidacja przeszła ok) pojawi się komunikat, ze zostało coś dodane oraz będzie możliwość, ponownie przez ten formularz (form.php), dodania kolejne rzeczy. Nie jest tutaj stosowane żadne przekierowanie.

Nie mam pojęcia, jak zablokować to podwójne wysyłanie formularza. Trochę kombinowałem z sesjami, jednak bez rezultatów.

Dodam jeszcze, że dodane w bazie informacje w bazie przez ten formularz mogą się powtarzać, więc rozwiązanie sprawdzenie, czy w bazie coś już takiego istnieje odpada.

Będę wdzięczny za każdą pomocą.





Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bostaf
post
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Z pomocą przyjdzie Ci jeden z podstawowych wzorców projektowych w programowaniu aplikacji webowych, a mianowicie PRG czyli post/redirect/get. Możesz poczytać o tym trochę na wikipedii: Post/Redirect/Get (niestety tylko po angielsku), albo pogooglować (taki mini artykulik znalazłem: Wielki Post i mały Get.

Generalnie chodzi o to, żeby najpierw sprawdzić, czy jakieś dane są przesyłane POSTem a dopiero potem zadecydować co robić dalej. Dla przykładu, w jednym skrypcie:

  1. <?php
  2. if(isset($_POST['dane']))
  3. {
  4. // filtruję, waliduję, obrabiam, wysyłam do bazy, itp.
  5. // zapisuję w sesji informację, że wszystko OK, albo że nie OK:
  6. if($wszystko_ok)
  7. {
  8. $_SESSION['komunikat'] = 'Dane zapisane! :)';
  9. } else {
  10. $_SESSION['komunikat'] = 'Coś się nie udało :(';
  11. }
  12. // na koniec przekierowuję skrypt:
  13. header('Location: ' . $_SERVER['REQUEST_URI']);
  14. // po przeładowaniu dane POST już nie będą istniały, więc skrypt pominie całą tą klamrę i przejdzie dalej
  15. }
  16. ?>
  17. <div class="komunikat">
  18. <?php
  19. if(isset($_SESSION['komunikat'])) :
  20. echo $_SESSION['komunikat'];
  21. unset($_SESSION['komunikat']); // usuwam komunikat z sesji, żeby za każdym razem się nie wyświtlał
  22. endif;
  23. ?>
  24. </div>
  25. <form action="<?php echo $_SERVER['REQUEST_URI'];?>" method="post">
  26. <input type="text" name="dane">
  27. <input type="submit">
  28. </form>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 13:24