fbpx

Website in CodeIgniter – Login si Register

de Mihai-Alexandru

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

Comentarii

S-ar putea sa iti placa