[ 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