E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

Formular de contact in PHP

15.06.2010
Formular de contact in PHP

Majoritatea site-urilor au o pagina de contact cu un formular care poate trimite un e-mail administratorului. In acest tutorial va voi arata cum sa creati un formular de contact simplu folosind functia mail() din PHP.

Total vizualizari: 19377 19377 afisari   |   Comentarii  10   |   Rating   |   (9 voturi)   |   Timp necesar: 25 min 25 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Autor: mozzartut Expert
Download
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

Ce este formularul de contact?

De regula, paginile web detin pe langa sectiunile cu un continut specific si o pagina de contact cu datele de contact ale firmei si un formular de contact pentru a livra rapid mesaje. Un astfel de formular se poate crea relativ usor folosind functia mail() din PHP.

Iata cum va arata formularul pe care il vom defini in continuare:

  Formular de contact simplu
Nume:
Email:
Subiect:
Mesaj:

Pentru inceput, vom scrie codul HTML ce va afisa formularul respectiv:

<table width="400" border="0" cellpadding="2" cellspacing="2">
    <tr>
        <th width="70">&nbsp;</td>
        <th>Formular de contact simplu<hr/></td>
    </tr>
    <form name="formular" method="post" action="<?php echo $PHP_SELF; ?>">
    <tr>
        <td class="label">Nume:</td>
        <td><input type="text" name="nume" value="<?php echo $_POST['nume']; ?>"> <?php echo $verifica1; ?></td>
    </tr>
    <tr>
        <td class="label">Email:</td>
        <td><input type="text" name="email" value="<?php echo $_POST['email']; ?>"> <?php echo $verifica2; ?></td>
    </tr>
    <tr>
        <td class="label">Subiect:</td>
        <td><input type="text" name="subiect" value="<?php echo $_POST['subiect']; ?>"> <?php echo $verifica3; ?></td>
    </tr>
    <tr>
        <td class="label">Mesaj:</td>
        <td><textarea rows="4" cols="30" name="mesaj"><?php echo $_POST['mesaj']; ?></textarea><?php echo $verifica4; ?></td>
    </tr>
    <tr>
        <td class="label"></td>
        <td><input type="submit" name="trimite" value="Trimite" class="buton"></td>
    </tr>
    </form>
</table>

Copiaza codul HTML si salveaza-l intr-un fisier contact.php. Ceea ce trebuie sa retii este ca acest cod creeaza trei casute de tip input in care utilizatorul va introduce numele, adresa de email si subiectul mesajului si o casuta de tip textarea in care utilizatorul va scrie continutul mesajului. Linia <input type="submit" name="trimite" value="Trimite" class="buton"> defineste un buton care, la apasare, va trimite formularul cu toate datele completate catre fisierul specificat prin atributul action al tag-ului <form> (in acest caz fisierul curent dat de variabila globala $PHP_SELF).

Pentru a nu obliga utilizatorul sa completeze din nou campurile in cazul unei erori, vom folosi functia echo in interiorul atributului value al input-urilor si in interiorul campului textarea. De exemplu, atributul value din campul nume va fi completat astfel:

value="<? echo $_POST['nume'];

Aceste valori sunt necesare deoarece validarea datelor este facuta in php, dupa transmiterea formularului; ele pot lipsi daca verificarea se face inainte de submit, cu javascript.

Validarea datelor

In continuare vom prelua datele transmise de formularul html si le vom verifica. In acelasi fisier (contact.php), scrie codul de mai jos:

<?php
// Daca este activat butonul de submit
if (isset($_POST['trimite'])) {
 
    // Citim din formular numele utilizatorului
    $nume = $_POST['nume'];
    
    // Citim din formular subiectul mesajului trimis
    $subiect = $_POST['subiect'];
    
    // Citim din formular mesajul
    $mesaj = $_POST['mesaj'];
    
    // Citim din formular adresa de email a vizitatorului
    $email = $_POST['email'];
    
    // Definim o variabila in care retinem adresa de email a administratorului
    $to ='admin@domeniu.com';
}
?>

