on s'arrete pour ce soir il est 00h05 quand meme

This commit is contained in:
Yasder5 2026-01-14 23:05:10 +01:00
parent 4f86bd2660
commit 082b1ae99a
7 changed files with 306 additions and 8 deletions

View file

@ -0,0 +1,140 @@
<?php
require("../app/models/user_model.php");
require("../app/entities/user_entity.php");
class UserCtrl{
public function login(){
include("../app/views/partials/header.php");
$strMail = $_POST['mail']??"";
$strPwd = $_POST['pwd']??"";
// Tester le formulaire
$arrError = [];
if (count($_POST) > 0) {
// Vérifier le formulaire
if ($strMail == ""){
$arrError['mail'] = "Le mail est obligatoire";
}
if ($strPwd == ""){
$arrError['pwd'] = "Le mot de passe est obligatoire";
}
// Si le formulaire est rempli correctement
if (count($arrError) == 0){
// Vérifier l'utilisateur en BDD
$objUserModel = new UserModel;
$arrResult = $objUserModel->verifUser($strMail, $strPwd);
//var_dump($arrResult);
if ($arrResult === false){ // Si la base de données ne renvoie rien
$arrError[] = "Mail ou mot de passe invalide";
}else{
// Ajoute l'utilisateur en session
/*$_SESSION['firstname'] = $arrResult['user_firstname'];
$_SESSION['name'] = $arrResult['user_name'];
$_SESSION['id'] = $arrResult['user_id'];*/
// j'enlève le mot de passe avant la session
//unset($arrResult['user_pwd']);
$_SESSION['user'] = $arrResult;
$_SESSION['success'] = "Bienvenue, vous êtes bien connecté";
header("Location:index.php");
exit;
//var_dump($_SESSION);
//var_dump("Connecté");
}
}
}
include("../app/views/login.php");
include("../app/views/partials/footer.php");
}
public function create(){
// Variables d'affichage
$strH2 = "Créer un compte";
$strP = "Inscrivez-vous";
// Variables technique
$strPage = "create_account";
// inclusion du header
include("views/_partial/header.php");
// Traitement du formulaire
//var_dump($_POST);
$strName = $_POST['name']??"";
$strFirstname = $_POST['firstname']??"";
$strMail = $_POST['mail']??"";
$strPwd = $_POST['pwd']??"";
$strPwdConfirm = $_POST['pwd_confirm']??"";
$objUser = new User;
$objUser->hydrate($_POST);
/*
$objUser->setName($strName);
$objUser->setFirstname($strFirstname);
$objUser->setMail($strMail);
$objUser->setPwd($strPwd);
*/
// Tester le formulaire
$arrError = [];
if (count($_POST) > 0) {
if ($objUser->getName() == ""){
$arrError['name'] = "Le nom est obligatoire";
}
if ($objUser->getFirstname() == ""){
$arrError['firstname'] = "Le prénom est obligatoire";
}
if ($objUser->getMail() == ""){
$arrError['mail'] = "Le mail est obligatoire";
}else if (!filter_var($objUser->getMail(), FILTER_VALIDATE_EMAIL)){
$arrError['mail'] = "Le format du mail n'est pas correct";
}
$strRegex = "/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{16,}$/";
if ($objUser->getPwd() == ""){
$arrError['pwd'] = "Le mot de passe est obligatoire";
}else if (!preg_match($strRegex, $objUser->getPwd())){
$arrError['pwd'] = "Le mot de passe ne correspond pas aux règles";
}else if($objUser->getPwd() != $strPwdConfirm){
$arrError['pwd_confirm'] = "Le mot de passe et sa confirmation ne sont pas identiques";
}
// Ajouter la vérification du mot de passe par regex
// Si le formulaire est rempli correctement
if (count($arrError) == 0){
// => Ajout dans la base de données
$objUserModel = new UserModel;
//$intNbInsert = $objUserModel->insert($strName, $strFirstname, $strMail, $strPwd);
$boolInsert = $objUserModel->insert($objUser);
if ($boolInsert === true){
$_SESSION['success'] = "Le compte a bien été créé";
//header("Location:index.php");
//exit;
}else{
$arrError[] = "Erreur lors de l'ajout";
}
//var_dump("tout est ok");
}
}
include("views/create_account.php");
include("views/_partial/footer.php");
}
public function logout(){
session_start();
/*session_destroy();
session_start();*/
// on supprime l'utilisateur en session
unset($_SESSION['user']);
$_SESSION['success'] = "Vous êtes bien déconnecté";
header("Location:index.php");
exit;
}
}

View file

@ -0,0 +1,51 @@
<?php
require_once("mother_entity.php");
class User extends Entity{
// Attributs
private string $_name = '';
private string $_firstname = '';
private string $_mail = '';
private string $_pwd;
/**
* Constructeur
*/
public function __construct(){
// Préfixe de la table pour hydratation
$this->_prefixe = 'user_';
}
// Méthodes - getters et setters
public function getName():string{
return $this->_name;
}
public function setName(string $strNewName){
$this->_name = $this->nettoyer($strNewName);
}
public function getFirstname():string{
return $this->_firstname;
}
public function setFirstname(string $strFirstname){
$this->_firstname = $this->nettoyer($strFirstname);
}
public function getMail():string{
return $this->_mail;
}
public function setMail(string $strMail){
$this->_mail = strtolower($this->nettoyer($strMail));
}
public function getPwd():string{
return $this->_pwd;
}
public function getPwdHash():string{
return password_hash($this->_pwd, PASSWORD_DEFAULT);
}
public function setPwd(string $strPwd){
$this->_pwd = $strPwd;
}
}

