Ndodheni ne: Guidat / JavaScript / PHP
Forme kontakti me PHP dhe JQuery

Formë kontakti me PHP dhe JQuery

Nga më 20 March 2010 në JavaScript, PHP me 13 Komente

Forma e kontaktit është ndoshta “sfida” e parë dhe më e thjeshtë e një programuesi të ri, por shpesh mund të kthehet në rrugë pa dalje. Kjo guidë do ju largojë çdo paqartësi dhe biles do të shtojmë edhe një dozë të mirë JavaScript me JQuery. Rezultati është një formë kontakti vërtetë interesante.

  • Shkarko Kodin
  • Shiko Demon

Forma e kontaktit është një nga gjërat e para që bëjnë fillestarët e PHP. Ka qenë gjëja e parë që kam bërë edhe unë dhe ndihesha shumë i gëzuar atëherë. Megjithëse shumë e thjeshtë për tu krijuar, kam parë shpesh në forume pyetje rreth tyre, prandaj mendova të krijoj një guidë. Mund ta përdorni për të mësuar, por gjithashtu mund ta merrni copy-paste e ta përdorni në faqet tuaja. Nuk më mbetet hatri.

Për ta bërë më interesante guidën mendova ti jap një dozë adrenaline formës me JQuery që të kenë diçka për të mësuar edhe programuesit me eksperiencë në PHP, por jo me JavaScript. JQuery do na ndihmojë të bëjmë validimin nga ana e klientit për një prezantim më dinamik, ndërsa me PHP do bëjmë validimin nga ana e serverit dhe do dërgojmë e-mailin. Arsyeja e vetme që do të përdor 2 lloje validimesh është se validimi me JavaScript mund të kalohet fare thjeshtë duke e çaktivizuar në shfletues.

Si gjithmonë, gjëja e parë që do të bëjmë është krijimi i strukturës HTML. Kodi i plotë paraqitet më poshtë.

 HTML |  Kopjo Kodin |? 
01
<div id="mbajtesi">
02
     <form id="forma" method="post" action="">
03
     <div>
04
          <label for="emri">Emri</label>
05
          <input type="text" name="emri" id="emri" />
06
          <span id="gabimEmri"></span>
07
     </div>
08
     <div>
09
          <label for="email">E-Mail</label>
10
          <input type="text" name="email" id="email" />
11
          <span id="gabimEmail"></span>
12
     </div>
13
     <div>
14
          <label for="arsyeja">Arsyeja e Kontaktit</label>
15
          <select name="arsyeja" id="arsyeja">
16
               <option value="Pyetje e pergjithshme">Pyetje e pergjithshme</option>
17
               <option value="Lavderim">Lavderim</option>
18
               <option value="Oferte Pune">Oferte Pune</option>
19
               <option value="Te kam inat">Te kam inat</option>
20
          </select>
21
     </div>
22
     <div>
23
          <label for="mesazhi">Mesazhi</label>
24
          <textarea name="mesazhi" id="mesazhi"></textarea>
25
     </div>
26
     <button type="submit" id="butoni">Dergoje Mesazhin</button>
27
     </form>
28
</div>

Struktura duhet të jetë standarte për disa fusha hyrëse. Çdo fushë e kam ndarë me një element <div> për të lehtësuar stilimin dhe ndarjen midis tyre. Elementët <label> shërbejnë si tituj për të përshkruar fushën në mënyre semantike dhe gjithashtu si lehtësim i vogël ndaj përdoruesve. Kur klikohet mbi titull, fusha automatikisht merr fokus. Vini re që atributi for i <label> është i njëjtë me ID-në e fushës. Gjëja e fundit që më duhet t’ju tregoj për strukturën HTML është përdorimi i një elementi bosh <span>, të cilin do e përdorim më vonë për të shfaqur mesazhet.

Të gjithëve na pëlqejnë gjërat e bukura dhe forma e kontaktit nuk është përjashtim. Prandaj do shtojmë disa rregulla CSS për të ngjyrosur e pozicionuar elementët.

 CSS |  Kopjo Kodin |? 
01
#mbajtesi{
02
     width:500px;
03
     margin:50px auto;
04
}
05
 
06
#mbajtesi div{
07
     margin-bottom:10px;
