Curs PHP-MySQL


Formular de contact

Download - Nr. descarcari - 1110          


Cu acest script, care foloseste PHP si Ajax, poate fi introdus intr-o pagina web, .php sau .html (inclusiv blog) un formular de contact simplu prin care vizitatorii pot trimite mesaje prin e-mail administratorului site-ului direct din pagina.
- Formularul e valid XHTML si are cod de verificare anti-spamm, iar cu tehnologia Ajax este evitata retrimiterea datelor la refresh.
Scriptul functioneaza si daca utilizatorul are dezactivat JavaScript. Iar ca protectie suplimentara anti-spamm si re-trimitere la refresh, scriptul PHP blocheaza utilizatorul sa trimita alt e-mail in urmatoarele 5 minute.
Pentru cei inteesati de invatarea PHP si Ajax, gasiti in documentatia din cod explicatii ajutatoare.

Acest script e format din 2 fisiere:

  • contact_mail.php - contine codul PHP pentru preluarea datelor si trimiterea mesajului la serverul de mail.
  • contact.js - codul JavaScript ce verifica completarea formularului si scriptul Ajax.
  • - precum si codul HTML pentru formularul de contact

- Mai jos gasiti codul pentru fiecare.

In pachetul ce poate fi descarcat de la link-ul Download (dreapta-sus) este o varianta imbunatatita a acestui script, prin faptul ca ofera in plus posibilitatea de trimitere a mesajului si printr-un cont de GMail, avand integrat clasa PHPMailer. Util cand site-ul este gazduit pe un host ce nu ofera si server propriu de mail, sau nu functioneaza bine.

Ca exemplu de test, formularul arata astfel (acesta nu trimite nici un mesaj):

Trimiteti mesaj

Numele dv.:              
Adresa dv. de e-mail:
Subiect:      
Scrieti mesajul: (maxim 500 caractere)

Mod de implementare

Creati cele 2 fisiere: "contact_mail.php" si "contact.js" (in acelasi loc unde aveti fisierul in care doriti sa includeti acest script) si adaugati in ele codul pentru fiecare, prezentat mai jos.
- Sau puteti descarca scriptul de la link-ul Download, unde veti gasi si o pagina test.
Dupa ce aveti cele 2 fisiere pe server, adaugati in pagina site-ului (.php sau .html) codul HTML pentru formular, asa cum e mai jos.

Cod - contact_mail.php

<?php
session_start();
// http://www.marplo.net

$to = 'adresa_dv@de.mail';		// Aici inlocuiti cu adresa de e-mail unde va fi trimis mesajul

// Verifica sesiune ce limiteaza trimiterea de cel mult un mail la 5 minute (300 secunde), utila si anti-refresh
if(isset($_SESSION['limit_contact']) && $_SESSION['limit_contact']>(time()-300)) {
  echo 'Se poate trimite cel mult un mesal la 5 minute.<br />Mai asteptati '.($_SESSION['limit_contact']-time()+300).' secunde';
  exit;
}

// Verifica daca e primit si corect codul de verificare (in caz ca trece de scriptul JavaScript)
if(isset($_POST['anti_spam']) && isset($_POST['anti_spam1']) && $_POST['anti_spam']==$_POST['anti_spam1']) {
  // Verifica dacca sunt primite prin post toate datele necesare
  if (isset($_POST['nume']) && isset($_POST['email']) && isset($_POST['subiect']) && isset($_POST['mesaj'])) {
    $_POST = array_map("trim", $_POST);			// Sterge posibile spatii exterioare din date
	$_POST = array_map("strip_tags", $_POST);		// Elimina cu "strip_tags()" posibile taguri

    // Preia datele din formularul HTML
    $nume = $_POST['nume'];
    $from = 'From: '. $_POST['email'];
	$subiect = $_POST['subiect'];
    $mesaj = $_POST['mesaj'];
    $body = 'E-mail de pe site, trimis de: '.$nume. "\n Adresa lui /ei de e-mail: ". $email. "\n\n"
		  .'Mesaj: '.$mesaj;

    // Trimite datele pt. email si afiseaza mesajul de confirmare sau eroare
    if (mail($to, $subiect, $body, $from)) {
	  // Seteaza o sesiune prin care se blocheaza re-trimiterea mesajului la un eventual refresh sau mai curand de 5 minute
	  $_SESSION['limit_contact'] = time();

      $re = '<p>Stimate/a <b>'.$name.'</b>, mesajul dv. a fost trimis cu succes, veti primi raspuns cat mai curand.</p>
      <p>Va multumim pentru interesul acordat.</p>
              <p>Daca doriti, vizitati: <a href="http://www.marplo.net">MarPlo.net</a></p>';
    }
    else $re = 'Eroare: Serverul nu a putut expedia mesajul prin e-mail';
  }
  else $re = 'Eroare: Campuri de formular netransmise.';
}
else $re = 'Eroare: Cod de verificare incorect';

echo $re;
?>

Cod - contact.js

// http://www.marplo.net
// Functia care formeaza codul anti-spam, dintr-un numar preluat ca milisecunde din data curenta
function set_codas() {
  var data = new Date();
  var mili_s = (data.getMilliseconds()>10) ? data.getMilliseconds() : 12;
  var re = mili_s.toString()+Math.ceil(mili_s/11);

  // Adauga codul in campul ascuns din formular si in textul vizibil
  document.mailer.anti_spam.value = re;
  document.getElementById('codas').innerHTML = re;

  return re;
}

var cod_as = set_codas();		// Executa functia pt. crearea codului anti-spam
document.getElementById('div_as').style.display = 'block';	// Face vizibila zona pt. cod de verificare

// Functia pentru preluarea si verificarea datelor din formular
function Validate() {
  var formular = document.mailer;

  // Preia datele din formular
  var file_php = formular.action;
  file_php = file_php.split('/').pop();		// Retine doar partea cu numele si extensia fisierului php
  var numele = formular.nume.value;
  var emailul = formular.email.value;
  var subiectul = formular.subiect.value;
  var mesajul = formular.mesaj.value;
  var cod_as = formular.anti_spam.value;
  var cod_as1 = formular.anti_spam1.value;

  // Verifica completarea campurilor din formular
  if (numele.length<2 || numele.length>40) {
	alert('Numele trebuie sa contina intr 2 si 40 caractere');
	formular.nume.focus();
  }
  else if (emailul.length<6 || emailul.indexOf("@")==-1 || emailul.indexOf('.')==-1) {
	alert('Adaugati corect adresa dv. de e-mail');
	formular.email.focus();
  }
  else if (subiectul.length<3 || subiectul.length>70) {
	alert('Completati subiectul, minim 3 caractere si maxim 70');
	formular.subiect.focus();
  }
  else if (mesajul.length<3 || mesajul.length>500) {
	alert('Scrieti mesajul, minim 5 caractere si maxim 500');
	formular.mesaj.focus();
  }
  else if(cod_as!=cod_as1) {
    alert('Cod de verificare incorect');
	formular.anti_spam1.focus();
  }
  else {
  // Creaza datele care trebuie trimise la ajax (fisierul.php cu datele catre el)
  var  datele = 'nume='+numele+'&email='+emailul+'&subiect='+subiectul+'&mesaj='+mesajul+'&anti_spam='+cod_as+'&anti_spam1='+cod_as1;
  ajaxrequest(file_php, datele);		// Apeleaza ajaxrequest()
  }

  return false;
}

// Functia care verifica si creaza obiectul XMLHttpRequest in functie de browser
function get_XmlHttp() {
  // Creaza variabila care va contine instanta la XMLHttpRequest, initial cu valoare nula
  var xmlHttp = null;

  if(window.XMLHttpRequest) {		// Daca browser-ul e Forefox, Opera, Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) {	// Daca browser-ul este Internet Explorer
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlHttp;
}

// Functia care trimite datele la un fisier PHP si returneaza raspunsul
function ajaxrequest(php_file, datele) {
  var cerere_http =  get_XmlHttp();		// Apeleaza functia pt. crearea instantei la obiectul XMLHttpRequest

  set_codas();		// Executa functia pt. crearea (schimbarea) codului anti-spam

  cerere_http.open("POST", php_file, true);			// Creaza cererea

  // Adauga un Header specific pentru ca datele sa fie recunoscute ca au fost trimise prin POST
  cerere_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  cerere_http.send(datele);		// Efectueaza trimiterea cererii, impreuna cu valorile care trebuie transmise

  // Verifica starea cererii
  // Daca raspunsul e primit complet, il transfera in eticheta HTML cu id-ul din "tagID"
  cerere_http.onreadystatechange = function() {
    if (cerere_http.readyState == 4) {
	  // Daca raspunsul de la script contine 'Eroare:' il afiseaza in titlu din formular
	  // Altfel, il afiseaza in locul formularului
	  if(cerere_http.responseText.indexOf("Eroare:")!=-1) {
	    document.getElementById('fc_titlu').innerHTML = cerere_http.responseText;
	  }
	  else {
	    document.mailer.innerHTML = cerere_http.responseText;
	  }
    }
  }
  return false;
}

Codul pentru formularul de contact

<form style="width:350px; background:#e8e8fe; text-align:center;" name="mailer" method="post"  onsubmit="return Validate()" action="contact_mail.php">
 <h3 id="fc_titlu"><u>Trimiteti mesaj</u></h3>
 Numele dv.: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input type="text" name="nume" id="nume" size="18" maxlength="40" /><br />
 Adresa dv. de e-mail: <input type="text" name="email" id="email" size="18" maxlength="58" /><br />
 Subiect: &nbsp; &nbsp; &nbsp; <input type="text" name="subiect" id="subiect" size="28" maxlength="70" /><br />
 Scrieti mesajul: (<i>maxim 500 caractere</i>)<br />
  <textarea name="mesaj" id="mesaj" cols="35" rows="6"></textarea>
  <input type="hidden" name="anti_spam" value="" />
  <div id="div_as" style="display:none;">
   <i>Adaugati urmatorul cod:</i> <b id="codas"> </b><br />
   Verificare: <input type="text" name="anti_spam1" value="" size="7" maxlength="7" />
  </div>
  <input type="submit" value="Trimite" id="submit" />
</form>
<script type="text/javascript" src="contact.js"> </script>
- Trebuie sa pastrati denumirile fisierelor si id-urilor din tag-uri asa cum sunt.

- Scriptul este gratuit, il puteti modifica si folosi dupa cum doriti. Fiind gratuit, nu se acorda suport, dar daca aveti sesizari, opinii sau intrebari legate de el, va rog sa postati pe Forum, la sectiunea PHP - JavaScript.


- Un site petru creare de formulare online, gratis: Formular de contact

Lectii / Tutoriale

Diverse PHP

Scripturi

  • PHP Script Chat
  • CMS Blog cu Ajax
  • Script Upload
  • Uploader
  • Multi-Uploader
  • Contoar pagina
  • Contor 2
  • Contoar click-uri
  • Contor Downloads
  • Numar Vizitatori si Utilizatori Online
  • Script inregistrare
  • Inregistrare Utilizatori
  • Curs valutar
  • Curs valutar 2
  • Mailer
  • Formular contact
  • Script comentarii
  • Script comentarii 2
  • Script comentarii 3
  • Vizitatori online
  • Script Paginare
  • Clasa Paginare
  • Script Page Rank
  • Script Chat
  • Numarare cuvinte
  • Recomanda pagina
  • Sistem notare
  • Countdown timer
  • Mini_Trafic Site
  • Subiecte forum
  • Clasa cautare Google
Formular de contact
2008 - 2012 Webmaster, Webdesigner : MarPlo