fbpx

Website in CodeIgniter – Baza de date

0

 

Link GitHub: Atestat-CodeIgniter

Salutare si bine v-am regasit, astazi vom continua seria noastra de tutoriale despre cum puteti sa va construiti singuri atestatul de informatica.

Despre ce vom vorbi astazi? Astazi vom discuta despre baza de date a site-ului nostru. Am mentionat in episodul trecut ca trebuie sa va ganditi la structura acestuia.

Schema bazei de date
Schema bazei de date

Mai sus am descris in mare arhitectura site-ului nostru. Vom avea doua tabele principale: utilizatori si proprietati. Pentru a transpune aceasta imagine intr-un tabel SQL vom executa urmatoarele linii:

Tabelul Utilizatori:

Tabelul Proprietati:

Tabelul Locatii_proprietati:

Tabelul Tip_proprietati:

Tabelul Poze_proprietati:

Tabelul Contact:

Acum ca am creat tabelele, trebuie sa le umplem cu cateva date pentru a ne asigura ca totul functioneaza asa cum am planuit. Va las mai jos un exemplu de utilizator:

Models

Am discutat in tutorialul precedent despre arhitectura CodeIgniter si am lasat ultimul subiect „models” pentru a-l discuta astazi.

Clasa „models” a fost conceputa pentru a lucra cu informatiile din baza de date. De exemplu, noi vom avea pentru inceput 2 modele: unul pentru utilizatori si celalalt pentru proprietati. Asadar, trebuie sa avem doua fisiere separate care sa controleze informatiile din cele doua tabele.

Crearea unui model

Modelele sunt stocate in folderul applications/models. Urmatorul cod o sa va arate cum cream un model:

Fiecare model nou trebuie sa extinda clasa CI_Model (exact ca si in cazul controllerelor). Atunci cand iti denumesti modelul, ai grija sa il scrii cu litera mare la inceput. De asemenea, fisierul trebuie salvat ca si User_model.php la final.

Dupa ce am terminat de definit un model, acesta trebuie incarcat intr-un controller folosind linia:

Routing-ul in CodeIgniter

Inainte de a trece mai departe trebuie sa abordam inca un subiect important in CodeIgniter: rutarea.
CodeIgniter are un sistem prietenos de rutare, astfel incat iti poti gestiona destul de usor URL-urile. De obicei exista o relatie unu-la-unu intre un URL introdus de utilizator si controller-ul corespunzator.

De obicei un URL urmeaza urmatorul template:

  • Primul segment reprezinta controller-ul care este invocat. In cazul acesta se va cauta controller-ul „clasa”
  • Cel de-al doilea segment reprezinta functia din interiorul controller-ului „clasa” ce urmeaza sa o apelam. In cazul nostru se va apela functia (sau metoda) „functie” din interiorul controller-ului „clasa”
  • Cel de-al treilea segment reprezinta parametrii ce vor fi transmisi catre functia „functie”.

Daca doresti sa schimbi acest „template” de rutare, CodeIgniter iti face munca mai usoara.

Customizarea regulilor de rutare

Exista un fisier particular unde poti sa te ocupi de toate aceste reguli. Fisierul este localizat in application/config/routes.php. Aici vei gasi un vector denumit $route in care poti sa iti customizezi diferite reguli. Denumirea pe care o dai in $route va stabili ce va fi controlat, iar ceea ce pui dupa egal va stabili unde va fi controlat.

De exemplu daca scrii

Atunci cand accesezi http://127.0.0.1/paginafrumoasa CodeIngniter va executa functia „functiaMihai” din interiorul controller-ului „tutorial”

De asemenea trebuie sa ai grija la cele 3 route rezervate in CodeIgniter.

  • $route[‘default_controller’] – Aceasta ruta indica ce controller va fi incarcat daca URL-ul este gol, de obicei aici definesti pagina „acasa” sau „index”. Te incurajez sa folosesti aceasta ruta, altfel pagina 404 va aparea.
  • $route[‘404_override’] – Aceasta ruta indica ce controller va fi incarcat daca URL-ul ce a fost tastat nu este gasit. Functia default este localizata in application/views/errors 
  • $route[‘translate_uri_dashes’] – Dupa cum indica si numele, aceasta optiune iti ofera posibilitatea sa inlocuiesti dashurile (‘-‘ minusurile) din URL-uri cu underscoruri (‘_’). Aceasta optiune te salveaza de la mai multe erori, deoarece minusul nu este permis atunci cand declari denumirea unei functii. (de exemplu nu poti defini o functie „functia-Mihai()”)

