Vydrusův zápisník

postřehy ze světa internetu a IT

co jsem zač?

Avatar - vydraMá přezdívka je Vydrus. Zaměřuji se na webové technologie a IT. Jsem velký fanoušek GNU/Linuxu, pracuji na Ubuntu.

Kontaktní formulář v PHP

Na internetu je k dispozici mnoho mailerů od poskytovatelů typu Blueboard, Webber, Weblight a dalších. Tyto „prvky“ na stránky jsou však oproti mému skriptu značně stupidní, protože obsahují reklamu a nemají žádná jiná vylepšení.

Věřím, že pokud využíváte cizí odesílací form, tak ho zahodíte a dáte si místo něj ten můj. Nejen proto, že je to možnost nebýt závislý na někom jiném, ale také kvůli několika funkcím, které jinde nejsou.

Kód:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
$jmeno=$_REQUEST['jmeno'];
$email=$_REQUEST['email'];
$predmet=$_REQUEST['predmet'];
$zprava=$_REQUEST['zprava'];
$send=$_REQUEST['send'];
if ($email==""){
$email="@";
}
$form="<form method=\"post\" action=\"$php_self\">
<p><table WIDTH=\"415\" BORDER=\"0\" CELLPADDING=\"1\" CELLSPACING=\"0\">
<tr valign=\"top\">
<td WIDTH=\"75\" class=\"text11px\">Vaše jméno:</td>
<td WIDTH=\"75\"><input size=\"20\" type=\"text\" name=\"jmeno\" maxlength=\"100\" value=\"$jmeno\"></td>
</tr>
<tr valign=\"top\">
<td WIDTH=\"75\" class=\"text11px\">E-mail:</td>
<td WIDTH=\"75\"><input size=\"20\" type=\"text\" name=\"email\" maxlength=\"100\" value=\"$email\"></td>
</tr>
<tr valign=\"top\">
<td WIDTH=\"75\" class=\"text11px\">Předmět:</td>
<td WIDTH=\"75\"><input size=\"20\" type=\"text\" name=\"predmet\" maxlength=\"100\" value=\"$predmet\"></td>
</tr>
<tr valign=\"top\">
<td WIDTH=\"75\" class=\"text11px\">Zpráva:</td>
<td WIDTH=\"75\"><textarea name=\"zprava\" rows=\"8\" cols=\"35\">$zprava</textarea></td>
</tr>
<tr>
<td WIDTH=\"80\"></td>
<td WIDTH=\"80\"><input type=\"hidden\" name=\"send\" value=\"submited\"><input type=\"submit\" value=\" Odeslat zprávu \"</td>
</tr>
</table>
<p><em>Všechna pole jsou povinná.</em>
</form>";
 
$jmeno_error=0;
$email_error=0;
$predmet_error=0;
$zprava_error=0;
 
if ($send!="submited"){
echo "$form";
}else{
 
        if (empty($jmeno)){
        echo "<strong>Musíte zadat vaše jméno.</strong><br />";
        $predmet_error=1;
        }
 
        if (empty($email)){
        echo "<strong>Musíte zadat existující e-mail.</strong><br />";
        $email_error=1;
        }else{
 
        if ((@!strpos ($email,"@")) || (@!strpos ($email,"."))){
        echo "<strong>Musíte zadat existující e-mail.</strong><br />";
        $email_error=1;
        }}
 
        if (empty($predmet)){
        echo "<strong>Musíte zadat předmět.</strong><br />";
        $predmet_error=1;
        }
 
        if (empty($zprava)){
        echo "<strong>Musíte zadat zprávu.</strong><br />";
        $zprava_error=1;
        }
 
        if (($jmeno_error) || ($email_error) || ($predmet_error) || ($zprava_error)){
        echo "$form";
        }else{
        $zprava1="$zprava
 
 
Odesílatel: $jmeno
E-mail: $email";
 
        $komu="tvuj@mail.cz";
        mail ($komu,$predmet,$zprava1,"Content-Type: text/plain; charset=windows-1250\nReply-To: $email\nFrom: vydrus@vydrus.name");
        echo "Zpráva byla úspěšně odeslána.";
        }
}
?>

Funkce:

  • odeslání předmětu
  • odeslání jména odesílatele
  • odeslání emailu odesílatele
  • odeslání zprávy :-)
  • kontrola vyplněných polí
  • kontrola správně zadaného emailu
  • volba odkud přijde mail – From (např. vydrus@vydrus.name)
  • volba Odpovědět ve vaší schránce – Reply-To (email odesílatele)

Inputy, textareu a tlačítko si můžete libovolně ostylovat, s tím jsem se nepatlal, to je zcela na vás. Pokud se vám nelíbí chybové hlášky a ostatní texty, můžete si je libovolně změnit, ale nedoporučuji šahat na cokoli jiného, může se vám totiž stát, že to nebude fungovat.

Určitě si nezapomeňte nastavit vlastní kódování zprávy (charset) a změnit proměnnou $komu – na tuto adresu vám budou chodit maily.

Reklama: Netradiční čtení na téma půjčky naleznete na webu Bez půjčky

