Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Wykonanie formularza po wciśnięciu przycisku wstecz
MikroUser
post 18.11.2006, 09:46:14
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 5.09.2006

Ostrzeżenie: (0%)
-----


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ź.
Go to the top of the page
+Quote Post
REN
post 19.11.2006, 13:26:21
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.10.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
meakulpa111
post 4.06.2008, 08:11:36
Post #3





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
xbigos
post 4.06.2008, 08:14:15
Post #4





Grupa: Zarejestrowani
Postów: 239
Pomógł: 27
Dołączył: 13.07.2005
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


ja do takiego czegoś używam header pl.php.net/header

header('Location: index.php');


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 4.06.2008, 12:09:28
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bartoland
post 11.04.2010, 01:40:26
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 10.04.2010

Ostrzeżenie: (0%)
-----


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


Ten post edytował bartoland 11.04.2010, 22:43:28
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 06:48