Osobní komunikační centrum v PHP

13. října 2002

Osobní stránky doslova přetékají emailovými formulářemi a ikonkami ICQ online/offline. Za pomoci jednoduchých skriptů v jazyce PHP lze utvořit plnohodnotné osobní komunikační centrum.

Naše komunikační centrum má sloužit pro usnadnění komunikace uživatele s nějakou konkrétní osobou. Centrum nabídne možnost odeslání Emailu, SMSky, nebo zprávy na ICQ. Je to jednoduché. Celé centrum se skládá ze dvou částí – formuláře a skriptu PHP, který se postará o odeslání dat.

Nejdříve si prohlédneme formulář:

<form method=“post“>
<input type=“hidden“ name=“odeslano“ value=“true“> <table style=“font:13px arial;width:400px;“>
<tr><td><input type=“text“ name=“jmeno“ value=“Vaše jméno“ /></td><td><input type=“text“ name=“email“ value=“Váš email“ /></td></tr>
<tr><td colspan=“4″><input type=“text“ name=“predmet“ size=“40″ value=“Předmět zprávy“ /></td></tr>
<tr><td colspan=“4″><textarea name=“text“ cols=“40″ rows=“12″ value=““>Text zprávy</textarea></td></tr>
<tr><td colspan=“4″><input type=“submit“ value=“Odeslat“> jako <select name=“jako“>
<option value=“email“>E-Mail</option>
<option value=“sms“>SMS</option>
<option value=“icq“>ICQ</option>
</select>
<img src=“http://web.icq.com/whitepages/online?icq=xxxxxxxxx&img=21″ /></td></tr>

</table>
</form>

