From 5dbda3a6a0a75d0d9dc99a319fb2af4d8a7cdb19 Mon Sep 17 00:00:00 2001
From: Yasder5 <102179445+Yasder5@users.noreply.github.com>
Date: Mon, 23 Feb 2026 20:23:50 +0100
Subject: [PATCH 1/4] aaaaaaaaaaaaaaaaaaaaaaaaaa
---
.env | 3 ++-
controllers/project_controller.php | 1 +
views/project_display.tpl | 4 ++--
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/.env b/.env
index 759b611..312e8f9 100644
--- a/.env
+++ b/.env
@@ -6,4 +6,5 @@ DB_DATABASE=projet_folliow
DB_USERNAME=
DB_PASSWORD=
-IMG_PATH= uploads/projects/
\ No newline at end of file
+IMG_PROJECT_PATH = uploads/projects/
+IMG_USER_PATH = uploads/profiles/
\ No newline at end of file
diff --git a/controllers/project_controller.php b/controllers/project_controller.php
index a354734..60941e6 100644
--- a/controllers/project_controller.php
+++ b/controllers/project_controller.php
@@ -265,6 +265,7 @@
$objProject->hydrate($arrProject);
$this->_arrData["objProject"] = $objProject;
+ $this->_arrData["arrProject"] = $arrProject;
$this->_display("project_display");
} else {
header("Location: index.php?ctrl=project&action=home");
diff --git a/views/project_display.tpl b/views/project_display.tpl
index 1fe6866..046b5c3 100644
--- a/views/project_display.tpl
+++ b/views/project_display.tpl
@@ -22,7 +22,7 @@
-
From 42a41e53593a12b40f0d884805ac9a6766ff5245 Mon Sep 17 00:00:00 2001
From: Yasder5 <102179445+Yasder5@users.noreply.github.com>
Date: Mon, 23 Feb 2026 20:48:57 +0100
Subject: [PATCH 2/4] =?UTF-8?q?j'ai=20oubli=C3=A9=20un=20lien=20oopsi?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
views/_partial/header.tpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/views/_partial/header.tpl b/views/_partial/header.tpl
index 6a495b4..120b68e 100644
--- a/views/_partial/header.tpl
+++ b/views/_partial/header.tpl
@@ -27,7 +27,7 @@
-
- À propos
+ À propos
-
From 0c6088d4da0fa4fd7094220788f3812626e5c944 Mon Sep 17 00:00:00 2001
From: Yasder5 <102179445+Yasder5@users.noreply.github.com>
Date: Tue, 24 Feb 2026 19:42:05 +0100
Subject: [PATCH 3/4] ce souvenir lors de la connexion
---
controllers/project_controller.php | 21 +++++++++++++++++++++
controllers/user_controller.php | 22 +++++++++++++++++-----
entities/project_entity.php | 2 +-
models/user_model.php | 21 +++++++++++++++++++++
views/_partial/header.tpl | 1 +
5 files changed, 61 insertions(+), 6 deletions(-)
diff --git a/controllers/project_controller.php b/controllers/project_controller.php
index 60941e6..9b62f84 100644
--- a/controllers/project_controller.php
+++ b/controllers/project_controller.php
@@ -25,6 +25,27 @@
public function home(){
+ if (!isset($_SESSION['user']) && isset($_COOKIE['remember_me'])) {
+
+ $token_du_cookie = $_COOKIE['remember_me'];
+ $hash_a_verifier = hash('sha256', $token_du_cookie);
+
+ $objUserModel = new UserModel;
+ // 2. On cherche le jeton dans TA table "tokens" (avec token_user_id)
+ $row = $objUserModel->getTokenUser($hash_a_verifier);
+
+ if ($row) {
+ // 3. Jeton trouvé ! On récupère les infos de l'utilisateur
+ $user = $objUserModel->findUserById($row['token_user_id']);
+
+ if ($user) {
+ // 4. On recrée la session comme lors d'un login normal
+ $_SESSION['user'] = $user;
+ }
+ }
+ }
+
+
$intCategory = 0;
if (!empty($_GET['filter_cat'])) {
$intCategory = (int) $_GET['filter_cat'];
diff --git a/controllers/user_controller.php b/controllers/user_controller.php
index d981df7..5bcf302 100644
--- a/controllers/user_controller.php
+++ b/controllers/user_controller.php
@@ -36,7 +36,15 @@ class UserCtrl extends MotherCtrl {
// Ajoute l'utilisateur en session
$_SESSION['user'] = $arrResult;
$_SESSION['success'] = "Bienvenue, vous êtes bien connecté";
-
+ if (isset($_POST['remember_me'])) {
+
+ $token = bin2hex(random_bytes(32));
+ $token_hash = hash('sha256', $token);
+ $objUserModel->remember($_SESSION['user']['user_id'],$token_hash);
+
+ setcookie('remember_me', $token, time() + (24*60*60), "/", "", false, true);
+
+ }
header("Location:index.php");
exit;
}
@@ -49,11 +57,15 @@ class UserCtrl extends MotherCtrl {
public function logout(){
- session_start();
- /*session_destroy();
- session_start();*/
+
+ if (isset($_COOKIE['remember_me'])) {
+ $hash = hash('sha256', $_COOKIE['remember_me']);
+
+ $objUserModel = new UserModel;
+ $objUserModel->deleteToken($hash);
- // on supprime l'utilisateur en session
+ setcookie('remember_me', '', time() - 3600, "/");
+ }
unset($_SESSION['user']);
$_SESSION['success'] = "Vous êtes bien déconnecté";
diff --git a/entities/project_entity.php b/entities/project_entity.php
index 8f5ae79..cde9bbe 100644
--- a/entities/project_entity.php
+++ b/entities/project_entity.php
@@ -17,7 +17,7 @@ class Project extends Entity{
private int $_user;
private int $_category = 0;
private string $_creatorname;
- private string $_user_image;
+ private ?string $_user_image = null;
/**
diff --git a/models/user_model.php b/models/user_model.php
index f17b9a3..752ce19 100644
--- a/models/user_model.php
+++ b/models/user_model.php
@@ -70,6 +70,27 @@
return $rqPrep->execute();
}
+ public function remember(int $userId, string $token):bool{
+ $strRq = "INSERT INTO tokens (token_user_id, token_hash, token_created_at, token_expire_at) VALUES (:id, :token, NOW(), :exp)";
+ $rqPrep = $this->_db->prepare($strRq);
+ $rqPrep->bindValue(":id", $userId, PDO::PARAM_INT);
+ $rqPrep->bindValue(":token", $token, PDO::PARAM_STR);
+ $rqPrep->bindValue(":exp",
+ //pour faire que le cookies soit valable 1 jours
+ date('Y-m-d H:i:s', time() + (24*60*60))
+ , PDO::PARAM_STR);
+ return $rqPrep->execute();
+
+ }
+ public function getTokenUser(string $hash){
+ $strRq = $this->_db->prepare("SELECT token_user_id FROM tokens WHERE token_hash = :hash AND expires_at > NOW()");
+ return $strRq->execute(['hash' => $hash]);
+ }
+ public function deleteToken(string $hash){
+ $stmt = $this->_db->prepare("DELETE FROM tokens WHERE token_hash = :hash");
+ $stmt->execute(['hash' => $hash]);
+ }
+
public function update(object $objUser):bool{
$strRq = "UPDATE users SET
user_name = :name,
diff --git a/views/_partial/header.tpl b/views/_partial/header.tpl
index 120b68e..cb8df32 100644
--- a/views/_partial/header.tpl
+++ b/views/_partial/header.tpl
@@ -85,3 +85,4 @@
{include file="views/_partial/messages.tpl"}
+ {$smarty.cookies|vardump}
From 1b7527ab6636bd2af3d30c328f498f429ed84b4e Mon Sep 17 00:00:00 2001
From: Yasder5 <102179445+Yasder5@users.noreply.github.com>
Date: Tue, 24 Feb 2026 19:55:58 +0100
Subject: [PATCH 4/4] changement plus coherent
---
controllers/user_controller.php | 2 +-
models/user_model.php | 13 +++++++------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/controllers/user_controller.php b/controllers/user_controller.php
index 5bcf302..7df04e2 100644
--- a/controllers/user_controller.php
+++ b/controllers/user_controller.php
@@ -42,7 +42,7 @@ class UserCtrl extends MotherCtrl {
$token_hash = hash('sha256', $token);
$objUserModel->remember($_SESSION['user']['user_id'],$token_hash);
- setcookie('remember_me', $token, time() + (24*60*60), "/", "", false, true);
+ setcookie('remember_me', $token, time() + (15*24*60*60), "/", "", true, true);
}
header("Location:index.php");
diff --git a/models/user_model.php b/models/user_model.php
index 752ce19..9c6c7ce 100644
--- a/models/user_model.php
+++ b/models/user_model.php
@@ -76,19 +76,20 @@
$rqPrep->bindValue(":id", $userId, PDO::PARAM_INT);
$rqPrep->bindValue(":token", $token, PDO::PARAM_STR);
$rqPrep->bindValue(":exp",
- //pour faire que le cookies soit valable 1 jours
- date('Y-m-d H:i:s', time() + (24*60*60))
+ //pour faire que le cookies soit valable 15 jours
+ date('Y-m-d H:i:s', time() + (15*24*60*60))
, PDO::PARAM_STR);
return $rqPrep->execute();
}
public function getTokenUser(string $hash){
- $strRq = $this->_db->prepare("SELECT token_user_id FROM tokens WHERE token_hash = :hash AND expires_at > NOW()");
- return $strRq->execute(['hash' => $hash]);
+ $strRq = $this->_db->prepare("SELECT token_user_id FROM tokens WHERE token_hash = :hash AND token_expire_at > NOW()");
+ $strRq->execute(['hash' => $hash]);
+ return $strRq->fetch();
}
public function deleteToken(string $hash){
- $stmt = $this->_db->prepare("DELETE FROM tokens WHERE token_hash = :hash");
- $stmt->execute(['hash' => $hash]);
+ $strRq = $this->_db->prepare("DELETE FROM tokens WHERE token_hash = :hash");
+ return $strRq->execute(['hash' => $hash]);
}
public function update(object $objUser):bool{