butek
2.07.2008, 18:50:57
Mam skrypt php pracujący na bazie mysql . Odświeżenie ekranu( przeładowanie strony) powoduje zduplikowanie rekordu. Jak temu zapobiec ?
JoShiMa
2.07.2008, 18:57:31
W formularzu, który przesyła powinna być zmienna o wartości unikalnej wygenerowanej funkcją uniqid(''). Podczas przetwarzania formularza wrzucasz ą wartość do sesji a następnie dajesz warunek, że formularz może być przetworzony jedynie kiedy jego ID jest inne niż to w sesji. Wtedy masz pewność, że nie przetworzysz tego dwukrotnie przy odświeżaniu.
batman
2.07.2008, 19:01:30
Skrypt, który obiera dane, powinien je przetworzyć i zapisać do bazy/pliku/wysłać mailem/itd, a następnie wywołać funkcję header, do przekierowania na podziękowania/tej samej strony/itd. Dzięki temu nie będzie efektu ponownego dodania do bazy.
P.S.
Nie mogę teraz znaleźć, ale ten temat poruszany był na forum wiele razy.
butek
2.07.2008, 19:05:07
A jak wrzucić wartość wygenerowaną przez uniqid do sesji ?
johndoe
2.07.2008, 19:08:17
$_SESSION['unikalne_id']=uniqid()
JoShiMa
2.07.2008, 19:10:55
Na samym początku skryptu
<?php
?>
W formularzu:
<input type="hidden" name="id" value="
<?=uniqid('')?>" />
W miejscu gdzie przetwarzasz formularz:
<?php
if ($_POST["id"]<>$_SESSION["id"]) {
$_SESSION["id"] = $_POST["id"];
//przetwarzanie formularza
}
?>
Shili
2.07.2008, 19:38:01
Odnośnie linku wspomnianego przez batmana -
proszę bardzo
batman
2.07.2008, 19:41:05
@ShiliO właśnie. To jest jeden z tematów (szkoda, że nie znalazłaś takiego, w którym się udzieliłem

)
editW zasadzie, skoro temat był już poruszany, to ten można zamknąć.
Zamykam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.