problem z headerem

0
<? ob_start(); <form style="display: inline;" name="form_dopisz_zlecenie" action="index.php" method="post"> Zamówienie<input type="text" name="zamowienie"> <input type="submit" value="Dodaj"> </form> $i = insert(array('table'=>'zlecenie','data'=>$_POST)); if($i){ header('Location: index.php?page=zlecenia&sp=aktualizacja_zlecen'); } ob_end_flush(); ?>

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!

0

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().

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

0

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.

0

I po header-ze przydałby się exit().

0

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.

0

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

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