• Përshëndetje Vizitor!

    Nëse ju shfaqet ky mesazh do të thotë se ju nuk jeni regjistruar akoma. Edhe pse nuk jeni regjistruar ju arrini të shihni pjesën me të madhe të seksioneve dhe diskutimeve të forumit, por akoma nuk gëzoni të drejten për të marrë pjesë në to dhe në avantazhet e të qënurit anëtar i këtij komuniteti. Ju lutem : REGJISTROHUNI që të dërgoni postime dhe mesazhe në Forum-Al.

    Regjistrohu !

Sistem KodiBB dhe Qeshjesh me PHP

Forum-Al

Aty ku shqiptarët mblidhen
Anëtar
Jan 5, 2010
Postime
561
Pikët
28
Vendndodhja
Forum

Ja ku jemi përsëri me një guidë praktike dhe kësaj rradhe me një mini-aplikacion që personalisht e shoh mjaft interesant. Kushdo që ka frekuentuar forume, duhet t’i njohë KodetBB dhe Qeshjet. Në të tilla sisteme, mjafton të shkruash kodin e duhur (psh teksti për Bold) për t’a formatuar tekstin apo të shkruash simbole qeshjesh për t’i transformuar në ikona. Pikërisht një sistem të tillë do të kodojmë në këtë guidë.

Në sisteme si forume, guestbook, mesazhe apo pothuajse në çdo vend ku përdoruesit i lejohet të shkruajë publikisht, kodi HTML/Javascript fshihet programatikisht për mos t’i lejuar keqbërësit të injektojnë kode të cilët mund të përfitojnë informacione sensitive. Kjo e fundit quhet XSS (Cross Site Scripting) dhe është një vrimë sigurie lehtësisht e mbyllshme në pjesën e madhe të rasteve, por nga ana tjetër shumë e përhapur. Duke i pastruar shkrimet e përdoruesve nga kodi HTML, mënjanojmë vrimën e sigurisë, por pjesa negative është se nuk i lejojmë përdoruesit t’i formatojnë tekstet sipas dëshirës. Duke i bërë tekstet Bold, Italic apo duke vendosur një lidhje, shkrimi bëhet më dinamik dhe e përshkruan veten edhe më mirë. Këtu hyn në lojë sistemi i KodeveBB! Përdoruesëve u lejohet të shkruajnë disa kode formatimi të paracaktuara dhe të limituara që shërbejnë për formatimet bazë, vendosje imazhi, lidhje apo ndërtimin e një liste. Në këtë mënyrë u ofrohen fasilitete që s’mund të përdoren me keqdashësi. Qeshjet dhe transformimi i tyre në ikona është thjeshtë diçka interesante për tu implementuar sepse është më bukur të shohësh një ikonë, se sa 2-pika-kllapë.

Për t’a përmbledhur në pak rrjeshta, në këtë guidë do ju tregoj:

  • Si të ndërtoni një sistem shumë të thjeshtë ku përdoruesit shkruajmë mesazhe, të cilat shfaqen publikisht. Mendojeni si një Guestbook, por pa opsione administrimi.
  • Mundësinë e formatimeve Bold, Italic dhe Underline; futjen e Lidhjeve dhe Citateve (jo citim postimi, por citim fjalësh).
  • Transformimin në ikona të Qeshjeve bazë.
Kujt i shërben kjo guidë

Besoj se guida duhet të jetë e kuptueshme nga çdo nivel programuesish, edhe ata fillestarë. Si standart tashmë i guidave të mia të fundit është kodimi me objekte, por thjeshtësia është mbajtur në minimum dhe s’duhet të jetë problem edhe për ata të mësuar me kodim proçedurial. Pjesa më e komplikuar e guidës është përdorimi i Regular Expressions, të cilat nuk janë edhe aq miqësore me fillestarët. Megjithatë, përdorimi i tyre këtu nuk është i ndërlikuar dhe praktikisht do përdor një tip shprehje për të gjitha veprimet, të cilën do e shpjegoj mirë për mos t’ju lënë fare paqartësi.

Pak Teori

Zakonisht s’më pëlqen të tentoj të shpjegoj me fjalë gjëra që shpjegojnë veten me kod, por dua t’ju jap një ide fillestare të sistemit që do kodojmë. Ideja mbrapa KoditBB dhe Qeshjeve nuk është asgjë tjetër përveç se kërkim dhe zëvendësim. Duke përdorur Regular Expressions, fuqia e të cilëve në kërkimin e teksteve bën magjira, kërkohen KodetBB dhe zëvendësohen me kod të pastër HTML. Pra, nëse ofroj një KodBB teksti për ta bërë tekstin Bold, mjafton të ndërtoj një Regular Expressions që kërkon për atë shprehje dhe ta zëvendësoj me ekuivalentin HTML, që në këtë rast do ishte teksti. E njëjta logjikë, por edhe me e thjeshtësuar hyn tek Qeshjet, ku do kërkojmë për dy-pika-kllapë (WP m’i zëvendëson Qeshjet me ikona. Ironike!) apo forma të tjera dhe do i zëvendësojmë me imazhe; direkt kod HTML i tipit: <img src=”qeshje.png” />. Pa e vrarë shumë mendjen, sistemi mund të duket i ndërlikuar, por kur e mendon dhe e implementon, zbulon tërësisht të kundërtën.

