Formular de contact - Forum

[ Mesaje noi · Membrii · Regulamentul forumului · Căutare · RSS ]
Pagina 1 din 11
Forum » Tutoriale si Resurse (T&R) » T&R php » Formular de contact
Formular de contact
GravediggerData: Miercuri, 2013-07-17, 3:00 PM | Mesaj # 1
Gravedigger
Administrator
Grup: Administratori
Mesaje: 542
Premii: 10
Reputatie: 5
Stare: Offline
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

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.

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
Cod
<?php
session_start();

$to = 'floodofgames@email.com';  // 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.
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 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://floodofgames.ucoz.ro">Flood of Games</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
Cod
// 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
Cod
<form style="text-align:center;" name="mailer" method="post"  onsubmit="return Validate()" action="contact_mail.php">
    <h3 id="fc_titlu"><u>Trimiteti ticket</u></h3>
    Numele dv.:
<input type="text" name="nume" id="nume" size="18" maxlength="40" />

    Adresa dv. de e-mail:
<input type="text" name="email" id="email" size="18" maxlength="58" />

    Subiect:
<input type="text" name="subiect" id="subiect" size="28" maxlength="70" />

    Scrieti mesajul: (<i>maxim 500 caractere</i>)

     <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>

      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>





 
MinatoData: Marţi, 2013-08-13, 6:12 PM | Mesaj # 2
Minato
Sergent
Grup: VIP
Mesaje: 21
Premii: 4
Reputatie: 43
Stare: Offline
Foarte misto scriptul.

Secretul unei minţi şi al unui corp sănătos nu stă în a plânge după trecut sau în a te îngrijora pentru viitor ori a
anticipa necazurile, ci în a trăi clipa în mod înţelept şi cinstit.
 
Forum » Tutoriale si Resurse (T&R) » T&R php » Formular de contact
Pagina 1 din 11
Căutare: