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? Vom face 3 pagini: o pagina de logare, o pagina de inregistrare si o pagina protejata ce poate fi accesata doar daca esti logat.
Design-ul celor 3 pagini
Cele 3 pagini le-am pus pe GitHub: aici. Le descarcati si le puneti in folderul _templateHTML. Dupa ce le-ati pus acolo, dati dublu click si ar trebuii sa vedeti cum arata cele 3 pagini: login.html, register.html si protected.html.
Acum, trebuie sa trecem folderul _templateHTML (folder ce nu tine de aplicatia noastra) in CodeIgniter. Am facut eu asta pentru voi: aici.
Ce am facut, pe scurt:
- Am mutat toate folderele din interiorul _templateHTML intr-un folder pe care l-am numit “assets“. Dupa aceea, am mutat folderul in radacina proiectului
- Am mutat paginile .html in folderul application/views
Daca analizam cele 3 pagini downloadate la inceput, putem observa ca acestea au acelasi header si acelasi footer, drept urmare, putem sa utilizam un template pentru toate paginile.
public function login() { $this->load->view('templates/header'); $this->load->view('pages/login'); $this->load->view('templates/footer'); }
Creearea unui form
Probabil ati observat ca cele doua pagini login.php si register.php au incadrate in ele doua formulare html (<form></form>). Pentru a integra formularul in CodeIgniter si a lucra cu el mai departe este esential sa deschidem formularul altfel.
In loc de <form> vom folosii:
<?php $attributes = array("name" => "signupform", "class" => "form-horizontal"); echo form_open("tutorial/process_register", $attributes); ?> <!-- cod vechi --> <?php echo form_close(); ?>
CodeIgniter – Validarea datelor
Validarea este un proces important atunci cand construim o aplicatie web. Ne asigura de faptul ca datele noastre sunt valide inainte de a le stoca sau procesa. CodeIgniter ne vine in ajutor cu validarea datelor, avand o procedura foarte simpla pentru a definii regulile.
Inainte de a ne apuca de lucru trebuie sa includem cateva fisiere:
$this->load->helper(array('form')); $this->load->library('form_validation');
Lista regulilor – explicate: CodeIgniter – User Guide 3
Asadar, aplicam cateva reguli din lista de mai sus, fiecarui camp din register:
$this->form_validation->set_rules('nume', 'Nume', 'trim|required|alpha|min_length[3]|max_length[30]'); $this->form_validation->set_rules('prenume', 'Prenume', 'trim|required|alpha|min_length[3]|max_length[30]'); $this->form_validation->set_rules('username', 'Utilizator', 'trim|required|is_unique[utilizatori.username]'); $this->form_validation->set_rules('email', 'Mail', 'trim|required|valid_email|is_unique[utilizatori.email]'); $this->form_validation->set_rules('password', 'Parola', 'trim|required|md5'); $this->form_validation->set_rules('cpassword', 'Confirma Parola', 'trim|required|matches[password]|md5');
Si al fiecarui camp din login:
$this->form_validation->set_rules("username", "Email", "trim|required"); $this->form_validation->set_rules("password", "Parola", "trim|required");
CodeIgniter – Sesiunea
Atunci cand construim website-uri, este necesar uneori sa urmarim activitatea din trecut a unui utilizator, pentru a-l putea ghida corespunzator. Si aici CodeIgniter ne vine in ajutor cu o clasa special creata pentru asta.
Initializarea sesiunii
Datele unei sesiuni sunt disponibile pe site, la nivel global, dar inainte de a folosii datele, trebuie sa le initializam. Haideti mai intai sa includem libraria ce se ocupa de sesiuni.
Modificam urmatoarea linie din fisierul application/config/autoload.php:
$autoload['libraries'] = array('database', 'session');
Pentru a incarca libraria cu sesiuni pe fiecare pagina a website-ului.
Tipul flashdata
CodeIgniter suport “flashdata”, sau “session data” care este disponibil doar pentru urmatorul request, fiind automat sters dupa aceea. Este foarte folositor cand doresti sa afisezi o informatie o singura data (de exemplu: “te-ai inregistrat cu succes”).
Adaugarea datelor intr-o sesiune
Sa spunem ca un utilizator se logheaza pe site. Odata autentificat, putem adauga numele lui de utilizator si email-ul in sesiune, facand aceste date disponibile global, pe orice pagina am accesa din site.
$data = array( 'username' => 'simpleuser', 'email' => '[email protected]', 'logged_in' => TRUE ); $this->session->set_userdata($data);
Verificarea datelor dintr-o sesiune
Daca doresti sa extragi datele dintr-o sesiune, va trebui sa scrii:
echo $this->session->userdata('logged_in');
Functia process_register()
Dupa ce am verificat daca datele sunt corecte (folosind form_validation)
$data = array( 'prenume' => $this->input->post('prenume'), 'nume' => $this->input->post('nume'), 'username' => $this->input->post('username'), 'email' => $this->input->post('email'), 'parola' => $this->input->post('password'), 'rol' => 1 ); if ($this->user_model->insereaza_utilizator($data)) { $this->session->set_flashdata('msg','<div class="alert alert-success text-center">Te-ai inregistrat cu succes! Acum te poti autentifica!</div>'); redirect('tutorial/login'); } else { // error $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Eroare!</div>'); redirect('tutorial/register'); }
Am realizat functia insereaza_utilizator() in tutorialul precedent. Daca utilizatorul se insereaza cu succes in baza de date, se va seta un mesaj temporar, ce l-am denumit “msg”.
Functia process_login()
if ($this->form_validation->run() == FALSE) { $this->session->set_flashdata('msg', '<div class="alert alert-danger">Datele introduse sunt incorecte.</div>'); redirect("tutorial/login"); } else { $uresult = $this->user_model->get_user($username, $parola); if (count($uresult) > 0) { $sess_data = array( 'loggedin' => TRUE, 'uname' => $uresult[0]->username, 'uid' => $uresult[0]->ID, 'prenume' => $uresult[0]->prenume, 'nume' => $uresult[0]->nume, 'email' => $uresult[0]->email); $this->session->set_userdata($sess_data); redirect("tutorial/"); } else { $this->session->set_flashdata('msg', '<div class="alert alert-danger">Datele introduse sunt incorecte.</div>'); redirect("tutorial/login"); } }
Functia get_user()
function get_user($username, $parola){ $this->db->where('username', $username); $this->db->where('parola', $parola); $query = $this->db->get('utilizatori'); return $query->result(); }
Pana data viitoare (= asta’i tema):
- Realizati un buton de logout functional in pagina protected.php
- Afisati rolul utilizatorului in pagina protected.php
- Realizati o noua pagina insereaza_proprietate.php prin care sa putem insera proprietati in tabel. (Trebuie sa definiti un nou model, bine-nteles)
- Aranjati putin atestatul, gasiti nume potrivite pentru menu, faceti cateva pagini in plus.
Nota: Urmatorul episod va fi lansat pe 16 noiembrie 2018 (luam o saptamana pauza – facultatea).