08
}
09
 
10
#mbajtesi label{
11
     display:block;
12
     font-weight:bold;
13
     cursor:pointer;
14
}
15
 
16
#gabimEmri, #gabimEmail{
17
     color:#ca6c6c;
18
}
19
 
20
#mbajtesi input, #mbajtesi select, #mbajtesi textarea{
21
     font:13px &quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif;
22
     color:#666;
23
     margin-right:15px;
24
     border:1px solid #bbb;
25
     padding:5px;
26
}
27
 
28
#mbajtesi input{
29
     width:250px;
30
}
31
 
32
#mbajtesi textarea{
33
     width:450px;
34
     height:100px;
35
}
36
 
37
#mbajtesi button{
38
     background:#f55415;
39
     border:1px solid #863718;
40
     padding:7px;
41
     color:white;
42
}
43
 
44
#mbajtesi .gabim{
45
     border:1px solid #ca6c6c;
46
     background:#f6d6d6;
47
}
48
 
49
#mbajtesi .mire{
50
     border:1px solid #bbb;
51
     background:white;
52
}
53
 
54
p.jo{
55
     border:1px solid #ca6c6c;
56
     background:#f6d6d6;
57
     padding:10px;
58
}

Stilet e mësipërme janë jashtë qëllimit të kësaj guide dhe smund të fokusohemi shumë në to, por jam i sigurt që nuk do lodheni shumë. Rregulla standarte: ngjyra, sfondi, bordura, etj.

Si thoni të kalojmë në pjesën interesante? Po e nisim me kodin JavaScript, të cilin e kam komentuar me detaje, por po ju them disa fjalë për t’ju shpjeguar idenë e funksionalitetit. Kam ndërtuar 3 funksione për të kontrolluar nëse fushat janë më të gjata se një vlerë e caktuar apo nëse emaili është i vlefshëm dhe nëse nuk plotësohet i shtoj një klasë CSS fushës me një funksion të JQuery që quhet addClass(). Në fund ja ngjisim këto funksione eventeve blur() dhe keyup() në mënyrë që validimi të ndodhë në kohë reale. Shumë e thjeshtë apo jo? Për disa po, për disa jo, prandaj studioni kodin!

 Javascript |  Kopjo Kodin |? 