Zvýrazněné elementy jsou funkční prvky. Nacházíme zde jeden formulář s položkami jméno, email, předmět, text, možnost volby způsobu odeslání, neviditelný vstup odeslano=true, tlačítko ODESLAT a ještě ikonka ICQ online/offline (pokud jste ICQ online, je jasné, že je momentálně ICQ nejrychlejší způsob komunikace s vámi). Místo xxxxxxxxx musíte samozřejmě zadat číslo svého ICQ (pokud nějaké máte). Pokud ICQ nemáte, stačí odmazat řádek <option value=“icq“… a odstranit ikonku ICQ (<img src=“http://web.icq…).

PHP skript vložíte do stejného souboru, jako formulář. Využijeme přitom neviditelné položky formuláře odeslat s hodnotou true. Pokud pak proměnná $odeslat bude mít hodnotu true, byl formulář odeslán a můžeme přejít k „odesílací“ části skriptu. Ta je realizována především pomocí funkce mail(). Pokud bude odeslání úspěšné, nastaví se proměnná $ok na true a vypíše se hláška informující o úspěšném odeslání.

Abychom si to trochu zpestřili, použijeme tzv. superglobální proměnné. Mezi ně patří například $HTTP_GET_VARS, $HTTP_POST_VARS nebo $HTTP_COOKIE_VARS. Od PHP 4.1.0 lze používat i kratší varianty jako $_GET, $_POST nebo $_COOKIE. Ty se chovají naprosto stejně, jako jejich starší vzory. Proměnná $HTTP_POST_VARS je vlastně pole obsahující všechny proměnné, které byly skriptu předány metodou POST. Další se chovají obdobně. Pokud tedy chceme ve skriptu použít proměnnou $promenna, která byla odeslána metodou POST, můžeme napsat buď $promenna, $HTTP_POST_VARS['promenna'], nebo $_POST['promenna']. Ve skriptu z těchto tří možností vybereme $HTTP_POST_VARS, pro případ, že by někdo používal starší verzi PHP, než 4.1.0. Ti ostatní samozřejmě mohou nahradit $HTTP_POST_VARS za $_POST.

<?php
if($HTTP_POST_VARS[‚odeslano‘]) {
if($HTTP_POST_VARS[‚jako‘]==“email“) {
if(mail(„váš@email.cz“, „Z WWW : “ . $HTTP_POST_VARS[‚predmet‘], $HTTP_POST_VARS[‚text‘], „From:“ . $HTTP_POST_VARS[‚jmeno‘] . “ <" . $HTTP_POST_VARS['email'] . "> \r\n Content-Type: text/plain“)) $ok=true;
}
if($HTTP_POST_VARS[‚jako‘]==“sms“) {
if(mail(„mobilní@email.cz“, „Z WWW : “ . $HTTP_POST_VARS[‚predmet‘], $HTTP_POST_VARS[‚text‘], „From:“ . $HTTP_POST_VARS[‚jmeno‘] . “ <" . $$HTTP_POST_VARS['email'] . "> \r\n Content-Type: text/plain“)) $ok=true;
}
if($HTTP_POST_VARS[‚jako‘]==“icq“) {
if(mail(„vaseicq@pager.icq.com“, „Z WWW : “ . $HTTP_POST_VARS[‚predmet‘], $HTTP_POST_VARS[‚text‘], „From:“ . $HTTP_POST_VARS[‚jmeno‘] . “ <" . $$HTTP_POST_VARS['email'] . "> \r\n Content-Type: text/plain“)) $ok=true;
}
if($ok) echo(„Vaše zpráva byla úspěšně odeslána.“); else echo(„Vyskytly se potíže při odesílání vaší zprávy.“);
}
?>

V první řadě je potřeba rozpoznat, jak se vlastně bude zpráva odesílat (jestli jako SMS, nebo Email, nebo jako ICQ). Poté následuje samotné odeslání mailu. Funkce mail() je vložena namísto podmínky, v případě úspěšného odeslání (pozor, nikoli doručení) bude podmínka splněna a provede se příkaz $ok=true;. Ten je potom použit v závěrenčé části skriptu, která, pokud je $ok true, vypíše „Vaše zpráva byla úspěšně odeslána.“, v opačném případě se na obrazovce objeví „Vyskytly se potíže při odesílání vaší zprávy.“.

Ti pozornější si asi všimli možnosti, kdy proměnná $jako bude mít jinou hodnotu, než email, sms či icq. Pak se skript o odeslání ani nepokusí a rovnou vypíše chybovou hlášku (proměnná $ok totiž bude mít hodnotu false). Není to ale špatně. Je pravděpodobné, že nějaké proměnné (jako třeba text zprávy) byly vyplněné, takže uživatel nejspíš předpokládá, že se skript pokusí zprávu odeslat. S ohledem na tento fakt je vypsání chybové hlášky zcela korektní.

Teď už ale k použití funkce mail(). Nejprve si ji trochu připomeneme:

mail(adresa_příjemce, předmět, text_zprávy, hlavičky_(nepovinné));

Adresa příjemce je celkem jasná. V našem případě to bude buď emailová adresa, nebo adresa mobilního emailu, popř. adresa ICQ. Ta je ve tvaru xxxxxxxxx@pager.icq.com, s tím, že xxxxxxxxx je číslo vašeho ICQ.

Předmět vyplňuje uživatel, my mu jen přidáme na začátek Z WWW : , abychom věděli, že zpráva byla poslána z našeho komunikačního centra.

Text zprávy ponecháme, problémy s možnými značkami HTML odpadnou nastavením typu emailu na text/plain (v dalším odstavci).

Hlavičky jsou nepovinným atributem funkce mail(). My je zde použijeme pro vložení jména a emailu uživatele (pro snadnější odpovídání) a pro nastavení typu emailu:

From : Jméno příjmení <jmenoprijmeni@email.cz>
Content-type: text/plain

Teď už jen stačí vložit formulář s php skriptem do své stránky.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

1 komentář

  1. Angličtina

    Čvc 26, 2011 v 22:31

    Užitečný článek a moc pěkný design webu.

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *