Crearea unui formular de contact Bootstrap folosind PHP și AJAX. Scripturi PHP pentru procesarea formularelor HTML
Una dintre cele mai frecvente sarcini în practică este implementarea unui formular de feedback. Tobish își scrie codul HTML, îl proiectează în CSS, creează un script PHP care să proceseze datele primite de la utilizator și să le trimită către e-mailul nostru, scriind un script JS care să verifice formularul pentru adecvarea datelor de intrare, protejându-ne. descendenți din spam, astfel încât cutia poștală să nu se prăbușească din cauza atacurilor bot.
Toate punctele de mai sus vor fi luate în considerare în recenzia noastră și comentate în detaliu.
Deci, să începem să creăm un formular de feedback:
HTML
În primul rând, scriem cod HTML, acesta stabilește câmpurile pe care utilizatorul le va completa. Ele vor fi dezvoltate în viitor. Codul formularului arată astfel:
< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >Nume: label> < input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >Telefon: label> < input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >E-mail: label> < input maxlength= "30" type= "text" name= "mail" /> div> < div class = "right" > < label for = "message" >Mesaj: label> < textarea rows= "7" cols= "50" name= "message" > textarea> < input type= "submit" value= "trimite" /> div> form>
Și vizual arată așa acum:
Sunt de acord, până acum totul este urât și nimic clar, dar tocmai am început.
Luați în considerare codul de mai sus în detaliu:
< form method= "post" action= "mail.php" > … form>
Pentru a crea un formular, trebuie să utilizați eticheta de formular. El este cel care determină începutul și sfârșitul formei pentru interpretul de cod. Ea, ca orice etichetă, are un set întreg de atribute, dar sunt necesare doar două pentru ca formularul să funcționeze, acestea sunt metoda (metoda de trimitere a unei cereri către server, postarea este utilizată în mod standard pentru formulare) și acțiune (indică calea către fișierul de gestionare a formularelor, și anume în acest fișier va conține un script PHP, care ne va trimite apoi valorile introduse de utilizator prin poștă, în cazul nostru vedem că acest fișier se numește mail.php și acesta se află în același director de site ca pagina pe care o luăm în considerare).< input maxlength= "30" type= "text" name= "name" />
În continuare avem intrări. Acestea sunt de fapt câmpurile de formular în care utilizatorii vor introduce informațiile de care avem nevoie (tip = „text” indică faptul că va fi text). Atributul maxlength specifică câte caractere poate introduce utilizatorul în câmpul de formular dat. Cel mai important atribut este numele - specifică numele unui anumit câmp. Prin aceste nume scriptul PHP va procesa în continuare informațiile care vin în el. Dacă doriți, puteți seta și atributul substituent, care afișează text în interiorul câmpului care dispare când cursorul este plasat în interiorul acestuia. O problemă cu substituentul este că nu este acceptat de unele browsere mai vechi.< label for = "name" >Nume: label>
Folosit dacă avem substituenți abandonați. Eticheta obișnuită de câmp, atributul for indică la ce câmp se referă eticheta dată. Valoarea indică numele câmpului care ne interesează.< textarea rows= "7" cols= "50" name= "message" > textarea>
La fel ca și intrarea, este destinat ca utilizatorul să introducă informații, doar că de această dată câmpul este ascuțit pentru mesaje lungi. Rânduri specifică dimensiunea câmpului în linii, cols în caractere. În general, ei stabilesc înălțimea și lățimea câmpului nostru.< input type= "submit" value= "trimite" />
Type="submit" ne spune că acesta este un buton pentru trimiterea formularului, iar value specifică textul care va fi în interiorul acestui buton.< div class = "right" > div>
folosit numai pentru proiectarea vizuală ulterioară a formularului.
css
Pentru ca formularul nostru de feedback să pară prezentabil, trebuie să fie proiectat. Pentru a obține următorul rezultat:
Am folosit acest cod:
formular ( fundal: #f4f5f7; umplutură: 20px; ) formular . stânga, formă. dreapta (afișare: bloc inline; aliniere verticală: sus; lățime: 458px; ) form . dreapta ( padding- stânga: 20px; ) etichetă ( afișare: bloc; dimensiunea fontului: 18px; text- aliniere: centru; margine: 10px 0px 0px 0px; ) intrare, textarea ( chenar: 1px solid #82858D; padding: 10px; dimensiunea fontului: 16px; lățime: 436px; ) zona text (înălțime: 98px; marginea inferioară: 32px; ) input[ type= "submit" ] ( lățime: 200px; float: dreapta; chenar: niciunul; fundal: #595B5F; culoare: #fff; text-transform: majuscule; )
Nu văd rostul în a descrie CSS în detaliu, vă voi atrage atenția doar asupra punctelor cheie:
- Nu este necesar să scrieți un design pentru fiecare etichetă din formular. Încercați să vă construiți selectoarele în așa fel încât să puteți stila toate elementele de care aveți nevoie în câteva linii de cod.
- Nu utilizați etichete suplimentare după tip pentru a întrerupe linii și a crea indentări < br>, < p> și așa mai departe, aceste sarcini sunt gestionate perfect de CSS cu afișarea proprietăților: bloc și margine cu padding. Mai multe despre de ce nu ar trebui să utilizați < br> în aspect, în general, puteți citi eticheta br din articol, dar este cu adevărat nevoie? .
- Nu utilizați aspectul tabelar pentru formulare. Acest lucru este împotriva semanticii acestei etichete, iar motoarele de căutare adoră codul semantic. Pentru a forma structura vizuală a documentului, etichetele div sunt suficiente pentru noi, iar afișarea: proprietățile inline-block stabilite în CSS (aranjează blocurile pe rând) și vertical-align: top (nu le permite să se împrăștie peste tot). ecran), le setăm înălțimea necesară și voilà, nimic de prisos și totul este aranjat așa cum avem nevoie.
Pentru cei care doresc să-și economisească timp la designul site-urilor, vă pot sfătui să utilizați framework-uri CSS atunci când creați site-uri, în special cele scrise de sine. Alegerea mea în acest sens este Twitter Bootstrap. Poate fi vizualizată o lecție despre proiectarea formularelor folosindu-l.
PHP
Ei bine, este timpul să ne facem forma funcțională.
Mergem în directorul nostru rădăcină al site-ului și creăm acolo fișierul mail.php, căruia i-am specificat anterior calea în atributul action al etichetei form.
În cele din urmă, codul său va arăta astfel:
Numărul lui: " . $telefon ."
Poșta lui: „ . $mail . "
Mesajul lui: „. $mesaj , ) ; ecou "Mesajul tau a fost trimis cu succes!
Veți primi un răspuns în scurt timp
$back"; Ieșire; ) else ( ecou ; ieșire ; ) ?>
Puteți sări peste discuția despre părțile HTML și CSS ale acestui document. În esență, aceasta este o pagină obișnuită a site-ului, pe care o puteți proiecta după cum doriți și aveți nevoie. Să luăm în considerare cea mai importantă parte a acesteia - scriptul PHP pentru procesarea formularului:
$back = "
\" javascript: history.back()\" >Înapoi
" ;Cu această linie creăm un link pentru a reveni la pagina anterioară. Deoarece nu știm dinainte de pe ce pagină va ajunge utilizatorul la aceasta, acest lucru se face folosind o funcție JS mică. În viitor, ne vom referi pur și simplu la această variabilă pentru a o afișa în locurile de care avem nevoie.
dacă (! gol ($_POST [ „nume” ] ) și ! gol ($_POST [ „telefon” ] ) și ! gol ($_POST [ „mail” ] ) și ! gol ($_POST [ „mesaj” ] ) ) ( // partea internă a handler-ului) altfel ( ecou „Vă rugăm să completați toate câmpurile pentru a trimite un mesaj! $back”; Ieșire; )
Aici fixăm verificarea formularului pentru plenitudinea câmpurilor. După cum ați ghicit, în partea $_POST["nume"] scriem valoarea atributului nume al intrărilor noastre între ghilimele.
Dacă toate câmpurile sunt completate, atunci scriptul va începe procesarea datelor în partea sa internă, dar dacă cel puțin un câmp nu a fost completat, atunci pe ecranul utilizatorului va fi afișat un mesaj cu o solicitare de completare a tuturor câmpurilor. din formularul ecou "Pentru a trimite un mesaj, completați toate câmpurile! $back" și un link pentru a reveni la pagina anterioară pe care am creat-o chiar de la prima linie.
Apoi, lipiți-l în interiorul handler-ului de formulare:
$nume = trim (strip_tags ($_POST [ "nume" ] ) ) ); $phone = trim (strip_tags ($_POST [ "telefon" ] ) ); $mail = trim (strip_tags ($_POST [ "mail" ] ) ); $message = trim (strip_tags ($_POST [ "mesaj" ] ) ) );
Astfel, am șters introducerea utilizatorului din etichetele html și spațiile suplimentare. Acest lucru ne permite să ne protejăm împotriva primirii de coduri rău intenționate în mesajele trimise către noi.
Verificările pot fi complicate, dar depinde de tine. Am stabilit deja protecția minimă pe partea serverului. Vom face restul din partea clientului folosind JS.
Nu recomand abandonarea completă a protecției formularelor pe partea de server în favoarea JS, deoarece, deși este extrem de rar, există persoane unice cu JS dezactivat în browser.
După curățarea etichetelor, adăugați mesajul care trimite:
Poștă ( „[email protected]”,
„E-mail de la adresa_site-ului dvs.”, "V-am scris: " . $nume . "
Numărul lui: " . $telefon ."
Poșta lui: „ . $mail . "
Mesajul lui: „. $mesaj , „Content-type:text/html;charset=windows-1251”)
;
Această linie este angajată în formarea și transmiterea unui mesaj către noi. Se completează după cum urmează:
- „[email protected]” - introduceți e-mailul dvs. între ghilimele aici
- „Email from your_site_address” este subiectul mesajului care va fi trimis pe e-mail. Aici poți scrie orice.
- „Ți-am scris: „.$name”. < br /> Numărul lui este: „.$telefon”. < br /> Poșta lui: „.$mail”. < br /> Mesajul acestuia este: ".$mesaj - formăm textul mesajului propriu-zis. $nume - introducem informațiile completate de utilizator accesând câmpurile de la pasul anterior, în ghilimele descriem ce înseamnă acest câmp, cu etichetă < br /> facem o întrerupere de linie, astfel încât mesajul în ansamblu să fie lizibil.
- Content-type:text/html;charset=windows-1251 - la sfârșit există o indicație explicită a tipului de date transmis în mesaj și codificarea acestuia.
IMPORTANT!
Codificarea specificată în „capul” documentului ( < meta http- equiv= "Content-Type" content= „text/html; charset=windows-1251” /> ), codificarea din mesajul Content-type:text/html;charset=windows-1251 și în general codificarea fișierului PHP trebuie să se potrivească, altfel în mesajele primite prin poștă, în loc de litere rusești sau engleze, „cuvinte nebunești”. ” va fi afișat.
Mulți oameni nu indică în mod explicit codificarea mesajului trimis, dar acest lucru poate cauza probleme în viitor la unii clienți de e-mail (în poștă sosesc scrisori care nu pot fi citite), așa că vă recomand să o specificați oricum.
Verificarea formularului pentru caracterul adecvat al datelor de intrare
Pentru ca utilizatorii să nu rateze din neatenție câmpurile și să completeze totul corect, merită să verificați datele de intrare.
Acest lucru se poate face atât în PHP pe partea de server, cât și în JS pe partea client. Folosesc a doua variantă, deoarece astfel o persoană poate afla imediat ce a greșit și poate corecta greșeala fără a face tranziții suplimentare de pagină.
Codul de script este inserat în același fișier în care avem partea HTML a formularului. Pentru cazul nostru, va arăta astfel:
< script>function checkForm(form) ( var name = form. name. value; var n = name. match(/ ^[ A- Za- zA- Za-z] * [ A- Za- zA- Za-z] + $/ ); dacă (! n) ( alertă( „Numele a fost introdus incorect, vă rugăm să corectați eroarea”) ; return false; ) var phone = form. telefon. valoare; var p = telefon. potrivire(/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ) ; dacă (! p) ( alertă( „Telefonul a fost introdus incorect”) ; return false; ) var mail = formular. Poștă. valoare; var m = mail . meci(/ ^[ A- Za- z0- 9 ] [ A- Za- z0- 9 \. _- ] * [ A- Za- z0- 9 _] *@ ([ A- Za- z0- 9 ] + ([ A- Za- z0- 9 - ] * [ A- Za- z0- 9 ] + ) * \. ) + [ A- Za- z] + $/ ) ; dacă (! m) ( alertă( „E-mailul introdus este incorect, vă rugăm să corectați eroarea”) ; return false; ) returnează adevărat; )
Ei bine, acum analiza obișnuită:
Pentru asta, astfel incat atunci cand dai click pe butonul de trimitere al formularului, il avem validat agățăm lansarea scriptului nostru pe eticheta de formular:
< form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >
Acum, punct cu punct, luăm compoziția cecului:
După cum puteți vedea, un astfel de mini cec este scris pentru fiecare dintre câmpurile noastre. Am evidențiat verificarea pentru un câmp din captura de ecran cu un pătrat roșu, pentru alte câmpuri are o structură similară, iar dacă trebuie să adăugați un câmp sau să-l eliminați, acum o puteți face cu ușurință.
Acest articol detaliază utilizarea variabilei PHP _SELF.
Ce este variabila PHP _SELF?
Variabila _SELF PHP returnează numele și calea fișierului curent (relativ cu rădăcina documentului). Puteți utiliza această variabilă în atributul de acțiune al formularului. Există, de asemenea, câteva nuanțe de care ar trebui să fii conștient. Desigur, nu putem ignora aceste nuanțe.
Să ne uităm la câteva exemple.
echo $_SERVER["PHP_SELF"];
1) Să presupunem că fișierul dvs. php se află la următoarea adresă:
http://www.yourserver.com/form-action.php
În acest caz, variabila PHP _SELF ar conține:
„/form-action.php”
2) Să presupunem că fișierul dvs. php se află la această adresă:
http://www.yourserver.com/dir1/form-action.php
PHP _SELF va fi:
„/dir1/form-action.php”
PHP _SELF în atributul de acțiune al formularului. De ce era ea acolo?
În mod obișnuit, variabila PHP _SELF este utilizată în atributul de acțiune al etichetei formular. Atributul acțiune specifică adresa la care va fi trimis conținutul formularului după confirmare (utilizatorul face clic pe butonul cu tip="submit"). De regulă, aceasta este aceeași pagină din care a plecat formularul.
Cu toate acestea, dacă redenumiți fișierul la care face referire formularul, va trebui să redenumiți numele fișierului în atributul acțiune, altfel formularul nu va funcționa.
Variabila PHP _SELF vă va scuti de corecții inutile, deoarece adresa paginii va fi generată automat pe baza numelui fișierului.
Să presupunem că aveți un fișier form-action.php și doriți ca formularul să fie trimis în același fișier după ce l-ați trimis. De obicei scris astfel:
Codul din partea de sus a paginii HTML va fi executat mai întâi. Prima linie de cod verifică dacă formularul a fost trimis sau nu. Dacă $_POST["submit"] există, atunci constructul IF este executat (TRUE) și va fi afișat numele introdus de utilizator.
Dacă variabila $_POST["submit"] nu există, atunci formularul nu a fost trimis și, în consecință, constructul IF nu va fi executat (FALSE). Prin urmare, numele de utilizator nu va fi afișat.
Puncte nedorite legate de variabila PHP _SELF
Variabila _SELF PHP este folosită pentru a obține numele și calea fișierului curent - bine, dar poate fi folosită și de hackeri - rău. Dacă pagina dvs. are PHP _SELF, utilizatorul poate introduce o bară oblică (/) și poate scrie scripturi XXS rău intenționate.
Luați în considerare un exemplu:
Puteți vedea singur că eticheta de script și comanda de alertă au fost adăugate la cod. Când această pagină este încărcată, utilizatorul va vedea o fereastră de avertizare. Acesta este un exemplu simplu despre cum poate fi exploatată variabila PHP _SELF.
Orice cod JavaScript poate fi adăugat între etichetele de script. Hackerul se poate conecta și la un fișier JavaScript care va fi găzduit pe un alt server. Este posibil ca acest fișier să conțină cod rău intenționat prin care un hacker poate modifica variabilele globale și poate redirecționa formularul către o altă adresă pentru a intercepta intrarea utilizatorului.
Cum să evitați problemele cu PHP _SELF
Problemele pot fi evitate folosind funcția htmlentities(). Aruncă o privire la codul formularului în care este prezentă funcția htmlentities().