Witam,
Jestem tu nowy, więc z racji tego "Pozdrawiam wszytkich Polaków!".
Mam zagwozdkę w zabezpieczeniu kodu przed podwójnym wykonaniem, wynikającym z akcji Odświeżania strony bądź Cofania do strony poprzedniej.
Kilka zdarzeń dla przykładu:
1) klikam dodaj przedmiot do koszyka - odnośnik <a href> z odpowiednimi parametrami $_GET, powoduje dodanie przedmiotu do koszyka, ale odświeżenie strony (Refresh), bądź cofnięcie do poprzedniej (Back), powoduje ponowne dodanie do koszyka,
2) Realizacja zamówienia - Submit w formularzu <form>, powoduje dodanie wpisu do bazy i wysyłka e-maila, ale odświeżenie strony (Refresh), bądź cofnięcie do poprzedniej (Back), powoduje ponowne dodanie wpisu do bazy i wysłanie drugiego e-maila.
Próbowałem coś znaleźć w necie i wiem, że jest to powszechny problem u nowicjuszy.
Jako rozwiązanie 1 błędu ludzie podają zastosowanie przekierowania header (Location), z tym, że u mnie nie ma to zastosowania, bo poniższy kod wykonywany jest w zawartości strony, za kodem html i wyskakuje mi komunikat "Headers already sent", z racji tego, że header można umieścić tylko przed kodem html.
Jako rozwiązanie 2 błędu podają wstawienie ukrytego pola w formularzu, zawierającego wartość losową, która jest też zapisywana do sesji, po wykonaniu kodu sesja jest czyszczona. Na początku kodu umieszcza się porównanie wartości z pola ukrytego i z sesji. Jeśli się zgadzają, to jedziemy, jesli nie to stop.
Mam pytanie - w jaki sposób można rozwiązać problem 1? Czy jest może jakieś uniwersalne rozwiązanie dla obu przypadków, ale inne niż blokada Refresh&Back, które wydaje się bezsensowne, bo ogranicza funkcjonalność.
Z góry dzięki za jakąkolwiek pomoc,
Pozdrawiam.