Takže, začneme, nejprve si stránku označíme a napíšeme pro ni styly. Součástí označení bude běžný formulář zpětné vazby se dvěma vstupy (telefon, mail) a jednou textovou oblastí, kam podle naší představy uživatel zadá svou zprávu. Obsluhu formuláře umístíme na samostatnou stránku.
Formulář zpětné vazby
Zadejte telefon:
Tvůj mail:
Tvá otázka:
Napíšeme styly:
Html, tělo( výška: 100 %; okraj: 0; ) html( barva pozadí: #fff; barva: #333; písmo: 12px/14px Verdana, Tahoma, sans-serif; kurzor: výchozí; ) #feedback-form ( background-color: #ececec; margin: 50px auto 0; text-align: center; width: 430px; padding: 15px; ) #feedback-form h2( margin-bottom: 25px; ) #feedback-form input, #feedback -form textarea( background-color: #fff; border: 1px solid #A9A9A9; padding: 1px 5px; width: 90%; ) #feedback-form input( height: 26px; ) #feedback-form textarea( height: 75px; padding-top: 5px ) #feedback-form input( margin-top: 15px; background-color: #0B7BB5; border: 1px solid #CCCCCC; color: #FFFFFF; font-weight: bold; height: 40px; line- výška: 40px; text-transform: velká písmena: 225px;
V důsledku všech těchto akcí získáte tento formulář:
Nyní je čas řešit server. Náš skript bude obsahovat několik částí:
- Nastavení;
- Sekundární funkce;
- Zpracování příchozích dat;
- Výstup zprávy.
Všechny tyto části jsou samozřejmě podmíněné, protože nám nikdo nebrání v kódu udělat nepořádek nebo naopak klíčové části přesunout do jiných souborů. Ale myslím si, že je lepší vytvořit handler v jednom souboru, aby bylo vhodné jej připojit k dalším projektům.
NastaveníV této fázi vytvoříme tři proměnné: $my_email (schránka, do které se odesílají data), $path_log (cesta k souboru protokolu) a $time_back (čas, kdy se uživatel vrátí na web).
// Zadejte svou poštovní schránku $my_email = " [e-mail chráněný]"; // Určete, kde budou uloženy protokoly $path_log = "log.txt"; // Čas, kdy se uživatel vrátí na stránku (s) $time_back = 3;
Sekundární funkceZde popíšeme pět funkcí, které zjednoduší zpracování dat.
Šablony výstupu zpráv:
Function error_msg($message)( $message = "".$message.""; return $message; ) function success_msg($message)( $message = "".$message.""; return $message; )
Vymazání dat přijatých z formuláře:
Funkce clear_data($var)( return trim(strip_tags($var)); )
Odesílání dopisu:
Funkce send_mail($email, $subj, $text, $from)( $headers = "Od: ".$from." \r\n"; $headers .= "MIME verze: 1.0\r\n"; $headers .= "Typ obsahu: text/html; charset=utf-8 \r\n"; $result = mail($email, $subj, $text, $headers ) return true;
A poslední funkce, která zkontroluje telefon a poštu na správný záznam jejich formátu.
Funkce check_format($data, $type)( switch($type)( case "e-mail": $pattern = "/^*@(+(*+)*\.)++$/i"; if(preg_match( $vzor, $data))( return true; ) break; case "phone": $pattern = "/^(\+?\d+)?\s*(\(\d+\))?[\s-] *([\d-]*)$/"; if(preg_match($pattern, $data))( return true; ) break; ) return false; )
Jak vidíte, všechny funkce, které jsme napsali, mají malou velikost. Můžete je ponechat mimo oblast zpracování dat, ale když potřebujete něco změnit nebo rozšířit, například check_format(), bude to mnohem jednodušší a pohodlnější.
Zpracování příchozích datNejprve zjistíme, ze které stránky uživatel přišel. Poté definujeme proměnné, do kterých budou naše zprávy a stav odeslání dopisu uloženy.
// Zjistěte předchozí stránku $prev_page = $_SERVER["HTTP_REFERER"]; // Naše zprávy $msg = ""; // Stav e-mailu $status_email = "";
Nyní, abychom se vyhnuli problémům s kódováním, jej označíme pomocí záhlaví.
Header("Content-Type: text/html; charset=utf-8");
If($_SERVER["REQUEST_METHOD"] == "POST")( if(isset($_POST["číslo"], $_POST["e-mail"], $_POST["question"]))( $number = clear_data ($_POST["číslo"] $email = clear_data($_POST["e-mail"]); $question = clear_data($_POST["dotaz"]); if(check_format($číslo, "telefon") &&); check_format($email, "email") && !empty($question))( // Vytvořit dopis $e_title = "Nová zpráva";
$e_body = "";
$e_body .= "";
$e_body .= "Телефон: ".$number;
$e_body .= "!}
"; $e_body .= "Mail: ".$email; $e_body .="
"; $e_body .= "Otázka: ".$question; $e_body .= ""; $e_body .= ""; // END Vytvořit dopis if(send_mail($my_email, $e_title, $e_body, $prev_page) ) ( $status_email = "úspěch"; $msg = success_msg("Děkujeme za vaši otázku.
Odpovíme vám co nejdříve."); )else( $status_email = "chyba"; $msg = error_msg("Při odesílání e-mailu došlo k chybě."); ) // Zapsat do souboru $str = " Čas: ".date ("d-m-Y G:i:s")."\n\r"; $str .= "Telefon: ".$číslo."\n\r"; $str .= "Mail: " .$email." \n\r"; $str .= "Otázka: ".$dotaz."\n\r"; $str .= "E-mail: ".$stav_e-mail."\n\r"; str .= "= ======================================\n\r"; ($path_log, $str, FILE_APPEND )else( $msg = error_msg( "Vyplňte formulář správně!"); ) )else( $msg = error_msg("Došlo k chybě!"); ) )else( exit); ;
V zapsaném kódu zjistíme, zda byl formulář odeslán, jinak tento soubor zavřeme pomocí funkce exit. Dále zkontrolujeme přítomnost buněk s našimi daty v poli POST, pokud dorazily, vyčistíme je od možného odpadu. Po vyčištění zkontrolujeme formáty pošty a telefonu a také přítomnost textu v proměnné dotaz. Dále dopis vygenerujeme, odešleme a sepíšeme logy, kde kromě dat uložíme stav odeslání dopisu. Můžeme tak sledovat chod funkce mail() a zároveň nepřijít o data.
Výstup zprávyJediné, co musíme udělat, je upozornit uživatele na úspěšnou nebo „ne“ dokončenou operaci a vrátit ho zpět na stránku s formulářem. K tomu používáme značkování s zahrnutím skriptů PHP.
Pro přesměrování uživatele zpět na stránky použijeme refresh meta tag, kam vložíme PHP kód s již vytvořenými proměnnými. Budeme také muset použít trochu JavaScriptu, aby byla stránka trochu dynamičtější. Napíšeme funkci timeBack(), která bude počítat sekundy v obráceném pořadí před přesměrováním.