Ten blog nie jest już rozwijany. Wraz ze wszystkimi artykułami zostały przeniesiony pod adres wmroczkowski.pl

Czy chcesz przejść pod nowy adres?

środa, 19 listopada 2008

[PHP] Jak zablokować powtórne przetwarzanie formularzy przy odświeżaniu strony?

Bardzo częstym problemem na który natrafiają początkujący programiści PHP jest problem ponownego wysłania danych po odświeżaniu strony do której zostały przesłane dane z formularza HTML. Jeżeli nasz skrypt dodaje dane z formularza do bazy danych to po odświeżeniu strony zwyczajnie je doda jeszcze raz. Możemy ten problem bardzo łatwo rozwiązać za pomocą sesji oraz bardzo prostej funkcji PHP:

W powyższej funkcji generujemy 32-znakowy unikalny hash przemnażając czas razy losową liczbę uzyskując w ten sposób unikalny identyfikator, który przypiszemy do naszego wysłanego formularza.

Następnie w formularzu dodajemy następującą ukrytą linię:

Wywołuje ona naszą funkcję wysyłając w zmiennej hash nasz unikalny klucz.

A tak wygląda plik, który odbiera dane z formularza:

Jeżeli zmienna sesyjna adduser nie istnieje lub jest różna od przesłanej zmiennej hash z formularza to skrypt tworzy taką zmienną sesyjną i wykonuje wszystkie czynności jakie powinien zrobić po prawidłowym wysłaniu formularza. Jeżeli natomiast taka zmienna istnieje i jest równa zmienna hash z formularza tzn. że ten formularz był już wysłany.

Brak komentarzy: