Jest to bardzo przydatny skrypt. Zapobiega on ponownemu wysłaniu danych z formularza - po wysłaniu tych danych i odświeżeniu strony.
Z pewnością większość z Was używa na swych stronach różnego rodzaju formularzy - kontakt (e-mail), komentarze, oceny itp. Często zdarza się, że użytkownicy po wypełnieniu formularza i wysłania wprowadzonych danych - odświeża stronę. Nie wiem dlaczego tak robią. Być może nie otrzymują żadnego komunikatu po udanym transferze? Na moich stronach taki komunikat otrzymują. Niestety mimo to, część z nich odświeża jeszcze stronę. Postanowiłem więc napisać jakiś skrypt - uniemożliwiający ponowne przesłanie danych.
Wykorzystamy w nim funkcję header, której zadaniem jest przekierowanie internauty na dowolny adres www, bez konieczności wciskania przez niego odnośnika. Cały pic polega na tym, że przy odświeżeniu strony - wszystkie zmienne z atrybutem post - przetwarzane są jeszcze raz. Natomiast jeżeli wpisalibyśmy w przeglądarce adres aktualnej strony, lub skorzystali z odnośnika do aktualnej strony - dane te nie zostaną ponownie przetworzone. To tak jak byśmy wczytywali ją po raz pierwszy. Wykorzystajmy więc ten fakt :)
W kodzie PHP przetwarzającym dane z formularza, aktywowanym po ich wysłaniu - umieśćmy linijkę kodu, która przekieruje internautę na tę samą, czyli aktualną stronę:
Po kliknięciu przycisku inicjującego wysłanie formularza, zostaje spełniony warunek:
if (isset($_POST[′submit′])). Wtedy to skrypt przetwarza dane z formularza - zapisuje je w bazie, wykonuje obliczniea itp, a na koniec przekierowuje internautę na tę samą stronę - wczytując ją ponownie. Jako że na nowo wczytanej stronie nikt jeszcze nie wcisnął przycisku - powyższy warunek nie jest spełniony, więc skrypt go ignoruje i nie przetwarza danych, których nota bene - nie ma :).
Linijka kodu: exit(); - kończy wykonywanie dalszego skryptu, bo po co? ;)
Przy tej metodzie blokady, internauta może ponownie wypełnić formularz i wysłać dane. Przy tej opisanej w sposobie 1 - nie mógł tego uczynić.
no tak wszystko fajnie , ale jak jak użyć funkcji header i wtedy wiświetlić ewentualne komunikaty o tym czy np. formularz został wysłany itd. ?
To stary artykuł. Teraz zrobiłbym to pewnie za pomocą Ajaxa.
Można też przekierować na obecną stronę ze zmienną GET po adresie i napisać linijkę kodu która po jej wykryciu wyświetli komunikat.
Można też zrobić podobnie z wykorzystaniem zmiennej sesji.
© copyright: www-4u.pl