Użytkownik: Hasło:

Nie masz konta? Zarejestruj się

Zarabianie na stronach www

Na początek

T-www-orzenie

Zarabianie na www

Ocena stron www

Własne forum na www

Różniste

Blokada odświeżania strony po wysłaniu danych z formularza » header.

Wprowadzenie

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.

Sposób 2

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ę:

if (isset($_POST[′submit′])) {
...przetwarzam dane z formularza...
header ("Location: http://" . $_SERVER[′HTTP_HOST′] . $_SERVER[′PHP_SELF′] . "");
exit();
}

Oto cały skrypt przykładowej strony:

<?php
if (isset($_POST[′submit′])) {
...przetwarzam dane z formularza...
header ("Location: http://" . $_SERVER[′HTTP_HOST′] . $_SERVER[′PHP_SELF′] . "");
exit();
}
?>

<html>
<head>
...mety i te inne...
</head>
<body>
...kod strony...
...a w tym kodzie w końcu - formularz:...
<form action="" method="post">
<p>Imię: <input type="text" name="imie" /></p>
<p>Komentarz: <br />
<textarea name="komentarz" cols="50" rows="3"></textarea></p>
<input type="submit" name="submit" value="wyślij" />
</form>
...ewentualnie dalszy kod strony...
</body>
</html>

Objaśnienie skryptu

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ć.

« sposób 1


Komentarze do tego artykułu (4)

adiq (2010-11-14) Komentarz 1

fajny artykuł

przemeq (2011-04-07) Komentarz 2

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. ?

www-4u (2011-04-08) Komentarz 3

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.

test (2011-04-21) Komentarz 4

dwdads

Skomentuj ten artykuł (zadaj pytanie).

Twój Nick:

Numer komentarza na który odpowiadasz
Jeżeli nie odpowiadasz na konkretny komentarz pozostaw to pole puste.

Twój Komentarz: (Proszę, nie wstawiaj linków ani kodu HTML)

© copyright: www-4u.pl

powrót na górę strony