Pentru inceput, am verificat daca butonul de submit a fost apasat, apoi am preluat din formular informatiile cu privire la utilizator (nume / email / subiect) si mesajul acestuia. In final, am creat o variabila cu adresa de email a administratorului ce va primi toate mesajele (aceasta va fi inlocuita de fiecare cu adresa corecta).

Tot in cadrul instructiunii conditionale ce verifica apasarea butonului (if (isset($_POST['trimite']))) facem si validarea datelor. Fiecarui camp din formularul de contact ii este atribuita o variabila. Inainte de a trimite mesajul verificam daca fiecare din aceste variabile este completata, apoi ,in dreptul fiecarui camp din formular, afisam o imagine de succes sau eroare, in functie de caz. Imaginile sunt stocate in variabilele $verifica1, $verifica2, $verifica3 si $verifica4, afisate cu ajutorul functiei echo, astfel: <? echo $verifica1; ?>.

<?php
if($_POST['nume'] != ""){
    $verifica1 = "<img src='images/ok.png' width='20px'>";
} else{
    $verifica1 = "<img src='eroare.png' width='20px'>";
}
 
if($_POST['email'] != ""){
    $verifica2 = "<img src='images/ok.png' width='20px'>";
}
else{
    $verifica2 = "<img src='eroare.png' width='20px'>";
}
 
if($_POST['subiect'] != ""){
    $verifica3 = "<img src='images/ok.png' width='20px'>";
}
else{
    $verifica3 = "<img src='eroare.png' width='20px'>";
}
 
if($_POST['mesaj'] != ""){
    $verifica4 = "<img src='images/ok.png' width='20px'>";
}
else{
    $verifica4 = "<img src='eroare.png' width='20px'>";
}
?>

Trimiterea mesajului

Daca toate campurile sunt completate, trimitem mesajul catre adresa de email a administratorului.

<?php 
if($_POST['nume'] != "" && $_POST['email'] != "" && $_POST['subiect'] != "" && $_POST['mesaj'] != ""){
    
    $header = "From: $nume <$email>";
    
    $send = mail($to,$subiect,$mesaj,$header);
    if ($send){
        echo "<div class='notificare'>$verifica4 Mesajul tau a fost trimis. </div>";
    } else {
        echo "Mesajul nu a putut fi trimis din cauza unei erori.";
    }
}
?>

Sirul de caractere from: $nume <$email> ne ajuta sa specificam numele si adresa de email a expeditorului. Functia mail() accepta mai multe tipuri de headere, cum ar fi adresa CC, adresa de reply, formatul mesajului (html sau text), etc. Iata un exemplu:

<?php
// Pentru a trimite un mesaj in format HTML, trebuie sa specificam Content-type
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
// Headere aditionale
$header .= 'To: Nume destinatar 1 <destinatar1@exemplu.com>, Nume destinatar 2 <destinatar2@exemplu.com>' . "\r\n";
$header .= 'From: Nume expeditor <expeditor@exemplu.com>' . "\r\n";
$header .= 'Cc: adresa_cc@exemplu.com' . "\r\n";
$header .= 'Bcc: adresa_bcc@exemplu.com' . "\r\n";
?>

Retine ca functia mail() intoarce valoarea 1 in caz de succes si 0 daca a survenit o eroare la transmiterea mesajului.

Pentru a descarca sursele, inclusiv fisierul .css, acceseaza linkul Download din partea de sus a paginii.

Pagina:
1
comenteaza printeaza

