[ MiTo @ 27.10.2004. 16:03 ] @
| Napravio sam guestbook koji koristi obican txt file. Problem je u tome sto kada kliknete na reload stranice, on ponovno upise zadnji unos. Neznam zasto to radi! Ako netko moze ispraviti moju gresku bilo bi super (za mene :) ). Evo koda:
Code:
<form action="index.php" method="post">
ime:<input type ="text" name="ime" size="20"><br>
e-mail:<input type="text" name="email" size="20"><br>
poruka:<input type="text" name="poruka" size="50"><br>
<input type ="submit" value="Upiši">
</form>
<?
$datoteka="knjiga.txt";
$ime=$_POST['ime'];
//$email=$_POST['email'];
$poruka=$_POST['poruka'];
if ($ime && $poruka){
if ($dat=fopen($datoteka,'a')){
$linija="<b>$ime</b> [$email]:<br>$poruka<br>[". date('d.m.Y H:i') . "]<p>\n";
fputs($dat,$linija);
fclose($dat);
}
}
?>
<?
if (file_exists($datoteka)){
if ($dat=fopen($datoteka,'r')){
$tekst='';
while(!feof($dat)){
$tekst=fgets($dat,4096) . $tekst;
}
echo $tekst;
fclose($dat);
}
}
?>
A evo i primjera sto se dogadja:
rrr [rrrrrr]:
rrr
[27.10.2004 16:58]
rrr [rrrrrr]:
rrr
[27.10.2004 16:58]
da [dada]:
dadada
[27.10.2004 16:58]
|
[ Goran Rakić @ 27.10.2004. 16:14 ] @
kada kliknes na reload stranice, tvoj browser ponovo posalje HTTP POST zahtev, tj. ponovi zadnji zahtev. Da bi to resio mozes da: proveris pre dodavanja da li je takav isti tekst vec upisan ili da nakon submit-a posalje Header("Location: index.php") ili kako ti se vec zove skripta. Prvo je teze za odraditi i moras paziti da dozvolis i nekom korisniku posle mesec dana da upise "bravo" kao sto je to uradio i neko pre njega. Drugo funkcionise tj. stiti od slucajnog refresh-a, ali uvek se mozes vratiti sa back i ponoviti zahtev (doduse uvek mozes i ponovo popuniti formu).
I da, trece i mozda i najbolje resenje jeste flood control. znaci kada neko submit-uje formu ti ga cookie-jem ili preko ip-a zapamtis i ne das mu da submit-uje tu istu formu kroz XYZ minuta.
[ MiTo @ 27.10.2004. 17:47 ] @
OK. Hvala na pojasnjenju. Pokusat cu sa cookiem.
[ Gojko Vujovic @ 27.10.2004. 18:01 ] @
Imaj u vidu da nemas ni file locking pa teoretski postoji mogucnost (a realna verovatnoca se povecava sa posecenoscu sajta) da i tu imas problem - ako dvojica u istom trenutku nesto unose, ishod je nemoguce predvideti.
[ NetworkAdmin @ 27.10.2004. 19:20 ] @
Najlakse je fino sa guestbook koji ti je na index.php da post pravis na drugi script
<form action="upis.php" method="post">
u fajl upis.php izmjestis dio koda za pisanje u file i cim zavrsis upis napravis redirekciju na index.php pa sad nek krelac refreshuje i drzi F5 do jutra.
[ MiTo @ 28.10.2004. 19:20 ] @
Super

Iskoristio sam ovo
Citat:
<form action="upis.php" method="post">
.
Jednostavno i ucinkovito.
[ Goran Rakić @ 28.10.2004. 20:20 ] @
ostaje problem sa back i refresh, a i ovo sto je Gojko pomenuo.
[ MiTo @ 28.10.2004. 22:07 ] @
evo mozes pogledati, meni izgleda da je refresh problem sredjen, a mozda i back (bar se tako iz firefoxa cini), a sto se tice sa istovremenim upisivanjem, trebam razmisliti
http://kermit.fesb.hr/~mito/croufomag/croufomag.php?do=guestbook
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.