81
app/models/user_model.php Normal file
View file

@ -0,0 +1,81 @@
<?php
require('../config/database.php');
/**
* Traitement des requêtes pour les utilisateurs
* @author : Christel
* @version : V0.5
*/
class UserModel extends Connect{
// Attributs
// Méthodes
public function __construct(){
parent::__construct();
}
/**
* @return array
*/
public function findAllUsers():array{
// Ecrire la requête
$strRq = "SELECT user_id, user_firstname, user_name
FROM users ";
// Lancer la requête et récupérer les résultats
return $this->_db->query($strRq)->fetchAll();
}
/**
* @param string $strMail
* @param string $strPwd
* @return array|bool
*/
public function verifUser(string $strMail, string $strPwd):array|bool{
// 2. Construire la requête
$strRq = "SELECT user_id, user_name, user_firstname, user_pwd
FROM users
WHERE user_mail = '".$strMail."'";
// Récupère mon utilisateur
// Executer la requête et récupérer les résultats
$arrUser = $this->_db->query($strRq)->fetch();
// Vérification du mot de passe haché
if (password_verify($strPwd, $arrUser['user_pwd'])){
// Renvoi l'utilisateur
unset($arrUser['user_pwd']); // on enlève le pwd
return $arrUser;
}else{
return false;
}
}
//public function insert(string $strName, string $strFirstname, string $strMail, string $strPwd):int{
/**
* Fonction d'insertion d'un utilisateur en BDD
* @param object $objUser L'objet utilisateur
* @return bool Est-ce que la requête s'est bien passée (true/false)
*/
public function insert(object $objUser):bool{
// 2. Construire la requête
/*$strRq = "INSERT INTO users (user_name, user_firstname, user_mail, user_pwd)
VALUES ('".$objUser->getName()."',
'".$objUser->getFirstname()."',
'".$objUser->getMail()."',
'".$objUser->getPwdHash()."')";*/
$strRq = "INSERT INTO users (user_name, user_firstname, user_mail, user_pwd)
VALUES (:name, :firstname, :mail, :pwd)";
// Préparer la requête
$rqPrep = $this->_db->prepare($strRq);
// Donne les informations
$rqPrep->bindValue(":name", $objUser->getName(), PDO::PARAM_STR);
$rqPrep->bindValue(":firstname", $objUser->getFirstname(), PDO::PARAM_STR);
$rqPrep->bindValue(":mail", $objUser->getMail(), PDO::PARAM_STR);
$rqPrep->bindValue(":pwd", $objUser->getPwdHash(), PDO::PARAM_STR);
// 3. Executer la requête
//var_dump($strRq);die;
//return $db->exec($strRq);
return $rqPrep->execute();
}
}

23
app/views/login.php Normal file
View file

@ -0,0 +1,23 @@
<section aria-label="Se connecter">
<?php if (count($arrError) > 0) {?>
<div class="alert alert-danger">
<?php foreach ($arrError as $strError){ ?>
<p><?php echo $strError; ?></p>
<?php } ?>
</div>
<?php } ?>
<form method="post">
<p>
<label>Mail:</label>
<input name="mail" value="<?php echo($strMail); ?>"
class="form-control <?php if (isset($arrError['mail'])) { echo 'is-invalid'; } ?> " type="text" >
</p>
<p>
<label>Mot de passe:</label>
<input name="pwd" class="form-control <?php if (isset($arrError['pwd'])) { echo 'is-invalid'; } ?> " type="text" >
</p>
<p>
<input class="form-control btn btn-primary" type="submit" >
</p>
</form>
</section>

View file

@ -30,16 +30,16 @@
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="#">Découvrir</a>
<a class="nav-link" href="?ctrl=&action=">Découvrir</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Customisation</a>
<a class="nav-link" href="?ctrl=''&action=''">Customisation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Orientation</a>
<a class="nav-link" href="?ctrl=''&action=''">Orientation</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">À propos</a>
<a class="nav-link" href="?ctrl=''&action=''">À propos</a>
</li>
</ul>
@ -49,10 +49,10 @@
<i class="fas fa-bell notification-bell"></i>
</li>
<li class="nav-item">
<button class="btn btn-login">Se connecter</button>
<a href="?ctrl=user&action=login"><button class="btn btn-login">Se connecter</button></a>
</li>
<li class="nav-item">
<button class="btn btn-signup">S'inscrire</button>
<a href="?ctrl=user&action=signin"><button class="btn btn-signup">S'inscrire</button></a>
</li>
</ul>
</div>

View file

@ -7,7 +7,7 @@
<span> - <?php echo $objProject->getCreatorname(); ?> </span>
</div>
<p class="mb-auto"><?php echo $objProject->getDescription(); ?></p>
<a href="article-javascript.html" class="icon-link gap-1 icon-link-hover stretched-link" aria-label="Lire l'article complet sur le devenir du JavaScript">
<a href="?id=<?php echo $objProject->getId()?>" class="icon-link gap-1 icon-link-hover stretched-link" aria-label="Lire l'article complet sur le devenir du JavaScript">
Lire la suite
<i class="fas fa-arrow-right" aria-hidden="true"></i>
</a>

View file

@ -1,10 +1,13 @@
<?php
$strCtrl = $_GET['ctrl']??'project';
$strMethod = $_GET['action']??'home';
$intId = $_GET['id']??null;
$boolError = false;
$strFileName = "../app/controllers/".$strCtrl."_controller.php";
if($intId!=null){
echo $intId;
}
if(file_exists($strFileName)){
require($strFileName);
$strClassName = ucfirst($strCtrl)."Ctrl";