Tabela e Mesazheve

Para se të fillojmë kodimin, na duhet një tabelë në MySQL për të ruajtur mesazhet. Unë kam ndërtuar një me emrin “kodibb_mesazhet” në të cilën kam vendosur kolonat si në figurën më poshtë.

Tabela e Mesazheve


Kodi HTML

Kodi HTML është pjesa më e thjeshtë, sepse është më e shkurtra. Kam krijuar një formë mesazhi dhe një div mbajtës ku do të shfaq mesazhet.

Shkruaj Mesazhin

Forma i dërgon të dhënat me POST dhe përmban një textarea për të shkruajtur mesazhin dhe një buton (të cilin vendosa ta bëj imazh) për t’a dërguar atë. Vini re 2 komentet që kam bërë! Aty ku ndodhen komentet do të shkruaj më pas kod PHP i cili thërret disa funksione. Do i shohim në vijim.

Struktura e Klasës PHP

Si ju thashë në hyrje të guidës, kodi PHP që kam shkruar është bazuar në objekte, specifikisht në një klasë të quajtur Kodi_BB që bën lidhjen me databazën përmes __construct() – funksioni që thërritet automatikisht kur klasa nis – dhe mban 4 funksione të tjera për veprimet që do kryejmë. Më poshtë mund të shihni strukturën e klasës, variablat që do përdor për të dhënat e databazës, tabelës dhe emrat e funksioneve.

Më lini t’ju shpjegoj disa gjera rreth kodit më sipër. Variablat $db_host, $db_emri, $db_fjalekalimi dhe $db_databaza shërbejnë për t’u lidhur me serverin MySQL dhe për të zgjedhur databazën më të cilën do të punojmë. Variabla $tb_mesazhet mban emrin e tabelës së mesazheve, në mënyrë që t’a kem të lehtë t’a ndryshoj nëse tabelës i ndryshoj emrin; pa një variabël do më duhej të modifikoja çdo query të bërë. Në këtë sistem nuk është ndonjë problem, por për sisteme të mëdha është praktikë e mirë. Vini re që variablat i kam deklaruar me fjalën kyçe “private“, e cila i bën këto variabla të aksesueshme vetëm brenda klasës dhe jo jashtë saj apo në një klasë që zgjeron të parën. Në të kundërt, mund të deklarohen si “public” (të aksesueshme nga kudo) dhe “protected” (të aksesueshme vetëm brenda klasës apo në një klasë zgjeruese).

Funksioni __construct(), si ju thashë më sipër, egzekutohet automatikisht kur klasa niset me fjalën kyçe “new“. Quhet Metodë Magjikë dhe në rastin tonë të thjeshtë, shërben më së miri për të kryer lidhjen me databazën.

Në 4 funksionet që përbëjnë logjikën e sistemit, 2 janë ato që na interesojnë më tepër për guidën (unë do i shpjegoj të katërt): konvertoKodBB() dhe konvertoQeshjet(). Këto 2 funksione i kam deklaruar si “private“, që mos të aksesohen jashtë klasës, ndërsa 2 të tjerët si “public” sepse do thërriten nga jashtë klasës për të shtuar mesazhet dhe për ti listuar ato. Logjika e “private“, “public” dhe “protected” është e njëjtë si tek variablat.

Funksioni shtoMesazhin()

Ky funksion bën validimin e mesazhit dhe nëse gjithçka është në rregull, e shton atë në databazë. Merr vetëm një parametër që është vetë mesazhi, i cili vjen nga forma HTML (do ja u tregoj në fund).

Fillimisht kontrollojmë që mesazhi të mos jetë bosh. Nëse është, kthejmë “false” dhe funksioni përfundon këtu.

Në rreshtin e parë e pastroj mesazhin nga karakteret që mund të thyejnë një query (SQL Injections) me mysql_real_escape_string() dhe i heq të gjitha kodet HTML (XSS) me strip_tags(). Tani kam një mesazh të pastruar dhe përpunimi vazhdon më tej. Në rreshtin e dytë dhe të tretë thërras funksionet e konvertimit të KoditBB dhe të Qeshjeve. Kam shkruar nga një funksion për secilin për ti pasur gjërat në kontroll, por për ato do ju flas me detaje në vijim.

Me këto 2 rreshta vendos datën. Direktiva date_default_timezone_set() përcakton timezone-ën e preferuar dhe unë e vendosa sipas CET (Central European Time – Ora e Europës Qendrore), timezone në të cilën ndodhet Berlini, por ne na intereson që ndodhet Shqipëria. Në këtë mënyrë nuk marr timezone-ën e serverit, por atë që dua unë. Në rreshtin e dytë kam vendosur datën në formatin Y-m-d H:i:s (Viti-Muaji-Dita Ora:Minutat:Sekondat).

Këto janë 5 variablat që mbajnë tekstin e formatuar sipas rregullave të Regular Expressions që do kërkojnë KodetBB. Për ata që s’janë marrë asnjëherë me Regular Expressions kodi mund të duket i frikshëm, prandaj dhe do ja u shpjegoj me detaje. Do ju shpjegoj si kam ndërtuar 2 shprehjet, $trashe dhe $lidhje, sepse $pjerret, $vije_poshte dhe $citat janë egzaktësisht si $trashe në logjikë. Le t’i zbërthejmë shprehjet karakter për karakter.

  1. $trashe = ‘//’; => Një regular expression i saktë nis me limituesit dhe slashet (/) janë një limitues komun. Rregullat e kërkimit do të shkruhen brenda limituesëve.
  2. $trashe = ‘//i’; => Pas limituesit të fundit vendos një modifikues “i”, i cili e bën kërkimin case-insensitive (pra, ku madhësia e gërmave nuk ka rëndësi; a = A). Ne duam që dhe të kenë të njëjtin efekt.
    [*]$trashe = ‘/i’; => Përcaktoj karakteret rrethuese të KoditBB.
    [*]$trashe = ‘/\[b\]\[/b\]/i’; => Para çdo kllape katrore vendos një backslash (\) për ti bërë escape. Në Regular Expressions kllapat katrore janë sintaksë që shërbejnë për të përcaktuar një gamë karakteresh. Duke i bërë escape, njihen si karaktere normale kërkimi.
    [*]$trashe = ‘/\[b\](.*)\[\/b\]/i’; => Shprehja e plotë. Pjesa (.*) përfaqëson tekstin që ndodhet brenda KoditBB. Kllapat tregojnë që kemi të bëjmë me një grup karakteresh. Pika (.) tregon çdo karakter të mundshëm; ylli (*) tregon që mund të ketë 0 apo më shumë karaktere (mund të bëhet plus (+) nëse doni 1 apo më shumë karaktere). Duke përcaktuar që duam çdo karakter, të përsëritur 0 apo më shumë herë marrim shprehjen që ndodhet brenda KoditBB. Pikërisht kjo shprehje është rezultati i kërkimit, të cilën do t’a përdorim më pas për zëvendësim.
  1. $lidhje = ‘/\(.*)\[\/url\]/i’;[/B] => Në këtë forma, shprehja e lidhjes është egzaktësisht e njëjtë me të tjerat. [*][B]$lidhje = ‘/\[url=(.*)\](.*)\[\/url\]/i’;[/B] => Duke qenë se lidhje do krijohet në formën: [url=adresa.html]kliko ketu, duam që në rezultatin e kërkimit të na ruhet edhe pjesa e adresës. Kam bërë të njëjtin lloj kërkimi, me pikë dhe yll për të zgjedhur çdo karakter të përsëritur 0 ose më shumë herë.
Këto janë bazat absolute të Regular Expressions, por ka shumë më tepër për të mësuar. Ka shumë modifikues, klasa karakteresh, karaktere speciale, gama karakteresh, etj, që duan studim dhe përvojë. Unë e shoh si një fushë në të cilën mund të bëhesh i mirë shumë shpejt, por që t’a quash veten ekspert duhen vite eksperiencë. Mund t’ju duket si një pjesë e programimit që s’do ju hyjë aq shumë në punë në raport me vështirësinë për t’u mësuar, por seriozisht me Regular Expressions mund të bëni magjira dhe kjo s’është e limituar vetëm në PHP. Editorë të ndryshëm (si “vi” apo “emacs” në sisteme Unix-based) ofrojnë kërkim/zëvendësim me Regular Expressions dhe mund të zëvendësoni skedarë të tërë në bazë të rregullave. Përdorimi është i gjerë, fuqia e madhe, por kurba e mësimi paksa e pjerrët.

Me të krijuar shprehjet e kërkimit, kalojmë në shprehjet e zëvendësimit. Si ju thashë në fillim të guidës, KodetBB do zëvendësohen me kod të pastër HTML.

