PHP.ee
 php.ee   linuxator.com   whee 
07.02.12 / 23:30
  Artiklid
  » Algajaile
  » Andmebaasid
  » Varia
  » Graafika
  » Advanced
Logi sisse:
< nimi
< pass
Unustasid passi?
Kas eelistad võimalusel PHP koodi objektorienteeritult kirjutada?
 Jah, see teeb töö lihtsamaks
 Jah, see on lihtsalt lahe
 Nii ja naa, ei tunne erilist võitu
 Ei, mõttetu ajakulu
 Ei oska objektorienteeritult progeda
Tulemused
Liitu listiga!
Telli PHP uudiskiri
Nimi:
Email
Kuidas kirju saata ehk PHP kui kirjatuvi
Martin Rebane

/*Uuendatud 22. august 2003*/

Tagasiside vorm veebilehel on kasulik, see teeb inimesele sinuga ühenduse võtmise lihtsamaks. Kommerteesmärkidega saitidel lühendab selline vorm kliendi teed ettevõtteni.

Järgnevalt vaatame, kuidas enda veebilehele tagasiside vormi ehitada.

Alustame HTML-koodist, mis tuleb paigaldada veebilehele. Selles on tüüpilised väljad: saatja nimi, tema e-posti aadress, teema ja sõnum ise.

<form method="post" action="<?php echo $PHP_SELF; ?>">

Nimi: <input type="text" size="30" name="nimi">
Email: <input type="text" size="30" name="email">
Teema: <input type="text" size="30" name="teema">
<textarea rows="5" cols="20" name="kiri"></textarea>
<input type="hidden" name="checkme" value="ok">
<input type="submit" value="Saada kiri">

</form>


Igal vormi elemendil oma nimi, määratud name="" abil. Vormi action on selle veebilehe aadress, millele kasutaja peale SUBMIT nupu vajutamisel suunatakse. Meie andsime sellele väärtuse $PHP_SELF'iga, $PHP_SELF annab meile selle lehe nime, kus seda skripti jooksutatakse. Nt kui sinu PHP faili nimi on email.php, siis $PHP_SELF väärtus on "email.php".

Nüüd asume PHP koodi kallale, sama lehekülje algusesse kirjutame skripti, mis saadab kirja meile ära ning annab kasutajale vastava teate:

PHP kood:


 
<?php
if(isset($_POST['checkme']))
{
?>
<div align="center" style="color: red;
font-family: verdana, serif; font-weight: bold; font-size: 14px;">

T&auml;name kirja eest!

<br>Me loeme Sinu kirja niipea kui v&otilde;imalik ja vastame kui vajalik.<br> </div>

<?php

@mail("minunimi@server.ee"$_POST['teema']." (Veebilehelt)"$_POST['kiri'],
 
"From: " $_POST['nimi'] . " <".$_POST['email'].">\nReply-To: ".$_POST['email'] .
 
"\nX-Mailer: PHP.ee/"phpversion());

}
?>



Vaatame seda skripti nüüd veidi lähemalt...

if(isset($_POST['checkme']))

Kontrollime, kas formiga vaikimisi kaasa pandud muutuja checkme on ikka olemas ehk kas form on submititud või on külastaja siin esimest korda. Selle teeme kindlaks selle kaudu, kas varjatud muutuja $_POST['checkme'] on olemas.

Kui kiri oli submititud, ütleme kasutajale kohe tänusõnad, kui soovid, võid ka isiklikult tänada, kasutades muutujat $_POST['nimi'], nt: Täname sind $_POST['nimi']!

@mail("minunimi@server.ee", $_POST['teema']." (Veebilehelt)",
$_POST['kiri'],

PHP funktsiooni mail() kolm esimest argumenti on ootuspäraselt:
*kuhu kiri saata;
*teema, (sinna panime selle, mille kasutaja kirjutas ja lisasime enda tarbeks veel igaks juhuks märkuse'(Veebilehelt)')
*Kirja sisu - muutuja $_POST['kiri'], mille me saime vormist.

PHP kood:


 
"From: " $_POST['nimi'] . " <".$_POST['email'].">\nReply-To: ".$_POST['email'] .
 
"\nX-Mailer: PHP.ee/"phpversion());


Kellelt: kasutaja nimi ja e-mail kujul
Ants Maasikas <ants.maasikas@kidrox.com>

\n ütleb serverile, et on vaja kirja päisesse reavahetus lisada
Reply-to ehk kellele vastata - jälle kasutaja e-kirja aadress siia.

Mailer ehk programm, millega kiri on saadetud. Tavaliselt koduarvutist saates oleks see nt Pegasus Mail, Eudora või ebaturvalisuse poolest silma paistev MS Outlook. Meie paneme siia 'PHP/versioon'. Versiooni lisamiseks kasutame funktsiooni phpversion().

Mõtekas on ära keelata ka tühjade kirjade saatmine. Selleks tarbeks lisame skripti algusesse if-lause, millega kontrollime, kas kõik väljad olid postitamisvormis täidetud:

PHP kood:


 
<?php
if (isset($_POST['checkme']) && !strlen($_POST['email']) || !strlen($_POST['nimi']) || !strlen($_POST['teema']) || !strlen($_POST['kiri']))
{
    echo
"Palun vajuta brauseri back-nuppu, osad v&auml;ljad j&auml;id t&auml;itmata!";
}
elseif(isset(
$_POST['checkme']))
{

?>
<div align="center" style="color: red;
font-family: verdana, serif; font-weight: bold; font-size: 14px;">

T&auml;name kirja eest!

<br>Me loeme Sinu kirja niipea kui v&otilde;imalik ja vastame kui vajalik.<br> </div>

<?php

@mail("minunimi@server.ee"$_POST['teema']." (Veebilehelt)"$_POST['kiri'],
 
"From: " $_POST['nimi'] . "<".$_POST['email'].">\nReply-To: " 
$_POST['email'] . "\nX-Mailer: PHP.ee/"phpversion());

}
?>




strlen() on funktsioon, mis annab meile teksti-tüüpi muutuja pikkuse.
Hüüumärk funktsiooni ees tähendab eitust.


!strlen($_POST['email'])


...kokkupanduna tähendab see siis seda, et tingimus on tõene kui stringil $_POST['email'] pikkust ei ole.

'||' tähendab või, selle asemel võib kasutada ka 'or'.
Kokku võttes - kui kasvõi ühel vormis täita palutud muutujaist pikkust ei ole, siis palutakse kasutajal back-nuppu vajutada.

Turvalisus



Siiamaani muretsesime vaid programmi funktsionaalsuse pärast, ent on veel teinegi aspekt, millega veebipõhise e-kirja saatmisel arvestada tuleb - turvalisus.

Praegune skript võimaldab kasutajal meie vormi kasutada võõraste e-kirjade saatmiseks. Nt saata kiri enda valitud aadressi ja sisuga enda valitud saajale. Põhilised ohud, mille suhtes tuleb valvas olla, on reavahetused, komad ja semikoolonid nendel väljadel, mida me kasutame e-kirja saatmiseks (to, from, subject).

Et vältida spämmkirjade saatmist, peame lisama kontrolli, mis vaataks, et nimetatud väljadel ei oleks selliseid märke.


Kena mailimist!

Programmi kood on siin: email.php (Vajuta paremat hiirenuppu ja Save Target as..(sest muidu kuvatakse see brauseris))

.martin.

Artikli kommentaarid

O