PHP: Palautelomake

Otavan Opiston Av-wiki

Loikkaa: valikkoon, hakuun

Tämä jakso käsittelee sitä kuinka lomakkeen kautta voidaan välittää tieto sähköpostiin. Aika usein on on kyse palautelomakkeista.

Sisällysluettelo

[muokkaa] Lomake

<form id="form" name="form" method="post" action=" "> 
Nimi:<br />
<input type="text" name="nimi" id="nimi" /> <br />
Sähköposti:<br />
<input type="text" name="sposti" id="sposti" /> <br />
Viesti:<br />
<textarea name="viesti" id="viesti" cols="45" rows="5"></textarea> <br />
<input type="submit" name="laheta" id="laheta" value="Lähetä palaute" />
</form>

No mitä uutta tuossa? Lähinnä se on tuo pätkä koodia name="nimi" id="nimi" eli XHTML:ää varten on id, mutta ennen oli aina name. Nyt sitten varmuuden vuoksi molemmat.

[muokkaa] LABEL FOR (etiketit)

Lisätään lomakkeen esteettömyyttä ja käytettävyyttä etikettien avulla. Kyse on tästä koodista: <label for="nimi">Nimi:</label>

<form id="form" name="form" method="post" action=" "> 
<label for="nimi">Nimi:</label><br />
<input type="text" name="nimi" id="nimi" /> <br />
<label for="sposti">Sähköposti:</label><br />
<input type="text" name="sposti" id="sposti" /> <br />
<label for="viesti">Viesti:</label><br />
<textarea name="viesti" id="viesti" cols="45" rows="5"></textarea> <br />
<input type="submit" name="laheta" id="laheta" value="Lähetä palaute" />
</form>

Nyt tarvitsee klikata vain etikettiä eli esim tekstiä Sähköposti niin kursori on valmiina oikeassa paikassa.

Kuva:Php.gif

[muokkaa] LEGEND ja FIELDSET

Laittamalla mukaan Legendin ja Fieldsetin parannat esteettömyyttä ja samalla vaikutat ulkoasuun.


<form id="form" name="form" method="post" action=" ">
<fieldset style="width: 400px;">
<legend>PALAUTELOMAKE</legend> 
<label for="nimi">Nimi:</label><br />
<input type="text" name="nimi" id="nimi" /> <br />
<label for="sposti">Sähköposti:</label><br />
<input type="text" name="sposti" id="sposti" /> <br />
<label for="viesti">Viesti:</label><br />
<textarea name="viesti" id="viesti" cols="45" rows="5"></textarea> <br />
<input type="submit" name="laheta" id="laheta" value="Lähetä palaute" />
</fieldset>
</form>

Kuva:Php2.gif

[muokkaa] wrap="virtual"

Yllä oleva koodi takaa sen, että painettaessa Enteriä vaihtuu rivi. Mutta jos teksti törmää seinämään siirtyy se seuraavalle riville, mutta teksti ei katkea fyysisesti. Kyseinen kenttä on tietysti textarea.

<form id="form" name="form" method="post" action=" ">
<fieldset style="width: 400px;">
<legend>PALAUTELOMAKE</legend> 
<label for="nimi">Nimi:</label><br />
<input type="text" name="nimi" id="nimi" /> <br />
<label for="sposti">Sähköposti:</label><br />
<input type="text" name="sposti" id="sposti" /> <br />
<label for="viesti">Viesti:</label><br />
<textarea name="viesti" id="viesti" cols="45" rows="5" wrap="virtual"></textarea> <br />
<input type="submit" name="laheta" id="laheta" value="Lähetä palaute" />
</fieldset>
</form>

[muokkaa] tabindex

Tabulaattori on näppärä ja sen saa toimimaan myös webissä. Käsky on tabindex. Laitetaan toimimaan niin, että ensin on nimi ja sitten viesti ja vasta viimeisenä s-posti.

<form id="form" name="form" method="post" action="palaute.php">
<fieldset style="width: 400px;">
<legend>PALAUTELOMAKE</legend> 
<label for="nimi">Nimi:</label><br />
<input type="text" name="nimi" id="nimi" tabindex="1"/> <br />
<label for="sposti">Sähköposti:</label><br />
<input type="text" name="sposti" id="sposti" tabindex="3" /> <br />
<label for="viesti">Viesti:</label><br />
<textarea name="viesti" id="viesti" tabindex="2" cols="45" rows="5" wrap="virtual">
</textarea> <br />
<input type="submit" name="laheta" id="laheta" value="Lähetä palaute" />
</fieldset>
</form>

[muokkaa] Lomakkeen käsittelijä

Lomake voi olla HTML-muodossa, mutta lomakkeen käsittelijä on aina php-muodossa. Seuraavaksi teemme lomakkeenkäsittelijän, joka käsittelee tiedot ja lähettää ne s-postiin. Lomakkeenkäsittelijän nimi on tietysti palaute.php (ks yllä kohta action).

<?php
$to = "jari.sarja@internetix.fi";
$from = $_POST["sposti"];
$subject = "Palaute";
$name = $_POST["nimi"];
$message = $_POST["viesti"];

if (mail($to, $subject, $message ,"From: $name <$from>"))

echo nl2br("<h2>Palaute on lähetetty!</h2>");

else
echo "Viestin lähettäminen epäonnistui";
?>

Lomake näyttää nyt tältä:

Kuva:Php3.gif

Ja kun tiedot lähettää on lopputulos tämä:

Kuva:Php4.gif

Ja tältä se näyttää spostissa

Kuva:Php5.gif

Kokeile sitä tuolla: http://www.avkymppi.net/palaute/palaute.htm

[muokkaa] Tarkista lomakkeen tiedot

Listään lomakkeeseen tarkistus, että kaikki kentät on täytetty.

<?php
// muuttuja, joka kerää virheet talteen
$errors = array();

// Tarkista nimi
if (!$_POST["nimi"])
$errors[] = "- nimesi";

// Tarkista sähköposti
if (!$_POST["sposti"])
$errors[] = "- sähköposti";

// Tarkista viesti
if (!$_POST["viesti"])
$errors[] = "- viesti";

// Jos virheitä niin näytä
if (count($errors)>0){
echo "<strong>Seuraavat tiedot ovat pakollisia</strong><br />";
foreach($errors as $virhe)
echo "$virhe 
"; echo "
Täydennä lomake <br />"; echo "<a href='javascript:history.go(-1)'>palaa lomakkeeseen</a>"; } else { // lomake on täytetty oikein $to = "jari.sarja@internetix.fi"; $from = $_POST["sposti"]; $subject = "Palaute"; $name = $_POST["nimi"]; $message = $_POST["viesti"]; if (mail($to, $subject, $message ,"From: $name <$from>")) echo nl2br("<h2>Palaute on lähetetty!</h2>"); else echo "Viestin lähettäminen epäonnistui"; } ?>

[muokkaa] Tarkistetaan lähettävä lomake

Jos spam on ongelmana voit laittaa tarkistuksen sille, että posti lähetetään lomakkeeltasi.

//Tarkistaa lähteekö tiedot oikealta lomakkeelta 
if ($_SERVER['HTTP_REFERER']!= "http://www.avkymppi.net/palaute/palaute.htm") 
$errors[] = "- Lomakkeenkäsittelyn käyttö estetty!";

Kokonaisuus näin

<?php
// muuttuja, joka kerää virheet talteen
$errors = array();

//Tarkistaa lähteekö tiedot oikealta lomakkeelta 
if ($_SERVER['HTTP_REFERER']!= "http://www.avkymppi.net/palaute/palaute.htm") 
$errors[] = "- Lomakkeenkäsittelyn käyttö estetty!";

// Tarkista nimi
if (!$_POST["nimi"])
$errors[] = "- nimesi";

// Tarkista sähköposti
if (!$_POST["sposti"])
$errors[] = "- sähköposti";

// Tarkista viesti
if (!$_POST["viesti"])
$errors[] = "- viesti";

// Jos virheitä niin näytä
if (count($errors)>0){
echo "<strong>Seuraavat tiedot ovat pakollisia</strong><br />";
foreach($errors as $virhe)
echo "$virhe 
"; echo "
Täydennä lomake <br />"; echo "<a href='javascript:history.go(-1)'>palaa lomakkeeseen</a>"; } else { // lomake on täytetty oikein $to = "jari.sarja@internetix.fi"; $from = $_POST["sposti"]; $subject = "Palaute"; $name = $_POST["nimi"]; $message = $_POST["viesti"]; if (mail($to, $subject, $message ,"From: $name <$from>")) echo nl2br("<h2>Palaute on lähetetty!</h2>"); else echo "Viestin lähettäminen epäonnistui"; } ?>

Kokeile esim lähettää tietoja väärältä lomakkeelta: http://www.avkymppi.net/palaute/palaute2.htm

Henkilökohtaiset työkalut