Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP lomake

combo [08.10.2010 16:35:16]

#

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ä.

Grez [08.10.2010 16:48:27]

#

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.

Triton [08.10.2010 16:50:21]

#

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...

combo [08.10.2010 16:53:45]

#

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?

Triton [08.10.2010 16:57:32]

#

Mistä se lomake voisi tietää sen, että onko se lähetetty vai ei?

Metabolix [08.10.2010 17:06:22]

#

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.

Grez [08.10.2010 17:09:30]

#

(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ä:

<?php
if (file_exists('lähetetty')) {
  echo 'Sori, lomake on jo lähetetty.';
} else {
  fclose(fopen('lähetetty','w'));

  //Normaali lomakkeen lähetyskoodi tähän

} ?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta