Miten voisin tehdä normaaliin PHP:llä toteutettuun lomakkeeseen niin että kun 1 sivustoni käyttäjistä käyttää lomaketta ja painaa lähettä nappia niin sitten lomake sulkeutuu sen jälkeen niin että lähetä -nappi katoaa ja kukaan ei pysty lähettäämään lomakkeella mitään tietoja.
Eli lomaketta voi käyttää vain yhden kerran ja yksi ainoa käyttäjä.
Tarkistat, että onko lomake jo lähetetty ja jos on, niin et näytä sitä nappia. Lähetyksen käsitteleävässä koodissa teet myös vastaavan ja jos se on jo lähetetty niin annat asiasta ilmoituksen käyttäjälle.
Sun täytyy esim. tallentaa tiedostoon tieto siitä, onko nappia painettu vai ei. Sitten vaan tarkistat lomakkeen lataamisen yhteydessä asian, ja tulostat lomakkeen sen mukaisesti.
edit. noniin tietysti Grez ehti ensin...
Eikö sitä voi toteuttaa niin ettei minun tarvitse tehdä mitään sille lomakkeelle, vaan kun yksi käyttäjä painaa lähetä -nappia niin sitä lomaketta ei voi käyttää. Eli lomake sulkeutuu.
Onko olemassa esimerkkiä missään toteutustavasta?
Mistä se lomake voisi tietää sen, että onko se lähetetty vai ei?
Tässäpä sinulle vähän mietittävää:
<?php function tarkista($laheta) { $lahetetty = false; $f = fopen("lahetetty.txt", "a"); flock($f, LOCK_EX); fseek($f, 0, SEEK_END); $lahetetty = ftell($f); if (!$lahetetty && $laheta) { fwrite($f, date("Y-m-d H:i:s")); } flock($f, LOCK_UN); fclose($f); return !$lahetetty; }
Tarkista epäselvät kohdat oppaista tai PHP:n manuaalista.
Funktiota voi käyttää lomaketta tulostettaessa seuraavasti:
<?php if (tarkista(false)) { ?> <form action="kasittely.php" method="post"> <button type="submit">Lähetä!</button> </form> <?php } else { ?> <p>Lomake on jo lähetetty. <?php }
Lähetyksen yhteydessä annetaan parametri true, jolloin funktio merkitsee tiedostoon, että lähetys on nyt tapahtunut. Funktion paluuarvo kertoo, onnistuiko lähetys vai ehtikö joku muu ensin.
<?php if (tarkista(true)) { echo "Lähetys ok!"; } else { echo "Lähetyksesi hylättiin; joku on jo lähettänyt lomakkeen!"; }
En testannut, joten korjaa mahdolliset pikkuvirheet itse.
(höh Metabolix ehtikin ensin)
combo kirjoitti:
Onko olemassa esimerkkiä missään toteutustavasta?
No tässä pikainen esimerkki. Lomakkeella:
<?php if (!file_exists('lähetetty')) { ?> <input type="submit"> <?php } ?>
Lomakkeen lähetyksen käsittelyssä:
Aihe on jo aika vanha, joten et voi enää vastata siihen.