001
/*
002
Presim qe te gjithe elementet html te jene ngarkuar
003
ne menyre qe te kemi akses ti manipulojme.
004
*/
005
$(document).ready(function(){
006
     /*
007
     Deklarojme variablat e formes, fushave input dhe textarea
008
     dhe elementet span ku do shfaqim mesazhet e gabimit.
009
     $('#id') eshte forma e shkurtuar e JQuery per:
010
     document.getElementById('id').
011
     */
012
     var forma = $('#forma');
013
     var emri = $('#emri');
014
     var email = $('#email');
015
     var mesazhi = $('#mesazhi');
016
 
017
     var gabimEmri = $('#gabimEmri');
018
     var gabimEmail = $('#gabimEmail');
019
 
020
     /*
021
     Krijojme nje funksion te dedikuar per te kontrolluar
022
     nese emri eshte me i gjate se 5 karaktere. Funksioni
023
     kthen TRUE nese validimi eshte i rregullt dhe FALSE
024
     nese kushtet nuk plotesohen.
025
     */
026
     function kontrolloEmrin(){
027
           /*
028
           Nese emri eshte me i shkurter se 5 karaktere
029
           */
030
           if(emri.val().length &lt; 5){
031
                /*
032
                I shtojme fushes se emrit nje klase &quot;gabim&quot; te percaktuar
033
                ne rregullat CSS. Metoda addClass() ofrohet nga JQuery
034
                per ti shtuar nje klase elementeve ne menyre dinamike.
035
                */
036
                emri.addClass('gabim');
037
                /*
038
                I shtojme tekst elementit span per te treguar cfare gabimi
039
                ka ndodhur. Metoda html() eshte menyra e JQuery per innerHTML().
040
                */
041
                gabimEmri.html('Emrat e shkurter si pelqejme.');
042
                return false;
043
           } else{
044
                /*
045
                Ne kete rast validimi eshte i rregullt, prandaj ja heqim fushes
046
                klasen e vene me siper me removeClass().
047
                */
048
                emri.removeClass('gabim');
049
                gabimEmri.html('');
050
                return true;
051
           }
052
      }
053
 
054
     /*
055
     Krijojme nje funksion te dedikuar per te kontrolluar
056
     nese emaili eshte i vlefshem.
057
     */
058
     function kontrolloEmailin(){
059
          /*
060
          Funksion .match() kontrollon nese teksti permban nje pattern te caktuar regular
061
          expressions. Ne kete rast, pattern-i kontrollon per nje forme standarte emaili
062
          e tipit: [email protected]
063
          */
064
          if(!email.val().match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/)){
065
               email.addClass('gabim');
066
               gabimEmail.html('Emaili eshte dukshem i pa vlefshem!');
067
               return false;
068
          } else{
069
               email.removeClass('gabim');
070
               gabimEmail.html('');
071
               return true;
072
          }
073
     }
074
 
075
     /*
076
     Krijojme nje funksion te dedikuar per te kontrolluar
077
     nese mesazhi eshte me i gjate se 10 karaktere.
078
     */
079
     function kontrolloMesazhin(){
080
          if(mesazhi.val().length &lt; 10){
081
               mesazhi.addClass('gabim');
082
               return false;
083
          } else{
084
               mesazhi.removeClass('gabim');
085
               return true;
086
          }
087
     }
088
 
089
     /*
090
     Eventi blur() egzekutohet kur elementi humb fokusin, pra kur
091
     largohemi nga elementi. Ja ngjisim kete event te tre fushave
092
     qe validojme ne menyre qe te kontrollohet validiteti i tyre.
093
     */
094
     emri.blur(kontrolloEmrin);
095
     email.blur(kontrolloEmailin);
096
     mesazhi.blur(kontrolloMesazhin);
097
 
098
     /*
099
     Eventi keyup() egzekutohet kur ne fushe shtypet nje taste e
100
     tastjeres. Ja ngjisim edhe kete event te treja fushave qe
101
     validimi te behet ne kohe reale.
102
     */
103
     emri.keyup(kontrolloEmrin);
104
     email.keyup(kontrolloEmailin);
105
     mesazhi.keyup(kontrolloMesazhin);
106
 
107
     /*
108
     Shtojme nje event handler (mbajtes eventesh) per formen qe
109
     te kontrollojme me JS nese forma eshte bere submit.
110
     */
111
     forma.submit(function(){
112
          /*
113
          Nese te treja funksionet e validimit kthejne true, atehere
114
          forma behet submit qe te kryhet me pas validimi me PHP.
115
          */
116
          if(kontrolloEmrin() &amp;&amp; kontrolloEmailin() &amp;&amp; kontrolloMesazhin()){
117
               return true;
118
          } else{
119
          &lt;code&gt;Nese validimi nuk eshte kryer, atehere therrasim te tjera  funksionet
120
          e validimit (qe ti shfaqim te gjitha gabimet) dhe bllokojme  berjen
121
          submit te formes.
122
          */
123
          } else{
124
               kontrolloEmrin();
125
               kontrolloEmailin();
126
               kontrolloMesazhin();
127
               return false;&lt;/code&gt;
128
          }
129
     });
130
});

Si ju thashë më parë, JavaScript kujdeset për validimin nga ana e klientit por s’mund të mbështetemi vetëm tek ai. Nëse vizitori e çaktivizon, forma jonë mbetet totalisht e ekspozuar. Këtu hyn në lojë PHP, me të cilën bëjmë validimin nga ana e serverit. Logjika e kodit PHP që kam shkruar është fare e thjeshtë sepse vetë ajo që po realizojmë është e thjeshtë. Ju thashë, forma e kontaktit është një nga gjërat e para që programuesit fillestarë bëjnë :)

 PHP |  Kopjo Kodin |? 
01
<?php
02
/*
03
Nese njera nga variablat POST eshte krijuar, atehere forma
04
eshte bere submit.
05
*/
06
if(isset($_POST['emri'])){
07
     /*
08
     Heqim hapesirat me trim() dhe i pastrojme variablat POST nga karakteret
09
     HTML me strip_tags().
10
     */
11
     $emri = trim(strip_tags($_POST['emri']));
12
     $email = trim(strip_tags($_POST['email']));
13
     $arsyeja = trim(strip_tags($_POST['arsyeja']));
14
     $mesazhi = trim(strip_tags($_POST['mesazhi']));
15
 
16
     //Krijojme nje vektor bosh te cilin do e perdorim me poshte.
17
     $gabime = array();
18
 
19
     /*
20
     Nese emri eshte me pak se 5 karaktere i shtojme nje rresht gabimit.
21
     Funksioni strlen() kthen numrin e karaktereve te tekstit.
22
     */
23
     if(strlen($emri) < 5){
24
          $gabime[] = 'Emri smund te jete bosh.';
25
     }
26
     /*
27
     Kontrollojme nese emaili eshte i vlefshem duke e krahasuar ndaj nje
28
     regular expression dhe i shtojme nje rresht gabimit nese nuk eshte.
29
     */
30
     if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $email)){
31
          $gabime[] = 'E-Maili eshte i gabuar.';
32
     }
33
     //Nese mesazhi eshte me pak se 5 karaktere i shtojme nje rresht tjeter gabimit.
34
     if(strlen($mesazhi) < 10){
35
          $gabime[] = 'Mesazhi smund te jete bosh.';
36
     }
37
 
38
     /*
39
     Kontrollojme nese vektori gabim eshte bosh. Funksioni count() numeron
40
     elementet e vektorit. Nese nuk ka asnje element do te thote qe nuk eshte
41
     gjeneruar asnje gabim.
42
     */
43
     if(count($gabime) == 0){
44
          //Emaili i marresit. Ky duhet te jete emaili juaj personal.
45
          $marresi = '[email protected]';
46
          /*
47
          Kokat per te ndertuar nje email te vlefshem. Ky eshte rasti me i thjeshte
48
          ku kam percaktuar Derguesin, Adresen e Pergjigjes dhe Menyren e Krijimit te Emailit.
49
          */
50
          $kokat = 'From: ' . $email . "rn" .
51
                   'Reply-To: ' . $email . "rn" .
52
                   'X-Mailer: PHP/' . phpversion();
53
          /*
54
          Perfundimisht dergojme mesazhin duke plotesuar Marresin,
55
          Subjektin, Mesazhin dhe Kokat (Headers).
56
          */
57
          mail($marresi, $arsyeja, $mesazhi, $kokat);
58
          echo '<p>Mesazhi u dergua me sukses. Faleminderit.</p>';
59
     } else{
60
          /*
61
          Shfletojme elementet e vektorit per te shfaqur te gjitha
62
          gabimet qe ndodhen ne te.
63
          */
64
          echo '<p>';
65
          foreach($gabime as $gb){
66
               echo '- ' . $gb . '<br />';
67
          }
68
          echo '</p>';
69
     }
70
}
71
?>

Pak fjalë e shumë kod. Këto janë guidat që më pëlqejnë :) . Seriozisht, fjalët ndonjëherë janë të tepërta dhe për këtë guidë nuk do kishte nevojë për shpjegime të hollësishme. Komentet në kod dhe ato 2 fjalë që ju thashë duhet t’ju përgatisin të bëni format tuaja të kontaktit. Jepini një mundësi.

Mësim të mbarë.

Fadion Dashi

Fadioni është prej shumë vitesh i apasionuar pas internetit dhe punon freelance si dizenjues dhe programues per web. Kur nuk është duke punuar, i pëlqen të shkruajë, të fotografojë, të admirojë koleskionin e tij të aparatëve fotografikë manualë dhe të kalojë kohë të bukur me miqtë.

13 Komente

  1. andi says:

    flm shume ;)

  2. mentor says:

    bravo, shum tutorial i mir,i vlefshem dhe i kjarte! Vetem vazhdo,e shpresoj te arrish shume.

  3. Shume tutorial i mire vetem se kuptova pse thirr dy her dhe tek if dhe tek else te njejtat funkcione. Gjithashtu hiq krejt “else” pasi qe nqs nuk validohen elementet e formes ateher ajo duhet te kthej gjithemon false!

    forma.submit(function(){
    /*
    Nese te treja funksionet e validimit kthejne true, atehere
    forma behet submit qe te kryhet me pas validimi me PHP.
    */
    if(kontrolloEmrin() && kontrolloEmailin() && kontrolloMesazhin()){
    return true;
    /*
    Nese validimi nuk eshte kryer, atehere therrasim te tjera funksionet
    e validimit (qe ti shfaqim te gjitha gabimet) dhe bllokojme berjen
    submit te formes.
    */
    } else{
    kontrolloEmrin();
    kontrolloEmailin();
    kontrolloMesazhin();
    return false;
    }
    }

    refactor-o keshtu:


    forma.submit(function(){
    /*
    Nese te treja funksionet e validimit kthejne true, atehere
    forma behet submit qe te kryhet me pas validimi me PHP.
    */
    if(kontrolloEmrin() && kontrolloEmailin() && kontrolloMesazhin()){
    return true;
    }

    return false;
    }

  4. Fadion Dashi says:

    Flamur, verejtja jote eshte me vend dhe ka sens, megjithate problemi eshte se ne forme te tille nuk funksionon. Funksionet pasardhes nuk therriten ne momentin qe i pari nuk ploteson kushtin (boolean AND). Pra, kur kontrolloEmrin() kthen 0 (false), dy funksionet e tjera nuk therriten. Per kete arsye u “detyrova” ti ri-therras funksionet.

    Sa per return false, ajo sperben problem nese vendoset brenda else apo jashte, sepse nese forma nuk validohet, gjithmone do shkohet ne else.

    Faleminderit per perfshirjen dhe me vjen mire qe te pelqeu guida :)

  5. Egzon says:

    Guide e vlefshme, gjithmone kam pasur qejf te krijoj dicka vet e jo te kopjoj.
    tash po filloj ta mesoj kete :)
    faleminderit shume. Rep + hehe

  6. Fadion Dashi says:

    Me vjen mire qe te pelqen Egzon. Jam munduar ta mbaj sa me te thjeshte sepse guida i drejtohet pikerisht fillestareve ne PHP dhe JS. Kij parasysh qe nese nuk do validim client-side me JS, mund ta injorosh ate pjese (apo ta fshish nese ke shkarkuar kodin) dhe te kalosh direkt ne kodin PHP.

    Thnx per Rep+ :P

  7. Po ke te drejt se dhe une smendova hiq pasi nqs nje funkcion kthen false if-statement ben nje break, keshtu qe nuk vazhdon me tej.

    Nje menyr tjeter eshte ti vendosesh ne nje var funkcioinet keshtu:
    ———————–
    var kontrolloEmrin = kontrolloEmrin();
    var kontrolloEmailin = kontrolloEmailin();
    ———————–

    dhe pastaj tek if te besh:
    ———————–
    if(kontrolloEmrin && kontrolloEmailin …){
    return true;
    }

    return false;
    ———————–

  8. Rinor Spahiu says:

    GG faleminderit tejet, sic duket do te behemi me te forte se ti ne kete fushe, duke na spjeguar cdo gje ne menyren me te mire te mundshme.
    Ti themi Romeos ta fus ndonje plugin per reputacion+ sepse nevojitet ketu :p (sigurisht do e zubloj edhe ate Romeo).

    Rinori

  9. Romeo Shuka says:

    Rinor nuk ka nevoj per plugin per reputacion ose me sakte ne fillim te postimit ke nje buton ME PELQEN. Ajo ne nje fare menyre eshte nje falenderim per postuesin me i treguar qe me pelqeu ajo qe ke shkruar edhe i jep reputacion :)
    Aq me shume vota ka tema aq me e pelqyer eshte.

  10. Fadion Dashi says:

    Rinor, e rendesishme eshte qe guidat te jene instruktuese. Pastaj je i lire te ma kalosh gjithe diten :)

  11. Fadion Dashi says:

    Turi, verejtja jote eshte me vend. Kisha nje ngaterrim te vogel ne kod, specifikisht ne pjesen e variables $koka (headers te emailit) ku nuk kisha perfshire emailin e derguesit. Tani e korrigjova dhe duhet te te punoje pa probleme.

  12. Arsen says:

    me nxjer nje error si ta regulloj ju lutem http://arsencenko.info/contact.html !!

Shkruaj një Koment