Ohjelmalle pitäisi jotenkin välittyä tieto, painetaanko lomakkeen painiketta ensimmäisen kerran, vai onko sitä painettu jo aiemmin.
Onnistuisiko tämä jotenkin isset() -funktion avulla, vai onnistuuko mitenkään?
Onnistuisiko tämä jotenkin isset() -funktion avulla, vai onnistuuko mitenkään?
Vastaukset 3
Vanhimmat
Tarkoitatko peräkkäisiä painalluksia vai onko painiketta painettu edellisellä sivullä?
Ensinmäisen pystyy tekemään javascriptillä, jolloin ensinmäisen painalluksen jälkeen painike menee harmaa jolloin uudelleen napsuttaminen ei onnistu, toimii jos toimii.
PHP:llä tallennat lähettäjän tiedot (ip-osoite, selain) tai viestin jonnekkin ja vertaat onko lähetettävä viesti sama, jos on niin virheilmoitusta vaan. Samaan tapaan on tehty täällä Suomi24 foorumissakin, vertaa lähettäjää ja otsikko olemassa oleviin viesteihin, ilmeisesti jonakin ajanjaksona.
Jälkimmäisessä tapauksessa vaikka hidden kenttään arvo, että nappia on edellisellä sivulla painettu.
Tarkoitan peräkkäisiä painalluksia, eli ohjelman pitäísi tietää, lähetetäänkö tiedot lomakkeelta ensimmäistä kertaa vai onko samalta lomakkeelta lähetetty tietoja jo aiemmin.
Esim. jos kyseessä olisi jonkinlainen tietovisa (ei kuitenkaan tässä tapauksessa ole) niin ohjelmalle pitäisi välittyä tieto, vastaako kysyjä kysymykseen ensimmäistä kertaa, vai onko yrittänyt jo aiemmin.
Tiedot siis lähetetään lomakkeelta $PHP_SELF -funkitolla samalle sivulle muuttujiksi...
input type="hidden" name="sequence" value=""
ja tohon valueen joku satunnainen luku. Saman luvun pistät sitten $_SESSION['sequence']
Sitten kun saat selaimen lähettämän formin, niin tarkista $_POST['sequence'] == $_SESSION['sequence']
Jos ne on yhtä suuria, niin formi lähetettiin ekaa kertaa sulle takas. Tee uusi satunaisluku seuraavaan formiin ja sama luku taas sessioniin talteen. Jos tämän jälkeen tulee vielä vanhalta sivulta formi, niin noi ei enää täsmää