Cuvinte cheie:   php,   mail,   formular,   contact,   html,   post,   isset

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(9 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (10) spune-ti parerea
nic , Vineri, 11 Aprilie 2014, ora 23:59
#10

sal
conform scriptului in php formular nu trimite mesajul la adresa de email a administratorului

Raporteaza acest comentariu ca injurios!
ioan489 ioan489 , Vineri, 03 Mai 2013, ora 10:39
#9

Simplu, dar e ok tutorialu...brovo.Poti face formulare mai avansate care sa trimite datele la adresa ta de email, sau sa le introduca in baza de date.

Raporteaza acest comentariu ca injurios!
haisancosmin , Joi, 02 Februarie 2012, ora 12:59
#8

ms mult pt ajutor!

Raporteaza acest comentariu ca injurios!
alexm , Luni, 29 Noiembrie 2010, ora 01:26
#7

Acest tutorial este foarte folositor pentru scopuri de invatare, dar NU este recomandat sa fie folosit pe site-uri pentru ca este prea simplu si NU este protejat impotriva atacurilor facute de spameri ( de ex. injection attack )


Asa ca nu faceti copy paste la cod in site-ul vostru, ca puteti avea surpriza ca TONE de spam sa fie trimise de pe serverele voastre, si sa va treziti cu contul de hosting suspendat sau banat.


Cum e posibil asa ceva, foarte simplu.


Codul de mai sus, si anume


$header = "From: $nume <$email>";



$send = mail($to,$subiect,$mesaj,$header);


este vulnerabil pentru ca NU SE VERIFICA ce anume a introdus utilizatorul in $email; .


Daca utilizatorul introduce de exemplu, in camul Email un text de genul


adresa1@domeniu1.comrnCc: , , , , , , , , , , si inca un sir lung de adrese de email


Emailul trimis de formular va contine o linie noua dupa linia cu From: , si pe linia noua CC: cu o lunga lista de adrese care vor primii emailul trimis prin formularul dvs!


Practic, utilizatorul va baga spam-ul in formularul dvs, si lista lunga de emailuri la care vrea sa fie trimis spamul in loc de adresa lui de email, cu rn in fata.


Datele de intrare trebuie verificate sa nu contina atacuri si daca trebuie afisate mesaje de eroae.


Sunt programator la www.formulareonline.com ( un site unde se pot face formulare online gratuit ) si pot sa spun ca formularele de contact trebuie sa fie foarte bine protejate ca sa nu transforme serverul dvs intr-un relay de spam

Raporteaza acest comentariu ca injurios!
mozzartut mozzartut , Sambata, 04 Septembrie 2010, ora 15:55
#6

@az00t

salvezi o poza cu textul (ex: elearn.ro)
adaugi o casuta text in formular (name = captcha)

verifici daca textul din casuta este egal cu cel din imagine
if $captcha == elearn.ro
COD VALID
else
COD GRESIT

Raporteaza acest comentariu ca injurios!
az00t , Miercuri, 25 August 2010, ora 18:14
#5

daca mai citeste cineva acest articol:)
Cum pot adauga si un cod captcha
Formularul este bun dar daca cineva se apuca sa ma spameze ......:)
Plus ca daca se da un refresh mailul este retrimis

Raporteaza acest comentariu ca injurios!
alext_1020 alext_1020 , Luni, 26 Iulie 2010, ora 22:37
#4

Specialistii in PHP si-au unit fortele... super tare. Chiar aveam nevoie de un formular de acest gen...

Raporteaza acest comentariu ca injurios!
alexandra alexandra , Joi, 17 Iunie 2010, ora 11:21
#3

@varcolac100 - Tutorialul are si sursa, nu este nevoie sa dai copy-paste (vezi linkul Download de sub descriere, langa numele autorului)

Raporteaza acest comentariu ca injurios!
alexandra alexandra , Joi, 17 Iunie 2010, ora 11:18
#2

Pentru cei care vor sa foloseasca acest tip de formular: este posibil sa apara o problema daca la header-ul From puneti adresa de e-mail a utilizatorului, pentru ca de multe ori un mesaj de la o adresa necunoscuta este trimis in spam. In schimb, puteti folosi la From ceva de genul "admin@domeniu.ro", incluzand numele si adresa utilizatorului in corpul mesajului.

Raporteaza acest comentariu ca injurios!
varcolac1000 varcolac1000 , Miercuri, 16 Iunie 2010, ora 13:34
#1

m-a ajutat foarte mult, in loc sa mai scriu eu atat dau copy

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4170
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4080
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4055
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
3870
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Word Vista JSON Lightroom PSD Gimp Sony Vegas Javascript RoR SWF Flash Excel SEO Fireworks Fotografie MySQL Bridge Verilog XHTML Illustrator Ruby on Rails CSS PHP COREL DRAW AJAX Outlook StyleSheet Photoshop HTML XML Python Powerpoint Swift 3D Action Script Java Dreamweaver
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software