Zabezpieczyć przed powtórnym wysłaniem formularza (PHP)


(system) #1

Witam !

Jak najprościej zrobić, by zabezpieczyć się przed osobami, które celowo lub przypadkowo czasem specjalnie kilkakrotnie przeładowują stronę (która wcześniej, z poprzedniej strony, odebrała dane od forumarza i sama przetwarza dane po czym je wysyła na mail) .. chodzi mi o to, by ktoś nie wysyłał kilka razy wiadomości o tej samej tresći, ale by mógł za kilka minut wysłać inną wiadomość.

Mam nadzieje, że zrozumieliście i jakoś pomożecie.

Pozdrawiam


(Kutar 0) #2

Można na przykład po przetworzeniu formularza przekierować przeglądarkę na inną stronę (lub tę samą, wszak wtedy POST nie zostanie wysłany) za pomocą funkcji header('Location:..');

Innym, mniej optymalnym sposobem jest sprawdzenie czy te same wartość POST nie zostały już wcześniej wysłane. Czyli najpiero pobieram z bazy SELECT'em dane, jeśli zwróci rekord, to znaczy że już było wysłane i nie zapisuje ponownie.


(system) #3

Ten drugi sposób łatwiejszy, ale nie ma łatwiejsze metody?

Z przekierowaniem nie wiem czy jest takie dobre, gdyż zawsze można kliknąć "Backspace" i ponownie zatwierdzić forumlarz.

Jakieś inne propozycje?


(Kutar 0) #4

Nie zgodziłbym się.

Hmmm... a sprawdzałeś? Backaspace cofa do strony jaką WYŚWIETLAŁEŚ poprzednio, czyli do strony, na której był formularz. Co de facto oznacza, że nie ma co wysłać, bo wtedy dane POST nie zostały jeszcze utworzone. Z polskiego na nasze: po kliknięciu backspace, czy "wstecz" w przeglądarce żadne dane nie zostaną wysłane.

Tak więc sposób z header() znacznie łatwiejszy;]


(system) #5

No nie wiem zy do końca mnie zrozumiano. Mam takie pliki:

  • fomularz.php - w tym pliku jest formularz

  • zapisz.php - w tym pliku zapisywane są dane do bazy (tutaj też dodałbym przekierowanie po wysłaniu na inną stronę)

Tak więc gdybym ze strony na którą zaostał przekierowany cofnął się z powrotem to trafiłbym ponownie do zapisz.php, przy czym dane w POST przesłane przez formularz dalej by były! Tak więc to raczej by mi nie pomogło.

Pierwszy jest łatwiejszy, ale moim zdaniem nie zadziałałby poprawnie. Zatem pozostaje tylko jeden sposób, ten drugi.. dlaczego więc to napisałem to sam nie wiem ;D


(Airborn) #6

kamil_b17 czytaj uważniej :wink:

więc przygotowana przez Ciebie strona odpowiedzialna za zapis, nic nie wyświetla, zajmuje się tylko obróbką danych dostarczonych z POSTa i przekierowuje do poprzedniej strony

to chyba faktycznie najprostsza metoda :wink:


(Kutar 0) #7

Sprawdź, a sam się przekonasz gdzie Cię cofnie :wink: