<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sasuke uchiwa</title>
    <description>The latest articles on DEV Community by sasuke uchiwa (@sasuke_uchiwa_e0a9d407ce1).</description>
    <link>https://dev.to/sasuke_uchiwa_e0a9d407ce1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3891403%2Fd33a308e-9aed-4596-b407-2598e48447fc.jpg</url>
      <title>DEV Community: sasuke uchiwa</title>
      <link>https://dev.to/sasuke_uchiwa_e0a9d407ce1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sasuke_uchiwa_e0a9d407ce1"/>
    <language>en</language>
    <item>
      <title>Application Web</title>
      <dc:creator>sasuke uchiwa</dc:creator>
      <pubDate>Tue, 21 Apr 2026 23:45:09 +0000</pubDate>
      <link>https://dev.to/sasuke_uchiwa_e0a9d407ce1/r-373g</link>
      <guid>https://dev.to/sasuke_uchiwa_e0a9d407ce1/r-373g</guid>
      <description>&lt;h2&gt;
  
  
  - Architecture et composants du projet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Inscription&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;register.php&lt;/em&gt;&lt;br&gt;
• Validation multi-critères, hashage bcrypt, vérification d'unicité en base de données&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Connexion&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;login.php&lt;/em&gt;&lt;br&gt;
• Authentification par email ou username, vérification sécurisée du mot de passe hashé&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Déconnexion&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;logout.php&lt;/em&gt;&lt;br&gt;
• Destruction complète de la session PHP, redirection vers la page de connexion&lt;/p&gt;

&lt;h2&gt;
  
  
  - Connexion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy63od1fuu3bywhzmx0e2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy63od1fuu3bywhzmx0e2.png" alt=" " width="637" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iz6trzsqinx3oqy6wq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8iz6trzsqinx3oqy6wq1.png" alt=" " width="692" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;• Voici la page de connexion. L'utilisateur entre son email ou son nom d'utilisateur avec son mot de passe. Si les informations sont incorrectes, un message d'erreur rouge s'affiche.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LE CODE :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
session_start();&lt;br&gt;
require "config/bd.php";&lt;/p&gt;

&lt;p&gt;if ($_SERVER["REQUEST_METHOD"] === "POST") {&lt;br&gt;
  $login    = trim($_POST["login"]);&lt;br&gt;
  $password = $_POST["password"];&lt;/p&gt;

&lt;p&gt;$stmt = $pdo-&amp;gt;prepare(&lt;br&gt;
    "SELECT * FROM users WHERE username = ? OR email = ?"&lt;br&gt;
  );&lt;br&gt;
  $stmt-&amp;gt;execute([$login, $login]);&lt;br&gt;
  $user = $stmt-&amp;gt;fetch(PDO::FETCH_ASSOC);&lt;/p&gt;

&lt;p&gt;if ($user &amp;amp;&amp;amp; password_verify($password, $user["password"])) {&lt;br&gt;
    $_SESSION["user_id"]  = $user["id"];&lt;br&gt;
    $_SESSION["username"] = $user["username"];&lt;br&gt;
    header("Location: dashboard.php");&lt;br&gt;
    exit;&lt;br&gt;
  } else {&lt;br&gt;
    $error = "Email / nom d'utilisateur ou mot de passe incorrect.";&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;strong&gt;Ce code permet :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• L'utilisateur peut se connecter avec son&lt;br&gt;
email OU son username.&lt;br&gt;
• La requête SQL cherche dans les deux colonnes en même temps.&lt;br&gt;
&lt;strong&gt;password_verify()&lt;/strong&gt;&lt;br&gt;
• compare le mot de passe entré avec le hash stocké en BDD.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Si correct : infos sauvegardées en session et redirection vers le dashboard.&lt;/li&gt;
&lt;li&gt;Sinon : message d'erreur rouge s'affiche.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  - Inscription
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Formulaire d'inscription&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c9hac9qlyhu5hwg4ymv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2c9hac9qlyhu5hwg4ymv.png" alt=" " width="670" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbtqopgqvet0cpww2dod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flbtqopgqvet0cpww2dod.png" alt=" " width="641" height="663"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;• l'utilisateur doit s'inscrire il remplit son nom, son email et son mot de passe on vérifie que les informations sont correctes et si tout est bon, un message vert s'affiche et l'utilisateur peut aller se connecter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LE CODE :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
session_start();&lt;br&gt;
require "config/bd.php";&lt;/p&gt;

&lt;p&gt;if ($_SERVER["REQUEST_METHOD"] === "POST") {&lt;br&gt;
  $username = trim($_POST["username"]);&lt;br&gt;
  $email    = trim($_POST["email"]);&lt;br&gt;
  $password = $_POST["password"];&lt;br&gt;
  $confirm  = $_POST["confirm_password"];&lt;/p&gt;

&lt;p&gt;$hashedPassword = password_hash($password, PASSWORD_DEFAULT);&lt;/p&gt;

&lt;p&gt;$stmt = $pdo-&amp;gt;prepare(&lt;br&gt;
    "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"&lt;br&gt;
  );&lt;br&gt;
  $stmt-&amp;gt;execute([$username, $email, $hashedPassword]);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ce code permet :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• L'utilisateur remplit : nom, email, mot de passe, &lt;br&gt;
confirmation.&lt;br&gt;
• Validations : champs obligatoires, email valide, mot &lt;br&gt;
de passe min 6 car., unicite.&lt;br&gt;
• Le mot de passe est chiffre avec bcrypt avant &lt;br&gt;
stockage.&lt;br&gt;
• Les donnees sont inserees dans la table users de &lt;br&gt;
riyad.&lt;br&gt;
• Un message vert confirme le succes&lt;/p&gt;

&lt;h2&gt;
  
  
  - Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29frw1cl7pqb1czlv935.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29frw1cl7pqb1czlv935.png" alt=" " width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gcumqs302mhl5512k5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gcumqs302mhl5512k5d.png" alt=" " width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LE CODE :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
session_start();&lt;/p&gt;

&lt;p&gt;if (!isset($_SESSION["username"])) {&lt;br&gt;
    header("Location: login.php");&lt;br&gt;
    exit;&lt;br&gt;
}&lt;br&gt;
?&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;lt;h1&amp;gt;VOITURE CHEZ ILYAS&amp;lt;/h1&amp;gt;&lt;br&gt;
  &lt;span&gt;Bienvenue, = htmlspecialchars($_SESSION["username"]) ?&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ce code permet :&lt;/strong&gt;&lt;br&gt;
• Verifie si l'utilisateur est connecte via la session.&lt;br&gt;
• Si non connecte : redirige automatiquement vers &lt;br&gt;
login.php.&lt;br&gt;
• Affiche le nom de l'utilisateur en haut a droite via la &lt;br&gt;
session.&lt;br&gt;
• Catalogue de 6 voitures avec images, prix et &lt;br&gt;
caracteristiques.&lt;br&gt;
• Bouton rouge "Se deconnecter" en bas de page&lt;br&gt;
Vérifie si l'utilisateur est connecté via la session.&lt;br&gt;
Si non connecté : redirigé automatiquement vers&lt;br&gt;
login.php&lt;br&gt;
• Affiche le nom de l'utilisateur en haut à droite grâce à la session.&lt;br&gt;
• Catalogue de 6 voitures avec images, prix et caractéristiques.&lt;br&gt;
• Bouton rouge"Se déconnecter"en bas de page.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;- Déconnexion — logout.php&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&amp;lt;?php&lt;br&gt;
session_start();&lt;br&gt;
session_destroy();&lt;br&gt;
header("Location: login.php");&lt;br&gt;
exit;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ce code permet :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;• session_start()&lt;/strong&gt;&lt;br&gt;
charge la session active.&lt;br&gt;
&lt;strong&gt;• session_destroy()&lt;/strong&gt;&lt;br&gt;
supprime toutes les données de session.&lt;br&gt;
• L'utilisateur est redirigé vers&lt;br&gt;
login.php.&lt;br&gt;
• Simple mais essentiel pour la sécurité — empêche l'accès au dashboard après déconnexion.&lt;/p&gt;

&lt;h2&gt;
  
  
  - Architecture — Base de données
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsz773qsy9ifvujxusxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsz773qsy9ifvujxusxc.png" alt=" " width="525" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;• Ce tableau montre les informations des utilisateurs dans la base de données.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;$host = "localhost";&lt;br&gt;
$db   = "riyad";&lt;br&gt;
$user = "root";&lt;br&gt;
$pass = "";&lt;br&gt;
&lt;em&gt;• Ce code permet de connecter le site web à la base de données afin de vérifier les informations des utilisateurs.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;new PDO&lt;/strong&gt;(&lt;br&gt;
  "mysql:host=$host;port=3307;dbname=$db;charset=utf8",&lt;br&gt;
  $user, $pass&lt;br&gt;
);&lt;br&gt;
&lt;em&gt;• Ce code crée une connexion à une base de données MySQL avec PHP&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
