zablokowanie możliwości ponownego wysłania formularza na określony czas

0

Witam
Od kilku dni próbuje zrobić coś takiego że po kliknięciu submita ,zostanie on zablokowany na określony czas
Ktoś z forumowiczów jest mi w stanie doradzić jak to zrobić
Próbowałem ukryć button po kliknięciu i powiedzmy że mogło by to zdać egzamin ,ale kliknięcie przycisku "odśwież" w przeglądarce powoduje kolejne wysyłanie się formularza a to jest niedopuszczalne .
Proszę o pomoc w rozwiązaniu tego

1

Na to jest kilka metod. Każda ma plusy i minusy.
Możesz użyć jakiejś zmiennej w sesji i redirecta po submit.
Możesz użyć javascirpt: przykład https://stackoverflow.com/questions/45656405/browser-prevent-post-data-resubmit-on-refresh-using-only-javascript
Chyba najlepsze jest jednak prawidłowe ustawienie przekierowań. Zobacz sobie tutaj:
https://www.outsystems.com/forums/discussion/25572/post-redirect-get-pattern-prevent-form-resubmission-on-refresh-of-a-page-aka-f/

0

Dziękuje za zainteresowanie się moim problemem
Może zacznę od tego że jak by to ująć jestem raczej mało obeznany w tym wszystkim co właśnie przeczytałem
PHP znam zaledwie w stopniu podstawowym , JS w ogóle nie ogarniam (dla mnie kod JS wygląda tak jakby pisał to ktoś po sporej dawce alkoholu )
Ale może do rzeczy.
To co znalazłem na stackoverflow (kod JS ) , rzeczywiście działa i nie wysyła formularza kolejny raz po odświeżeniu
Dodałem też do head

<meta HTTP-EQUIV = „Pragma” content = „no-cache”> i
	<meta HTTP-EQUIV = „Expires” content = „- 1”>

Co nie pozwala na cofanie się i wysyłanie formularza z pamięci przeglądarki (tak mi się wydaje )
Więc w zasadzie mój problem jest rozwiązany prawie w 100% , prawie bo pozostaje jeszcze problem jak przeglądarka nie ma obsługi JS
Pewnie jakoś to można sprawdzić tylko że jak na razie niczego nie znalazłem

Mimo tego że kod JS z stackoverflow rozwiązał problem z odświeżaniem to pozostaje jeszcze jeden problem
Mianowicie ja w momencie wysłania formularza ukrywam go w niewidocznym divie ,czas po którym można kolejny raz wysłać formularz realizuje poprzez

header("Refresh:czas do odświeżenia ")

Problem w tym że odświeżenie zeruje tego header("Refresh:") i zaczyna odmierzać czas od nowa
Kod wygląda tak

$this->session->set_tempdata('imie',$this->input->post('wyslij') , 3600);
$log = $this->session->tempdata();
if($log==NULL)
{
	echo 'dupa<br><br>';
	echo form_open();
		echo '<div class="invisible">'.form_input('wyslij', $nick,'placeholder="imie"').'</div>';
		echo form_submit('submit', 'wyśłij');
		echo form_close();
}else{
	echo ' <br>poszło<br>';

	header("Refresh:3605"); 

I nie mam pomysłu jak to można by zrobić inaczej
Pole input jest ukryte dla usera bo submit ma za zadanie dodać punkty userowi ,więc nie musi on niczego wpisywać wystarczy że kliknie submit
Ale nie może tego robić ciągle dlatego ograniczenie czasowe pomiędzy kolejnymi kliknięciami
Z góry dziękuje za wszelkie rady

0

Jeżeli kod ma blokować zapis dodatkowych punktów to informację o tym, że dany user kliknął przycisk razem z czasem wykonania tej akcji zapisywał bym do jakiegoś memcached, albo prościej (więcej osób to ogarnia) po prostu do bazy danych. Potem sprawdzasz sobie przy generowaniu formularza oraz wysyłaniu go (jako zabezpieczenie) czy wpis w bazie danych ma odpowiednio starszy czas (czy różnica czasu między wpisem w bazie, a czasem kliknięcia jest odpowiednia). Po dodaniu punktów aktualizujesz też wpis w bazie i tyle. Dużo bardziej kuloodporne działanie niż pakowanie jakichś dodatkowych danych do js albo do sesji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1