Rozwiazanie to pododuje ze po dodaniu rekordu do bazy (funkcja insert() dodaje do bazy) po odswiezeniu strony nie jest dodawany kolejny rekord, jednak problem tkwi w tym ze jezeli szybko klikne kilka razy na submita to uda mi sie dodac kilka rekordow , a chce zeby dodawany byl zawsze tylko jeden!
Zablokuj submita po wciśnięciu. (JS).
Albo bardziej skomplikowana wersja - w zmiennej sesyjnej przechowuj, czy użytkownik już dodał - jeśli tak, to blokuj kolejne dodania. Zmienną resetuj wraz z wysyłaniem header().
nav napisał(a)
Zablokuj submita po wciśnięciu. (JS).
Albo bardziej skomplikowana wersja - w zmiennej sesyjnej przechowuj, czy użytkownik już dodał - jeśli tak, to blokuj kolejne dodania. Zmienną resetuj wraz z wysyłaniem header().
tez myslalem o tej sesji, tylko ze nie rozumiem jaka jest przyczyna takiego dzialania, czy tu chodzi o to ze header tak wolno przekierowuje ze da sie jeszcze kilkakrotnie wyslac formularz ?
Przekierowanie zadziała dopiero, jak dane z formularza zostaną wysłane, wykona się skrypt i wrócą te dane. Jeśli ktoś ma baaardzo wolny internet, to może czekać i 20* minut na przeładowanie strony.
*) bardzo przesadzony przykład.
I po header-ze przydałby się exit().
Dosyć dziwny problem ...
Jeżeli dlugo coś się robi - to należy znaleźć przyczynę
a więć korzystając z f-cji http://pl.php.net/manual/pl/function.microtime.php zmierzysz czas działania swojego skryptu ( generowania jego ), podziel go na kilka części tak aby dokladnie móc określić co najdłuzej jest wykonywane ,
przedstaw problem ponownie z konkretniejszymi informacjami.
Pzdr.
no jak naciskasz wyślij to zapytanie idzie w świat, a zapytanie musi dojść, zostać przetworzone, nagłówek zostać location musi wrócić, wtedy przeglądarka wysyła zapytanie następne get o stronę z przekierowania i ją pobiera, a starej strony nie wymazuje więc użytkownik może akcję anulować (no to coś już wysłał to tego nie przyssie z powrotem) albo szybko coś zmienić i wysłać i jeszcze raz
możesz np w onsubmit dać disabled dla buttona, ale wtedy naciśnięcie anuluj / zatrzymaj w przeglądarce wymusi odświeżenie strony
możesz też np na stronie generować w formularzu ukryte pole o jakiejś losowej wartości np md5(time()) i na serwerze po otrzymaniu zapytania sprawdzić czy ten string nie został już zapisany, jeśli tak to nic nie robić a jeśli nie to kontynuować i zapisać string tymczasowo na parę choćby minut w jakiejś bazie danych czy w sesji użytkownika