Jednoduchý návod na vlastní prezentaci v PHP s použitím CSS a MySql databáze.
Dnes nás čeká modul na odesílání emailu pomocí formuláře.Použijeme klasický formulář který pomocí funkce post odešle data do souboru send.php který se nám postará o samotné odeslání emailu.
modules/email/index.inc
<b>V případě potřeby nás můžete kontaktovat zde:</b>
<form action="modules/email/send.php" method="post">
<table width="250" border="0" class="text">
<tr><td width="60">Jméno:</td><td><input name="jmeno" type="text"></td></tr>
<tr><td width="60">Email:</td><td><input name="email" type="text"></td></tr>
<tr><td width="60" valign="top">Text:</td><td><textarea name="text" rows="5" cols="25"></textarea></td></tr>
<tr><td colspan="2" align="center"><input type="submit" class="button" value="Odeslat"> <input type="reset" value="Vymazat"></td></tr>
</table></form>
<?php
if ($mail=="send")
{echo "<br>Váš email byl odeslán";}
if ($mail=="send")
{echo "<br>Váš email NEBYL odeslán";}
?>
V tomto souboru máme vytvořený formulář, který nám odešle zadaná data do souboru modules/email/send.php Obsahuje ještě podmínku, která nám zobrazí potvrzovací text po odeslání e-mailu.
Form - formulář
Form je párový tag uzavírají se do něj ovládací pole které se nakonec odešlou.
Action - atribut
Atribut action se používá k zadání url ke skriptu který bude data zpracovávat jako hodnota se uvádí URL.
Method - atribut
Výchozí metoda atributu method je get. Říká, že se data budou předávat jako součást URL, tedy v řádku adresy. Metoda post zabalí odesílaná data a odesílá je nezávisle, takže nejsou vidět. Post je dobré nastavit u delších formulářů.
Enctype - atribut
Atribut enctype se moc nevyužívá jeho hodnoty jsou application/x-www-form-urlencoded a multipart/form-data.
Imput - vstupní pole
Imput neboli vstupní pole se používá k vytvoření tlačítek, textových polích zaškrtávacích polí a přepínacích polí atd...tento tag není párový.
Type - atribut
Atribut type určuje druh vstupního pole pomocí něj můžete vytvořit spoustu formulářů, má hodně hodnot
type=text
při použití text se zobrazí textové pole, jeho šířku můžete nastavit pomocí atributy size jeho hodnota je počet písmen které se do pole vejdou, také může použít atribut maxlength který určuje nejvyšší počet zadaných znaků.
type=password
Při použití password budou vlastnosti stejné jaku u text akorát se místo textu zobrazí hvězdičky.
type=hidden
Tato hodnota se používá jako skryté pole s předem zadanou hodnotou kterou nelze změnit.
type=file
Při použití file se objeví nabídka na přidání souboru který se může odeslat.
type=radio
Při použití radio se zobrazí přepínací tlačítko dalším atributem je checked který působý zaškrtnutí pole.
type=checkbox
Při použití checkbox se zobrazí zaškrtávací pole, dalším atributem je checked který působí zaškrtnutí pole.
type=button
Objeví se tlačítko které bude ovládáno skripty.
type=submit
Při použití submit se zobrazí tlačítko které bude odesílat formuláře.
type=reset
Při použití reset se zobrazí tlačítko které bude vracet formulář do původního nastavení.
type=image
Při použití image musíte přidat další atribut src který určuje url obrázku který se zobrazí jako tlačítko.
modules/email/send.php
<?php
$jmeno=strip_tags($jmeno);
$email=strip_tags($email);
$text=strip_tags($text);
$pro = "vasek@ostravak.com";
$data = "From: $email\r\nReply-To: $email\r\n";
$predmet = "Vzkaz od ".$jmeno."";
$zprava = "Jméno: ".$jmeno."\nEmail: ".$email."\n Text:\n".$text."";
if (mail ($pro, $predmet, $zprava, $data)) {
header('Location: ../../index.php?page=email&mail=send');
} else {
header('Location: ../../index.php?page=email&mail=nosend');
}
?>
Pomocí funkce strip_tags zajistím, že do obsahu zprávy nebudou vloženy žádné scripty. Pokud se je tam uživatel napíše, tato funkce je nahradí mezerou.
Velice často se tato funkce bohužel používá i pro výpis dat zadaných uživatelem jako prevence před XSS. To má ale řadu poměrně vážných nevýhod:
• Znaky jako &, samotné > nebo třeba znak < následovaný mezerou nejsou nijak ošetřeny, což způsobí nevaliditu výsledného dokumentu.
• Uživatel nemůže např. v diskusním příspěvku HTML značky jednoduše zadat a musí to udělat přes HTML entity.
• Pokud uživatel není na odstraňování HTML značek předem upozorněn, může být jejich zmizením nemile překvapen.
Funkce strip_tags se na ošetřování uživatelských vstupů zkrátka vůbec nehodí. Pokud zpracování HTML značek např. v diskusních příspěvcích dovolit nechceme, je vhodné to na stránku napsat a výstup ošetřit např. funkcí htmlspecialchars a nl2br.
Pokud uživateli chceme dovolit používat jen některé značky, nabízí nám funkce strip_tags možnost předat jí druhý parametr a tím povolené značky určit. Toto použití je ale snad ještě horší – funkce totiž ze značek neořízne atributy a uživatel tak může např. pomocí atributu style zcela rozhodit celou stránku nebo pomocí atributů pro obsluhu událostí vykonat libovolný JavaScriptový kód.
Dále z dat zaslaných formulářem „poskládáme“ e-mail a následně ho odešleme. O to se nám postará funkce mail.
Ve Windows přebírá PHP funkci SMTP klienta. Prostě předá mail pomocí protokolu SMTP. Tady je nutné se pro jistotu podívat do konfiguračního souboru php.ini (C:Windowsphp.ini, zda tam má parametr SMTP konkrétní adresu serveru. A rovněž ověřit parametr sendmail_from, zda má napsanou vaši elektronickou adresu, tedy jako odesilatele.
V Unix systémech je výhoda v tom, že odevzdání e-mailu probíhá standardně přímo na serveru implementací cesty: /usr/sbin/sendmail. I když je tedy funkce sendmail známá především na linuxových systémech, neměla by dělat problémy ani ve Windows. Aspoň ve verzi PHP 5.0 a vyšší běží bezproblémově. Funkce mail tudíž slouží k zasílání elektronické pošty od jednoho uživatele k jinému, na jedné doméně, či jinde na Internet. Skládá se z těchto částí:
• První parametr určuje KOMU má být zpráva odeslána.
• Druhý parametr je PŘEDMĚTEM zprávy.
• Na třetím místě v řadě (odděleno čárkou) je vlastní TĚLO ZPRÁVY.
• Čtvrtý je nepovinný parametr, zde se píší další řádky hlavičky zprávy.
• Pátý nepovinný parametr slouží pro program sendmail na odeslání pošty.
Základní syntaxe funkce mail, s níž se budeme setkávat, vypadá takto: mail (Komu, předmět, vlastní text zprávy);
Po odeslání e-mailu se stránka přesměruje zpět pomocí funkce header na formulář a přidá proměnou která je podmínkou pro zobrazení potvrzovacího textu.
V praxi existuje jen několik hlaviček, které stojí za to si zapamatovat v souvislosti s PHP:
Location
Location se pokusí přemluvit prohlížeč, že by se měl poohlédnout jinde.
Content-disposition
je hlavička, která se pokusí přemluvit prohlížeč, aby to, co bude ve výstupu následovat, považoval za přílohu. Už jsme o ní mluvili.
<?
Header("Content-Description: File Transfer");
Header("Content-Type: application/force-download");
Header("Content-Disposition: attachment; filename="nazev.pripona"");
? >
Cache-control
Existuje sada hlaviček, které se pokusí přemluvit prohlížeč, aby se nebavil s proxy serverem, ale aby načetl vždy čerstvou kopii stránky ze serveru.
<?
Header("Pragma: no-cache");
Header("Cache-control: no-cache");
Header("Expires: ".GMDate("D, d m Y H:i:s")." GMT");
? >
WWW-Authenticate
je hlavička, která se pokusí vysvětlit prohlížeči, že by měl požadovat ověření uživatele pomocí jména a hesla. Ještě o ní budeme mluvit podrobněji, teď jen příklad:
<?
Header("HTTP/1.0 401 Unauthorized");
Header("WWW-Authenticate: Basic realm="oblast"");
? >
Hlavičky nejsou samospásné. Prohlížeče některým nerozumí, jiné se používají nenormalizovaně, další pozmění nebo nepochopí na cestě číhající proxy server, prostě bývá s nimi zábava. Ty, které jsem uvedl výše by v naprosté většině případů měly fungovat správně.
Tím by jsme měli i modul pro odeslání e-mailu a jako prozatím poslední modul bude modul na zobrazování novinek.
K nahlédnutí na http://ukazky.owebu.cz/diviweb
Login: admin
Heslo: root
Autor: Václav Dressler