Besoj se jeni familjar me kodet e mësipërme HTML. Ajo që mund t’ju duket e çuditshme është përdorimi i “variablave” $1 dhe $2. Ato janë pikërisht teksti i gjetur në shprehjet që ndërtuam pak më sipër, specifikisht pjesa (.*). Praktikisht, i themi kompiluesit të Regular Expressions që gjej një KodBB, ruaje tekstin brenda tij në një variabël, ndërsa pjesën tjetër zëvendësoje me kod HTML. Tek lidhja kemi 2 variabla ($1 dhe $2) sepse kemi kërkuar për 2 tekste, një si adresë dhe një si përshkrim i lidhjes. Leximi bëhet majtas-djathtas, ku rezultati i parë kthehet i pari, prandaj $1 është adresa, ndërsa $2 është përshkrimi.

Për ti thjeshtësuar punë vetes, krijoj 2 vektorë që mbajnë si elementë variablat e kërkimit dhe zëvendësimit. Si do ju tregoj më poshtë, një zëvendësim me Regular Expressiosn mund të bëhet duke përcaktuar një vektor me elementë, pa pasur nevojë ta egzekutojmë funksionin individualisht për çdo shprehje.

Në rreshtin e parë thërras funksionin preg_replace (PREG = PerlRegularExpressions sepse bazohet në PCRE – Perl Compatible Regular Expressions, një librari e bazuar në sintaksën e Perl), i cili bën zëvendësimin e shprehjeve në mesazh. Kthimi i funksionit është vetë mesazhi i modifikuar. Në fund, e kthej mesazhin me “return”.

Ndoshta ishte pjesë pak e lodhshme për fillestarët në Regular Expressions, por shpresoj t’ju kem hapur oreksin që ti studioni. Bazat janë të thjeshta dhe me to mund të bëni shumë, dhe ndërsa i përdorni, fitoni edhe eksperiencë e gjithçka bëhet më e thjeshtë.

Seksioni tjetër është për zëvendësimin e Qeshjeve, të cilat bëhen egzaktësisht me të njëjtën logjikë dhe nuk duan shumë shpjegim.

Funksioni konvertoQeshjet()

Ky funksion i kthen Qeshjet në ikona duke i zëvendësuar me imazhe. Kërkimi bëhet sërish me Regular Expressions dhe përdoret e njëjta teknikë që ju tregova më sipër. Për të qenë transparent, mund edhe të kisha përdorur str_replace() (ose str_ireplace() për një version case-insensitive) në vend të Regular Expressions dhe të kisha të njëjtin rezultat, por këto të fundit janë shumë më fleksibël dhe qëllimi im ishte t’ju tregoja diçka të ndryshme nga e zakonshmja.

Mund t’a vini re menjëherë ngjashmërinë me funksionin e konvertimit të KoditBB. Egzaktësisht e njëjta logjikë! E vetmja gjë që më duhet t’ju tregoj është bërja escape e kllapave tek ‘/:\)’, ‘/;\)/’ dhe ‘:\(‘. Ashtu si kllapat katrore, kllapat rrethore janë sintaksë e Regular Expressions që përcaktojnë një grup dhe duhet të bëhen escape që të përdoren si karaktere normale. Pjesa tjetër besoj nuk ka nevojë për shpjegime.

Funksioni listoMesazhet()

Ky është funksioni që shfaq listën e mesazheve dhe nuk përmban ndonjë gjë të re, prandaj thjeshtë po e komentoj.

Validimi i Formës

Për ta përfunduar guidën, nuk na mbetet asgjë tjetër përveç validimit të formës dhe shfaqjes së mesazheve. Funksionet e ikemi gati, prandaj thjeshtë i thërrasim. Pas kodit HTML të formës, shkruajmë kodin më poshtë.


Përfundimi

Duke përdorur fuqinë e Regular Expressions për kërkimin e teksteve, krijuam fare thjeshtë një sistem që zëvendëson KodetBB në HTML dhe Qeshjet në imazhe. Tashmë duhet të keni marrë konceptet bazë se çfarë janë Regular Expressions dhe si ndërtohen shprehje e shpresoj të jeni stimuluar t’i thelloni njohuritë. Një sistem i tillë është shumë i lehtë të implementohet në aplikacione egzistuese dhe mund të zgjerohet sipas nevojave, duke shtuar KodeBB dhe Qeshje.

Shpresoj që guida të ketë qenë instruktuese dhe praktike për nevojat tuaja. Mos harroni të shkruani në komente mendime, pyetje apo kritika.

Mësim të mbarë.

Sistem KodiBB dhe Qeshjesh me PHP është një postim nga: Feniksi.Com - Thesari i Njohurive



Forum-Al.com
Aty ku shqiptarët mblidhen!
 
Top