PHP - formulár a email
PHP - formulár a email
Ako prvé čo budeme musieť vytvoriť sú 2 súbory a to form.php a data.php. V prvom súbore form.php sa bude nachádzať samotný formulár, ktorý bude odosielať dáta do súboru data.php, ktorý ich potom spracuje a vypíše. Zdrojový kód formuláru si môžete skopírovať tu:
<form action="data.php" method="post"> <fieldset><legend>Formulár a email</legend> Meno: <input name="meno" type="text" size="32" /><br /> Priezvisko: <input name="priezvisko" type="text" size="28" /><br /> E-mail: <input name="email" type="text" size="32" /><br /> Predmet: <input name="predmet" type="text" size="30" /><br /> <br>Text:<br> <textarea name="text" rows="7" cols="30"></textarea><br> <input name="odoslat" type="submit" value="Odoslať" /> </fieldset></form> <br> <font color="red">Všetky údaje sú povinné!</font>
Výsledok bude vyzerať takto:
Všetky údaje sú povinné! Ako vidíte nieje to ťažké. Teraz máme celý formulár hotový. Rád by som ešte ale doplnil k formuláru, že je veľmi dôležité aby tam zostali parametre name="", pretože by skript data.php nevedel rozpoznať aké dáta príma a potom by vlastne nemal ani čo spracovať.
Spracovanie dát
A teraz rovno k zdrojovému kódu data.php
<?
$prijemca = "váš@email.niečo";
if ($meno && $email && $predmet && $text){
mail("$prijemca", "$predmet", "$meno $priezvisko Vám posiela tento text $text",
"from: $email");
echo "Váš <b>email bol</b> úspešne <b>odoslaný</b>!";
}
elseif (($meno && $email && $predmet && $text) == false){
echo "Váš <b>email nebol odoslaný</b>. <b>Nezadali ste všetky</b> povinné
<b>údaje</b>.";
}
?>
Ak si pozriete kód tak sami asi usúdite, že $prijemcu si musíte vyplniť sami resp. musíte nahradiť ten text váš@email.niečo emailom na ktorý chcete formulár odoslať. Za podmienkou "if" nasleduje text s úspešným odoslaním emailu. Všetky premenné $meno, $text... atď. sú vlastne mená tagov <input /> a <textarea> v súbore form.php (napr. meno v súbore form.php je to isté čo $meno v súbore data.php a preto som aj uvádzal dôležitosť parametru name="" ). Prvá podmienka udáva to, že ak sú každému tagu <input> a <textarea> priradené hodnoty, tak sa odošle email (tvar emailu je - mail(príjemca, predmet, obsah, odosielateľ)) a vypíše sa aj text s úspešnosťou odoslania (to zariadi echo "Váš <b>email bol</b> úspešne <b>odoslaný</b>!";). Druhá podmienka "elseif" uvádza to, že keď niekto nevyplní jednu alebo všetky z položiek tak potom jeho email nebude odoslaný a zobrazí sa mu text o neúspešnom odoslaní emailu. (echo "Váš <b>email nebol odoslaný</b>. <b>Nezadali ste všetky</b> povinné <b>údaje</b>.";).
To by bolo o odosielaní emailu pomocou formuláru asi všetko. Samozrejme namiesto funkcie mail si tam môžete dať aj funkciu vlastnú ale to už by bolo niečo čo do tohoto článku nepatrí. Odporúčam taký článok vyhľadať na stránke v rubrike "php". Tam sa dozviete o funkciách viac.


