Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wykonanie formularza po wciśnięciu przycisku wstecz
Forum PHP.pl > Forum > PHP
MikroUser
Witam.

1) Mam formularz który zapisuje do bazy danych jeden rekord po wciśnięciu przycisku "Submit" i przechodzi do następnej strony;
2) Jeśli w tym momencie się da w przeglądarce przycisk "Wstecz", to wracamy do formularzu;
Pojawia się ostrzeżenie: "Otwierana strona zawiera dane POSTDATA. Jeżeli ..."
3) Klikam "OK" i oczywiście się dodaje rekord do tabelki. Ale ja tego nie CHCĘ exclamation.gif!

Jak to zabezpieczyć ? Że jak ktoś da przycisk "Wstecz" to żeby nie dodawało drugi raz tego samego rekordu.

Dziękuję za odpowiedź.
REN
Po dodaniu danych do bazy wyslij do przegladarki header i przeladuj strone juz bez zmiennych.
Wtedy przegladarka nie zobaczy strony do ktorej formularz zmienne wyslal.
meakulpa111
Mikrouser mam ten sam problem...
Jeśli udało Ci się już to zrobić to może dasz mi jakies wskazówki od samego początku:
bede bardzo wdzieczny. Pzdr
xbigos
ja do takiego czegoś używam header pl.php.net/header

header('Location: index.php');
Pilsener
O zabezpieczeniu przed ponownym wysłaniem tego samego formularza było wiele razy na forum. Wystarczy dodac:
  1. <?php
  2. $kod = md5(uniqid());
  3. $pole ='<input type="hidden" name="kod" value="'.$kod.'" />';
  4. ?>
- pozostaje dodać do bazy pole i ustawić jako unikalne.
bartoland
Opracowałem coś działającego. - Przynajmniej działa po dość dokładnych testach.

Na stronie z formularzem tworzę zmienną sesji np "time" w której zapisuje aktualny czas z funkcji time(). Jednocześnie z linkiem do strony z kodem usuwającym lub dodającym element wysyłam metodą GET wartość zmiennej SESSION['time']

Na stronie z usuwaniem lub dodawaniem rekordu najpierw porównuję czy zmienna time z GET-a jest równa zmiennej time z SESSION i jeśli tak to wykonuje dodawanie lub usuwanie rekordu.

I teraz najważniejsze po operacji dodania lub usunięcia zapisuje w zmiennej SESSION['time'] aktualny czas. W ten sposób po odświeżeniu strony zmienna time z GET-a nie będzie równa zmiennej time z SESSION. Podobnie będzie gdy naciśniemy przycisk wstecz i przywróć.
po wstecz przypisze się na stronie z formularzem w zmiennej SESSION['time'] nowa wartość czas, a po kliknięciu w przywróć w adresie i zmiennej GET będzie stara wartość co również spowoduje niewykonanie się niniejszego dodawania lub odejmowania.

Jakby komuś wpadł do głowy przypadek, w którym uda się przechytrzyć moje podejście, będę wdzięczny za opis.
Dodam, że PHP zajmuje się od 2 miesięcy więc mogę czegoś nie zauważyć.

Zastanawiam się czy można to jeszcze usprawnić - korzystanie z funkcji time() tylko po to by sprawdzać powtórne użycie tego samego zapytania wydaje się być dość mało optymalne. Zastanawiam się co mogłoby dawać podobny efekt (czyli za każdym razem dawać inny wynik) ale działać szybciej od time() questionmark.gif?.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.