Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Vinkki: Palautelomakkeen tiedot tiedostoon

Markka [12.12.2015 12:38:12]

#

Jos haluat saada palautelomakkeen tiedot omaan tekstitiedostoosi voi sen tehdä näin.

Palaute.html

<form action="kasittely.php">
Nimimerkki:
<input type="text" name="kentta1" placeholder="Nimimerkki...">
<br>
Palaute:
<textarea name="kentta2" cols="40" rows="5"></textarea>
<br>
<br>
<input type="submit" value="Lähetä!">
</form>

kasittely.php

<?php
$txt = "lomakkeet.txt";
if (isset($_POST['kentta1']) && isset($_POST['kentta2'])) {
    $fh = fopen($txt, 'a');
    $txt=$_POST['kentta1'].' - '.$_POST['kentta2'];
    fwrite($fh,$txt); // Kirjoitetaan tiedot teksti-tiedostoon
    fclose($fh); // Suljetaan tiedosto
}
echo "Kiitos palautteestasi!"
?>

Metabolix [12.12.2015 12:47:33]

#

Tiedostoon ei tuossa tule rivinvaihtoa, jolloin kaikki palautteet tulevat samalle riville. Ei ole kovin kätevää. Lisäksi monen viestin lähetys samaan aikaan voi teoriassa sekoittaa tiedoston sisällön; tämän välttämiseksi tiedoston voisi lukita flock-funktiolla tai kirjoittaa file_put_contents-funktiolla sopivilla valitsimilla. Ylimääräiset kolme pistettä textarea-tagissa ihmetyttävät myös. Lisäksi lomakkeesta puuttuu POST-metodin valinta. Oletko edes testannut koodiasi?

HTML5 [12.12.2015 16:07:33]

#

Menee ehkä vähän aiheen ohi, mutta paikkamerkillä (placeholder) ei pitäisi korvata kentän nimikettä (label).

vesikuusi [12.12.2015 23:03:24]

#

HTML5 kirjoitti:

Menee ehkä vähän aiheen ohi, mutta paikkamerkillä (placeholder) ei pitäisi korvata kentän nimikettä (label).

+1 koska asiaankuuluva nimimerkki.

Markka [06.01.2016 11:35:11]

#

Metabolix kirjoitti:

lomakkeesta puuttuu POST-metodin valinta.

Vasta nyt huomasin että post method puuttui.

<form action="kasittely.php" method="POST">
Nimimerkki:
<input type="text" name="kentta1" placeholder="Nimimerkki...">
<br>
Palaute:
<textarea name="kentta2" cols="40" rows="5"></textarea>
<br>
<br>
<input type="submit" value="Lähetä!">
</form>

Lisäys:

Ja kasittely.php:sta puuttui ; echon lopusta

<?php
$txt = "lomakkeet.txt";
if (isset($_POST['kentta1']) && isset($_POST['kentta2'])) {
    $fh = fopen($txt, 'a');
    $txt=$_POST['kentta1'].' - '.$_POST['kentta2'];
    fwrite($fh,$txt); // Kirjoitetaan tiedot teksti-tiedostoon
    fclose($fh); // Suljetaan tiedosto
}
echo "Kiitos palautteestasi!";
?>

HTML5 [06.01.2016 15:03:58]

#

Muuttaisin HTML-koodin seuraavaan muotoon:

<form action="kasittely.php" method="post">
    <p>
        <label>
            Nimimerkki:
            <input type="text" name="kentta1">
        </label>
    </p>
    <p>
        <label>
            Palaute:
            <textarea name="kentta2" cols="40" rows="5"></textarea>
        </label>
    </p>
    <p>
        <input type="submit" value="Lähetä!">
    <p>
</form>

Rivitys on parempi tehdä kappale-elementeillä (p) kuin rivinvaihdoilla (br).

Label-elementit mahdollistavat sen, että nimekettä napsauttamalla kenttä aktivoituu. Ne myös yhdistävät nimikkeet semanttisesti kenttiin.

Paikkamerkille ei ole tässä tarvetta, kun kentällä on nimike.

Koodi on sisennetty, ja form-elementille on lisätty puuttuva method-attribuutti.

***

PHP:n isset-funktio ottaa vastaan useampiakin kohteita, joten ehdon

isset($_POST['kentta1']) && isset($_POST['kentta2'])

voisi kirjoittaa muotoon

isset($_POST['kentta1'], $_POST['kentta2'])

Tiedostoon kirjoittamisen voi tehdä lyhyemmin funktiolla file_put_contents.

qeijo [07.01.2016 08:46:07]

#

[sarcasm]Käytännöllistä saada palaute tekstitiedostoon.[/sarcasm]

Vastaus

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

Tietoa sivustosta