k dalšímu čtení

komentáře (15)

  1. Dovolil jsem si trošku zpoužitelnit onen formulář, viz http://bradley.ic.cz/storage/mail-form.txt. Ještě by to chtělo do „základu“ vetřít kontrolu délek, pak by to bylo definitivně BFU odolné… :-)

    bradley

  2. No, jsem rád že ses v mym prasáckym kódu alespoň přehrabal. :)

    Našel jsi nějaké určité vady na tom mym skriptu, když už ses na to díval?

    Vydrus

  3. - No, je tak trošku prasárna používat globální systémové proměnné ($php_self). Vypnou ti register_globals a dojezdil si…, proto ono nahrazení za superglobální systémovou proměnnou $_SERVER['php_self'].
    - Když se posílá formulář metodou POST, je lepší hledat poslaná data v $_POST
    - Vstupní data je potřeba zbavovat přebytečných mezer, ošetřovat
    - Psát české znaky jako entity je taky docela síla. :-) Nic ve zlém, ale psát je normálně a uložit soubor v daném kódování nic nezkazí.

    Takže tak, no… :-P

    bradley

  4. Huh, s tim php_self máš asi pravdu… Skript jsem dělal narychlo, no :) Co se týká entit, tak ty jsem tam dal pro všechny případy, aby se to zobrazilo správně…

    Mohu ten tebou upravený skript použít místo dosavadního? Samozřejmě uvedu autora, takže to bude bod pro tebe ;)

    Vydrus

  5. Zdravím hoši,
    skript je to pěkný, ale pořád nemůžu přijít na to aby zpráva byla kódována v UTF8 … vždy email, který má obsahovat české znaky obsahuje jiné klikyháky … nevíte co s tím?

    Jack

  6. Zdar, zkus použít odkaz v 1. komentáři, kamarád to trošku zprovoznil… Snad ti to pomůže :)

    Vydrus

  7. To je divný. Mě diakritika nezlobí. Mám kódování windows-1250 – zkus tam nastavit to, jaký je na tvym hostingu implicitní (na ic.cz je právě to windowsovský).

    Vydrus

  8. Nejde mi to prostě :( .. když jsem kódování změnil tak nebyl OK ani předmět …

    Jack

  9. Dík, za rychlou odpověď, ano tento script jsem použil … radši jsem teď překontroloval, zda-li jsem scripty nezaměnil, ale ne .. stejně to nejde .. charset jsem změnil na UTF 8 ale ani předtím při tom windows to nešlo :( … předmět v e-mailu je uplně v pohodě česky … ale ve zprávě na místo Č je např … Ä? … nevíš čím to může být :( ? Kódování webu mám též v UTF8 a script také …

    Jack

  10. Ahoj, prosim, pro odesilani formulare pouzivas POST metodu, tak proc nepouzivas globalni pole POST, ale REQUEST?
    Dalsi vec, ktera me teda hned uderila do oci jsou zpetne lomitka vsude. Proc nepouzivas kombinace uvozovek a apostrofu, vsechno potom vypada prehledneji.
    Dale, kdyz podrzim F5, co se stane? Bude se stale odesilat a odesilat?
    Hidden pole je tam uplne zbytecne, kdyz dat ten name do submit tak se prenese, ale lepsi by bylo treba udelat kontrolu na count( $_POST ), nebo jinak.
    A spousta dalsich chyb…..
    Priste nez neco takoveho uverejnis tak si to po sobe alespon precti.

    zaachi

  11. Nu, dělal jsem to hodně narychlo. Příště se poučím :)

    Vydrus

  12. TAk, jelikož používám wordpress tak jsem si nainstaloval ContatctForm7 .. a je to vyřešené :)

    Jack

  13. Dobrý den. Používám tento formulář a jsem sním velmi spokojen.Jako jeden z mála je opravdu funkční.
    Myslíte, že by se dal ještě trochu obohatit o odeslání IP a času odeslání. Docela by se to hodilo a já stím bohužel nemůžu hnout. Za případnou pomoc děkuji. K.V.

    Karel

  14. Já dělal formulář s podporou UTF8. Není to žádná legrace a doporučuji přečíst toto:

    http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=2111#3

    Jde o to, v hlavičce mailu u každé položky napsat, v jakém je formátování (všude, kde bude něco v utf8, takže třeba subject), potom je tam třeba použít base64 a ještě takový menší skript na to, aby jakási délka nepřesáhla 79 kvůli SpamAssasinu. Info hledejte i na tom diskuzním fóru, tak i u nápovědy pro funkci mail. Držím palce.

    Liborse

  15. Tenhle web mi hodně pomohl.

    Antonín Rais

zanechte komentář!

Komentáře jsou moderovány. Nevhodné příspěvky mohou být dle mého uvážení smazány. Pokud zde komentujete poprvé, musí být váš komentář nejprve schválen.

Náš sponzor: Na webu obálky a potisk obálek Vám nabízíme digitální tisk a potisk obálek. Nepotištěné obálky můžete u nás nakoupit za velkoobchodní ceny.