From 96c879d0f9c8b2e885372d45bcf902e350dd8900 Mon Sep 17 00:00:00 2001 From: teissier <vi.teissier@gmail.com> Date: Wed, 29 May 2024 12:29:53 +0200 Subject: [PATCH] connexion presque finie --- application/config/autoload.php | 2 +- application/config/config.php | 2 +- application/controllers/Connect.php | 83 ++++++++++++++++++++++++++++ application/models/User_model.php | 21 +++++++ application/views/create.php | 32 +++++++++++ application/views/layout/header.php | 28 ++++++---- application/views/layout/header.php~ | 5 +- application/views/login.php | 21 +++++++ application/views/logout.php | 29 ++++++++++ 9 files changed, 208 insertions(+), 15 deletions(-) create mode 100644 application/controllers/Connect.php create mode 100644 application/models/User_model.php create mode 100644 application/views/create.php create mode 100644 application/views/login.php create mode 100644 application/views/logout.php diff --git a/application/config/autoload.php b/application/config/autoload.php index 06d8675..10b76f3 100644 --- a/application/config/autoload.php +++ b/application/config/autoload.php @@ -58,7 +58,7 @@ $autoload['packages'] = array(); | | $autoload['libraries'] = array('user_agent' => 'ua'); */ -$autoload['libraries'] = array(); +$autoload['libraries'] = array('session'); /* | ------------------------------------------------------------------- diff --git a/application/config/config.php b/application/config/config.php index bfb06f0..ad034a1 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -387,7 +387,7 @@ $config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_samesite'] = 'Lax'; $config['sess_expiration'] = 7200; -$config['sess_save_path'] = NULL; +$config['sess_save_path'] = '/tmp'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE; diff --git a/application/controllers/Connect.php b/application/controllers/Connect.php new file mode 100644 index 0000000..2858a7b --- /dev/null +++ b/application/controllers/Connect.php @@ -0,0 +1,83 @@ +<?php +defined('BASEPATH') OR exit('No direct script access allowed'); + +class Connect extends CI_Controller { + + public function __construct() + { + parent::__construct(); + $this->load->model('User_model'); + $this->load->library('session'); + } + + public function create() + { + $this->load->library('form_validation'); + $this->form_validation->set_rules('nom', 'Nom', 'required'); + $this->form_validation->set_rules('prenom', 'Prénom', 'required'); + $this->form_validation->set_rules('email', 'Adresse mail', 'valid_email|required'); + $this->form_validation->set_rules('password', 'Password', 'min_length[5]|required'); + $this->form_validation->set_rules('cpassword', 'Confirmation Password', 'required|matches[password]'); + + if ($this->form_validation->run() === FALSE) { + $this->load->view('layout/header'); + $this->load->view('create'); + $this->load->view('layout/footer'); + } else { + $data = array( + 'nom' => $this->input->post('nom'), + 'prenom' => $this->input->post('prenom'), + 'email' => $this->input->post('email'), + 'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT) + ); + + if ($this->User_model->create_user($data)) { + // Redirect to a success page or login page + redirect('connect/login'); + } else { + // Handle error + $this->load->view('layout/header'); + $this->load->view('create'); + $this->load->view('layout/footer'); + } + } + } + + public function login() + { + $this->load->library('form_validation'); + $this->form_validation->set_rules('email', 'Email', 'required|valid_email'); + $this->form_validation->set_rules('password', 'Password', 'required'); + + if ($this->form_validation->run() === FALSE) { + $this->load->view('layout/header'); + $this->load->view('login'); + $this->load->view('layout/footer'); + } else { + $email = $this->input->post('email'); + $password = $this->input->post('password'); + + $user = $this->User_model->get_user_by_email($email); + + if ($user && password_verify($password, $user['password'])) { + // Set session data and redirect to a protected page + $this->session->set_userdata('user_id', $user['id']); + redirect('albums'); + } else { + // Handle login error + $data['error'] = 'Adresse email ou mot de passe incorrect'; + $this->load->view('layout/header'); + $this->load->view('login', $data); // Passer le message d'erreur à la vue + $this->load->view('layout/footer'); + } + } + } + + public function logout() + { + $this->session->unset_userdata('user_id'); + redirect('connect/login'); + } + + +} diff --git a/application/models/User_model.php b/application/models/User_model.php new file mode 100644 index 0000000..4858301 --- /dev/null +++ b/application/models/User_model.php @@ -0,0 +1,21 @@ +<?php +class User_model extends CI_Model { + + public function __construct() + { + $this->load->database(); + } + + public function create_user($data) + { + return $this->db->insert('user', $data); + } + + public function get_user_by_email($email) + { + $this->db->where('email', $email); + $query = $this->db->get('user'); + return $query->row_array(); + } +} +?> diff --git a/application/views/create.php b/application/views/create.php new file mode 100644 index 0000000..53d875f --- /dev/null +++ b/application/views/create.php @@ -0,0 +1,32 @@ +<?=validation_errors(); ?> +<?=form_open('connect/create')?> + <!-- Grid --> + <div class="grid"> + + <label for="prenom"> + Prénom + <input type="text" id="prenom" name="prenom" placeholder="Prénom" value="<?=set_value('prenom')?>" required> + </label> + + <label for="nom"> + Nom + <input type="text" id="nom" name="nom" placeholder="Nom" value="<?=set_value('nom')?>" required> + </label> + </div> + + <label for="email">Adresse mail</label> + <input type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required> + + <div class="grid"> + <label for="password">Password + <input type="password" id="password" name="password" placeholder="Password" value="<?=set_value('password')?>" required> + </label> + + <label for="cpassword">Confirmation password + <input type="password" id="cpassword" name="cpassword" placeholder="Confirmation Password" value="<?=set_value('cpassword')?>" required> + </label> + </div> + + <!-- Button --> + <button type="submit">Submit</button> +</form> diff --git a/application/views/layout/header.php b/application/views/layout/header.php index cb0119d..90c4efd 100644 --- a/application/views/layout/header.php +++ b/application/views/layout/header.php @@ -2,7 +2,7 @@ <html lang="en" class="has-navbar-fixed-top"> <head> <meta charset="UTF-8" /> - <title>MUSIC APP</title> + <title>Dix heures</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" @@ -13,13 +13,19 @@ </head> <body> <main class='container'> - <nav> - <ul> - <li><strong>Music APP</strong></li> - </ul> - <ul> - <li><?=anchor('albums','Albums');?></li> - <li><?=anchor('artistes','Artistes');?></li> - <li><?=anchor('playlist','Playlist');?></li> - </ul> -</nav> + <nav> + <ul> + <li><strong>Dix heures</strong></li> + </ul> + <ul> + <li><?=anchor('albums','Albums');?></li> + <li><?=anchor('artistes','Artistes');?></li> + <li><?=anchor('playlist','Playlist');?></li> + <?php if ($this->session->userdata('user_id')): ?> + <li><?=anchor('connect/logout','Déconnexion');?></li> + <?php else: ?> + <li><?=anchor('connect/login','Connexion');?></li> + <?php endif; ?> + </ul> + </nav> + diff --git a/application/views/layout/header.php~ b/application/views/layout/header.php~ index cb0119d..e58a568 100644 --- a/application/views/layout/header.php~ +++ b/application/views/layout/header.php~ @@ -2,7 +2,7 @@ <html lang="en" class="has-navbar-fixed-top"> <head> <meta charset="UTF-8" /> - <title>MUSIC APP</title> + <title>Dix heures</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" @@ -15,11 +15,12 @@ <main class='container'> <nav> <ul> - <li><strong>Music APP</strong></li> + <li><strong>Dix heures</strong></li> </ul> <ul> <li><?=anchor('albums','Albums');?></li> <li><?=anchor('artistes','Artistes');?></li> <li><?=anchor('playlist','Playlist');?></li> + <li><?=anchor('connect','Connexion');?></li> </ul> </nav> diff --git a/application/views/login.php b/application/views/login.php new file mode 100644 index 0000000..a46748a --- /dev/null +++ b/application/views/login.php @@ -0,0 +1,21 @@ +<?=validation_errors(); ?> + +<?php if (isset($error)): ?> + <p style="color: red;"><?= $error ?></p> +<?php endif; ?> + +<?=form_open('connect/login')?> + <!-- Grid --> + <div class="grid"> + <label for="email">Adresse mail</label> + <input type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required> + + <label for="password">Password</label> + <input type="password" id="password" name="password" placeholder="Password" value="<?=set_value('password')?>" required> + </div> + <!-- Button --> + <button type="submit">Submit</button> + + <?=anchor('connect/create', "Pas de compte ? Créez-en un !");?> + +</form> diff --git a/application/views/logout.php b/application/views/logout.php new file mode 100644 index 0000000..7ac14d6 --- /dev/null +++ b/application/views/logout.php @@ -0,0 +1,29 @@ +<?php +defined('BASEPATH') OR exit('No direct script access allowed'); +?> +<!doctype html> +<html lang="en" class="has-navbar-fixed-top"> +<head> + <meta charset="UTF-8" /> + <title>Dix heures</title> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"/> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> + <?=link_tag('assets/style.css')?> +</head> +<body> + <main class='container'> + <nav> + <ul> + <li><strong>Dix heures</strong></li> + </ul> + <ul> + <li><?=anchor('albums','Albums');?></li> + <li><?=anchor('artistes','Artistes');?></li> + <li><?=anchor('playlist','Playlist');?></li> + <li><?=anchor('connect/login','Connexion');?></li> + </ul> + </nav> + <p>Vous êtes déconnecté.</p> + </main> +</body> +</html>