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