![Hlasová verzia [Pre internetový prehliadač Opera] Voice](modules/items/voice.png)
Komentáre
aj mi napisalo ze Váš email bol úspešne odoslaný a nič skontroloval som prijemcu a mam ta normalne svoj email poradte prosim dakuejem pekne
neskusal som to este ale skus v data.php na zaciatku doplnit php... nech ten prvy riadok vyzera takto: <?php a vzdy predtym ako zacnes menit telo scriptu skontroluj ci mas vsade dopisane "php" vo vacsine pripadov je chyba tato...
Dakujem za odpoved!
Prikladam tu aj kod suboru data.php.
Dakujem za pomoc.
<?$prijemca = "sueweb@sueweb.sk";
if ($meno && $vek && $email && $Kraje && $požadovaný_vek && $poznamka){
mail("$prijemca", "$meno $priezvisko zadal/a tieto údaje:<br />
$Kraje, <br />
$požadovaný_vek<br />
$poznamka",
"from: $email");
echo "Váš <b>email bol</b> úspešne <b>odoslaný</b>!";
}
elseif (($meno && $vek && $email && $Kraje && požadovaný_vek && $poznamka) == false){
echo "Váš <strong>email nebol odoslaný</strong>. <strong>Nezadali ste všetky</strong> povinné <strong>údaje</strong>.";
}
?>
mail($prijemca, "Nejaký predmet", "$meno $priezvisko<br />, $vek, $text...","from: $email");
Hodnoty jednotlivych policok sa vypisuju vzdy na novy riadok (to tak musi byt). Ked ale niektore policka zostanu nevyplnene, v doslom e-maili je vela prazdnych riadkov a je to menej prehladne.
Dakujem za radu.
Jozef
tiež sa pripájam, mne to tiež píše
???
dik za odpoved
PHP kód je lepšie začínať znakmi <?php, pretože aj XML kód sa začína <? a môžu sa pobiť.
Veľa ľuďom vypisuje hlášku typu "Neboli vyplnené všetky potrebné polia.", pretože údaje z formulára sa musia pred dosadením do skriptu "vytiahnuť". PaBi3 napísal ten skript dobre, tuším, že na staršej verzii PHP to aj fungovalo, ale od verzie 5.x to nefahčí. Dáta z formulára sa "vyťahujú" takto: $_POST['premenna'] (vytiahnu sa dáta z pola formulára s name='premenna'). Pre uľahčenie roboty si za $prijemca prihoďte:
$meno = $_POST['meno'];$priezvisko = $_POST['priezvisko'];
$email = $_POST['email'];
$predmet = $_POST['predmet'];
$text = $_POST['text'];
[#4 tombas.b]: Zrejme ste prehliadačom prišli priamo na adresu skriptu. Keďže ste formulár asi ani nevideli, skript nemal odkiaľ získať potrebné dáta a preto mail neodoslal.
[#11 palo]: Samozrejme, dá sa to. V tom prípade musíte pre tlačidlo typu submit priradiť name. Potom do skriptu treba doplniť podmienku, napr.:
if (isset($_POST['submit'])) ...Preklad: keď bola nastavená premenná $submit, pokračuj ... A skript sa v podstate buchne do podmienky. Ale neodporúčam to robiť takto, hlavne pre začiatočníkov. Je to zložitejšie zabezpečiť, preto je jednoduhšie dáta spracovávať v externých skriptoch.
toto je subor form
<form id="form" action="data.php" method="post" enctype="multipart/form-data">
<div style="width:194px;" class="col">
<div class="inp_h">
<input type="text" name="meno" value="meno" onfocus="this.value=''" />
</div>
<div class="inp_h">
<input type="text" name="email" value="email" onfocus="this.value=''" />
</div>
<div class="inp_h">
<input type="text" name="predmet" value="predmet" onfocus="this.value=''" />
</div>
</div>
<div class="col" style="width:171px;">
<div><textarea name="text" rows="30" cols="40" onfocus="this.value=''">text</textarea></div>
</div>
<div class="clear"></div>
<div class="sep"> </div>
<div class="right">
<input name="zmazat" type="reset" />
<label>
<input name="odoslat" type="submit" value="Odoslat" />
</label>
</div>
</form>
<br>
<font color="red">Všetky údaje sú povinné!</font>
a toto data
<?php
$prijemca = "info@imart.sk";
if ($meno && $email && $predmet && $text){
mail("$prijemca", "$predmet", "$meno $email Vám posiela tento text $text",
"from: $email");
echo "Váš <b>email bol</b> úspešne <b>odoslaný</b>!";
}
co mam urobit aby mi to fungovalo:((((((
Zaroven by som sa chcel opytat, preco mi po odoslani formulara skript vypise vetu o jeho nespravnom vyplneni napriek tomu, ze vsetky polia su vyplnene.
No a php je pre mna zatial spanielskou dedinou...
formalar: http://peto.110mb.com/php/1_3.php
data: http://peto.110mb.com/php/data.php
Dakujem za pomoc!
<?php$prijemca = "penzionmanin@penzionmanin.sk";
$meno = $_POST['meno'];
$termin = $_POST['termin'];
$email = $_POST['email'];
$spam = $_POST['spam'];
$_3postele = $_POST['_3postele'];
$_5posteli = $_POST['_5posteli'];
$_4postele = $_POST['_4postele'];
$pocetosob = $_POST['pocetosob'];
$strava = $_POST['strava'];
$welness = $_POST['welness'];
$popis = $_POST['popis'];
if ($meno && $email && $termin && $spam=="4")
{
Mail("$prijemca","$meno","Ahoj, dalšia prijatá rezervácia od: $meno
Termín: $termin Noclah: $_3postele , $_5posteli, $_4postele Celkový počet osôb:
$pocetosob ,Strava: $strava + $welness ,Iné informácie: $popis","From:".
$email);
echo "<p><strong>Vaša rezervácia bola odoslaná.O jej prijatí vás budeme
informovať
e mailom. Ďakujeme a tešíme sa na vás</strong>.</p>";
}
elseif (($meno && $email && $spam ) == false){
echo "Vaša rezervácia nebola odoslaná.Vyplnte prosím všetky údaje.";}
?>
este raz diky moc...
Takže správny tvar data.php je:
<?php
$prijemca = "váš@email.cz";
$meno = $_POST['meno'];
$priezvisko = $_POST['priezvisko'];
$email = $_POST['email'];
$predmet = $_POST['predmet'];
$text = $_POST['text'];
if ($meno && $email && $predmet && $text){
mail("$prijemca", "$predmet", "$meno $priezvisko Vám posiela tento text $text",
"from: $email");
echo "Váš <b>email bol</b> úspešne <b>odoslaný</b>!";
}
elseif (($meno && $email && $predmet && $text) == false){
echo "Váš <b>email nebol odoslaný</b>. <b>Nezadali ste všetky</b> povinné
<b>údaje</b>.";
}
?>
Chcel by som sa opytat, ako zabezpecim korektne zobrazenie diakritiky v prijatych e-mailoch?
Je mozne nejakym jednoduchym sposobom kontrolovat, ci je e-mailova adresa skutocne e-mailovou adresou (teda retazcom v tvare meno(at)host(dot)sk, pripadne kontrolou zavinaca (kedze e-mailove adresy mozu byt kadejake))? Skript teraz akceptuje akykolvek retazec, ci uz obsahuje alebo neobsahuje @...