problem z headerem

Odpowiedz Nowy wątek
2006-11-29 12:33
lukasz_k
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!

Pozostało 580 znaków

2006-11-29 13:03
nav
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().


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2006-11-29 13:08
lukasz_k
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 ?

Pozostało 580 znaków

2006-11-29 14:38
nav
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.


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2006-11-29 14:58
0

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


Pozostało 580 znaków

2006-11-29 21:16
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.

Pozostało 580 znaków

2006-11-29 23:02
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


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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