Routele pot fi customizate folosind wildcard-uri sau regular expressions, dar tineti minte ca regulile voastre trebuie scrise dupa cele 3 reguli rezervate (descrise mai sus).

Wildcards

Putem folosii doua wildcard-uri descrise mai jos:

  • (:num) – Va urmarii un segment care va contine numere
  • (:any) – Va urmarii un segment care contine orice caracter

Exemplu:

In acest exemplu, daca in url se gaseste cuvantul „produs”, atunci orice numar ce vine dupa „/” se va duce ca si paramentru in functia „cauta_produs” din controller-ul „catalog”.

Configurarea bazei de date in CodeIgniter

Baza de date a site-ului poate fi configurata din fisierul application/config/database.php. De obicei trebuie sa setam baza de date in functie de stadiul proiectului nostru ( in dezvoltare / in productie / lansata).

Conectarea catre baza de date

Ne putem conecta la baza de date prin doua metode:

  • Conectarea automata – conectarea automata se poate realiza folosind fisierul application/config/autoload.php. Conectarea automata se va realiza de fiecare data cand o pagina se incarca, trebuie doar sa adaugam libraria bazei de date:

  • Conectarea manuala – Daca doresti sa realizezi conexiunea catre baza de date doar pe anumite pagini, putem sa realizam conexiunea manual de fiecare data folosind urmatoarea linie:

Inserarea

Pentru a insera un nou rand in baza noastra de date, putem folosii functia insert() folosind structura de mai jos.

  • Syntaxa: insert([$table = ”[, $set = NULL[, $escape = NULL]]])
  • Parametrii:
    • $table (string) – Numele tabelului
    • $set – Un vector asociativ pentru a lega coloana cu valoarea efectiva
    • $escape
  • Returneaza
    • TRUE – daca s-a executat cu succes
    • FALSE – daca esueaza

Urmatorul exemplu o sa va arate cum putem adauga un nou rand in tabelul utilizatori. Vectorul $data va contine informatiile ce urmeaza a fi inserate in tabelul utilizatori, trebuie doar sa dam acest vector ca si parametru in functia noastra si totul se va executa de la sine.

Updatarea

Pentru a updata o linie in baza de date vom folosii functia update() impreuna cu where() exact ca in exemplul de mai jos.

Functia where()

Functia where() va decide care dintre campuri vor fi updatate

  • Syntaxa: where($key[, $value = NULL[, $escape = NULL]])
  • Parametrii:
    • $key – Un vector asociativ pentru a lega coloana cu valoarea efectiva
    • $value – Daca folosesti o singura valoare, aici transmiti cheia
    • $escape

Functia update()

Si in final, functia update() va updata baza noastra de date

  • Syntaxa: update([$table = ”[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
  • Parametrii:
    • $table (string) – Numele tabelului
    • $set – Un vector asociativ pentru a lega coloana cu valoarea efectiva
    • $escape

Aceasta linie se poate traduce in urmatorul query SQL: UPDATE utilizatori SET name = ‘Nume Nou’ WHERE id = 2

Stergerea

Pentru a sterge un rand din baza de date, folosim functia delete().

  • Syntaxa: delete([$table = ”[, $where = ”[, $limit = NULL[, $reset_data = TRUE]]]])
  • Parametrii:
    • $table (string) – Numele tabelului

Hint: pentru a ne usura munca, vom folosi functia where() descrisa mai sus

Selectarea (sau extragerea)

Pentru a selecta un rand din baza de date, folosim functia get() descrisa mai jos.

  • Syntaxa: get([$table = ”[, $limit = NULL[, $offset = NULL]]])
  • Parametrii:
    • $table (string) – Numele tabelului
    • $limit (int) – Putem limita numarul rezultatelor

Hint: la fel ca si in cazul delete(), vom folosii functia where()

Primul nostru model

Dupa ce am discutat notiunile introductive, a venit vremea sa cream primul nostru model. Asa ca facem un fisier nou in applications/models pe care il vom denumi User_model.php

Iar pentru a apela functia insert_user(), vom modifica controller-ul „Tutorial” dupa cum urmeaza:

Pana data viitoare

1. Design login.html si register.html
2. Modelul pentru proprietati
Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More