Formular de feedback complex. Realizarea unui formular de feedback în PHP

Deci, să începem, în primul rând vom marca pagina și vom scrie stiluri pentru ea. Markup-ul va include un formular obișnuit de feedback cu două intrări (telefon, e-mail) și o zonă de text, unde, conform ideii noastre, utilizatorul își va introduce mesajul. Vom plasa gestionarea formularelor pe o pagină separată.

Formular de feedback

Introdu telefonul:

Emailul tău:

Întrebarea dumneavoastră:


Să scriem stilurile:

Html, body( înălțime: 100%; margine: 0; ) html( culoare de fundal: #fff; culoare: #333; font: 12px/14px Verdana, Tahoma, sans-serif; cursor: implicit; ) #feedback-form (culoare fundal: #ececec; margine: 50px auto 0; text-align: center; lățime: 430px; umplutură: 15px; ) #feedback-form h2( margin-bottom: 25px; ) #feedback-form input, #feedback -form textarea( culoarea fundalului: #fff; chenar: 1px solid #A9A9A9; padding: 1px 5px; lățime: 90%; ) #feedback-form input( înălțime: 26px; ) #feedback-form textarea( înălțime: 75px; padding-top: 5px; ) #feedback-form input( margin-top: 15px; fundal-culoare: #0B7BB5; chenar: 1px solid #CCCCCC; culoare: #FFFFFF; font-weight: bold; înălțime: 40px; line- înălțime: 40px;

În urma tuturor acestor acțiuni, veți obține acest formular:

Acum este timpul să abordăm serverul. Scenariul nostru va include mai multe părți:

  • Setare;
  • Funcții secundare;
  • Prelucrarea datelor primite;
  • Ieșire mesaj.

Toate aceste părți, desigur, sunt condiționate, deoarece nimeni nu ne împiedică să facem mizerie cu codul sau, dimpotrivă, să mutăm părți cheie în alte fișiere. Dar cred că este mai bine să faceți handlerul într-un singur fișier, astfel încât să fie convenabil să îl conectați la alte proiecte.

Setări

În această etapă, vom crea trei variabile: $my_email (căsuța poștală către care sunt trimise datele), $path_log (calea către fișierul jurnal) și $time_back (timpul în care utilizatorul revine pe site).

// Specificați căsuța dvs. poștală $my_email = " [email protected]"; // Specificați unde vor fi stocate jurnalele $path_log = "log.txt"; // Ora la care utilizatorul revine pe site (sec) $time_back = 3;

Funcții secundare

Aici descriem cinci funcții care vor simplifica prelucrarea datelor.

Șabloane de ieșire a mesajelor:

Funcția error_msg($mesaj)( $mesaj = "".$mesaj.""; returnează $mesaj; ) function success_msg($mesaj)( $mesaj = "".$mesaj.""; returnează $mesaj; )

Ștergerea datelor primite din formular:

Funcția clear_data($var)( return trim(strip_tags($var)); )

Trimitere scrisoare:

Funcția send_mail($email, $subj, $text, $from)( $headers = "De la: ".$de la." \r\n"; $headers .= "Versiune MIME: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=utf-8 \r\n" $result = mail($email, $text, $headers ) returneaza adevarat;

Și ultima funcție care va verifica telefonul și e-mailul pentru înregistrarea corectă a formatului lor.

Funcția check_format($date, $type)( switch($type)( case "email": $pattern = "/^*@(+(*+)*\.)++$/i"; if(preg_match( $pattern, $date))( return true; ) break case "telefon": $pattern = "/^(\+?\d+)?\s*(\(\d+\))?[\s-] *([\d-]*)$/"; if(preg_match($pattern, $date))( returnează adevărat; ) break; ) returnează fals; )

După cum puteți vedea, toate funcțiile pe care le-am scris sunt de dimensiuni mici. Le puteți lăsa în afara zonei de procesare a datelor, dar când trebuie să modificați sau să extindeți ceva, de exemplu check_format(), va fi mult mai simplu și mai convenabil.

Prelucrarea datelor primite

În primul rând, aflăm de pe ce pagină a venit utilizatorul. Apoi definim variabilele în care vor fi stocate mesajele noastre și starea de trimitere a scrisorii.

// Aflați pagina anterioară $prev_page = $_SERVER["HTTP_REFERER"]; // Mesajele noastre $msg = ""; // Stare e-mail $status_email = "";

Acum, pentru a evita problemele cu codificarea, o indicăm folosind antetul.

Antet ("Content-Type: text/html; charset=utf-8");

If($_SERVER["REQUEST_METHOD"] == "POST")( if(isset($_POST["număr"], $_POST["e-mail"], $_POST["întrebare"]))( $number = clear_data ($_POST["număr"]); $email = clear_data($_POST["email"]); $question = clear_data($_POST["întrebare"]); check_format($email, "email") && !empty($question))( // Formează o scrisoare $e_title = "Mesaj nou"; $e_body = ""; $e_body .= ""; $e_body .= "Телефон: ".$number; $e_body .= "!}
"; $e_body .= "E-mail: ".$email; $e_body .= "
"; $e_body .= "Întrebare: ".$question; $e_body .= ""; $e_body .= ""; // END Formează o scrisoare if(send_mail($my_email, $e_title, $e_body, $prev_page) ) ( $status_email = "succes"; $msg = success_msg ("Vă mulțumim pentru întrebare.
Vă vom răspunde cât mai curând posibil."); )else( $status_email = "eroare"; $msg = error_msg ("A apărut o eroare la trimiterea e-mailului."); ) // Scrieți în fișierul $str = " Ora: ".date ("d-m-Y G:i:s")."\n\r"; $str .= "Telefon: ".$număr."\n\r"; $str .= "Poștă: " .$email." \n\r"; $str .= "Întrebare: ".$întrebare."\n\r" $str .= "E-mail: ".$status_email."\n\r"; str .= "= ====================================\n\r”; ($path_log, $str, FILE_APPEND); )else( $msg = error_msg( "Completați formularul corect!"); ) )else( $msg = error_msg("A apărut o eroare!"); )else( exit ;

În codul scris, determinăm dacă formularul a fost depus, altfel închidem acest fișier folosind funcția de ieșire. Apoi, verificăm prezența celulelor cu datele noastre în matricea POST, dacă au sosit, le curățăm de posibile deșeuri. După curățare, verificăm formatele de e-mail și telefon, precum și prezența textului în variabila întrebare. În continuare, generăm o scrisoare, o trimitem și scriem jurnalele, unde, pe lângă date, salvăm și starea de trimitere a scrisorii. Astfel putem urmări funcționarea funcției mail() și în același timp nu pierdem date.

Ieșire mesaj

Tot ce trebuie să facem este să anunțăm utilizatorul despre o operațiune finalizată cu succes sau „nu așa” și să-l returnăm înapoi pe site cu formularul. Pentru a face acest lucru, folosim markup cu incluziuni de script PHP.

Pentru a redirecționa utilizatorul înapoi pe site, vom folosi metaeticheta refresh, unde inserăm cod PHP cu variabilele deja create. De asemenea, va trebui să folosim puțin JavaScript pentru a face pagina puțin mai dinamică. Scriem o funcție timeBack(), care va număra secundele în ordine inversă înainte de redirecționare.