Powtórny zapis po odświeżeniu strony

2010-10-05 08:36:52 Post #1 gość_kazio

 
Cześć, mam skrypt, który zapisuje mi dane podane w formularzu do bazy danych. Skrypt dziala prawidłowo, jednak gdy ktoś kliknie F5 na stronie, zaraz po wysłaniu formularza, to skrypt dodaje mi ponownie do bazy ten sam rekord. Jak temu zaradzić?

2010-10-05 08:55:45 Post #2 nospor

 
Witaj ponownie
Dzieje się tak dlatego, że klikając refresh strony, przeglądarka wysyła jeszcze raz dokładnie ten sam wypełniony formularz.
Można się przed tym zabezpieczyć na kilka sposobów. Najbardziej popularnym jest przekierowanie (po zapisie do bazy danych) na inną stronę, np. na stronę z podziękowaniem za wypełnienie formularza, coś w ten deseń:
<?php
//tutaj odbierasz dane z forma
//tutaj wkładasz do bazy
mysql_query(....);
//a tu robisz przekierowanie
header('Location: innastrona.php');
exit;
?>


Innym sposobem jest generowanie unikalnego indentyfikatora (może to być zwykły timestamp) i zapisywanie go do ukrytego pola formularza. Wysyłając formularz, odbieramy ten identyfikator i porównujemy czy nie jest on już zapisany w sesji. Jeśli nie jest, znaczy, że formularz wysyłamy dopiero pierwszy raz i pozwalamy na to. Od razu też zapisujemy ten identyfikator do sesji.
Gdy wciśniemy refresh, to formularz wyśle nam ten sam indentyfikator, znowu sprawdzimy czy jest w sesji. Tym razem będzie w sesji, wiec na tej podstawie stwierdzamy, że formularz jest duplikatem i nie pozwalamy na jego zapis.

To tak po krótce

2010-10-05 10:07:06 Post #3 gość_kazio

 
Krótko, rzeczowo i na temat - dzięki
Skorzystałem z pierwszego przykładu z header, w sesje nie chciało już mi się bawić.

2014-03-18 19:33:27 Post #4 gość_KGIT

 
Witam Wszystkich,

SAM SIĘ Z TYM MĘCZYŁĘM, KONIECZNIE CHCIAŁEM PRZETWARZAĆ FORMULARZ NA TEJ SAMEJ STRONIE, ALE PO ODŚWIEŻENIU ZNOWU MI SIĘ ZAPISYWAŁO.. A OTO MOJE ROZWIĄZANIE:

akceptując formularz, odświeżenie strony, pobranie wartości z POST lub GET, zapis do bazy danych a potem to :
echo "<script type=\"text/javascript\">
window.setTimeout(\"window.location.replace('TWOJA_STRONA.php');\",100);
</script>";

Działa 100 %, piękna sprawa.

2014-03-18 19:51:27 Post #5 nospor

 
Mieszanie do tego js jest bez sensu. Podalem rozwiazanie i ono jest najlepsze

2014-04-02 10:51:16 Post #6 gość_PanJohnyBravo

 
Najlepsze i najlepsze, w dwóch dziedzinach, programowania i marketingu, dzięki nie mu można liczyć konwersję.

2017-10-31 01:34:44 Post #7 gość_Tak

 
Zgadzam nie ma najlepszej opcji czy też wersji. Jest po prostu optymalna do aktualnego zapotrzebowania.
Jestem programistą od lattt.. z hobby oczywiście i czasami jedno może wykluczać drugie. Bez pardonu dużo osób idzie na łatwiznę co owocuje późniejszymi problemami, Ale jak kolega "Poprzednik" napisał, kwestia marketingowa.... Mieszanie js do tego nie ma sensu ale wówczas gdy jest ono używane nie wyobrażam sobie uzywania opcji 1 tak że powodzenia.

P.S ja osobiście używam tokenów do kazdego rodzaju formularza z sesją na przywracanie formularza jednym kliknięciem i love $_SESSION

Odpowiedz

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer