Langage PHP
Résolu/FerméKing__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 - 24 déc. 2022 à 18:31
- Langage PHP
- Langage ascii - Guide
- Easy php - Télécharger - Divers Web & Internet
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
4 réponses
23 déc. 2022 à 16:16
Bonjour,
C'est très simple....
Il suffit que tu regardes sur internet comment faire un formulaire en HTML
Puis comment faire une requête SQL en PHP.
Reviens nous voir lorsque tu auras commencé à écrire ton code si tu rencontres un souci.... (car ici nous ne fournissons pas de code à la demande)
Bonjour.
Contrairement aux autres qui ne veulent pas te donner le code, je vais de le donner mais en te l'expliquant ligne par ligne pour que tu puisses le comprendre, et pas juste copier coller bêtement.
Voici un exemple de code PHP qui pourrait être utilisé pour créer une page d'authentification qui redirige l'utilisateur vers la page appropriée en fonction de son rôle :
<?php // Connexion à la base de données $host = "localhost"; $user = "username"; $password = "password"; $dbname = "login"; $conn = mysqli_connect($host, $user, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // Récupération des données du formulaire $username = $_POST['user']; $password = $_POST['password']; // Vérification de l'existance de l'utilisateur dans la base de données $query = "SELECT * FROM Utilisateur WHERE user='$username' AND password='$password'"; $result = mysqli_query($conn, $query); if (mysqli_num_rows($result) == 1) { // Récupération du rôle de l'utilisateur $row = mysqli_fetch_assoc($result); $role = $row['role']; if ($role == 'admin') { // Redirection vers la page de menu pour les admins header("Location: menu_admin.php"); } else { // Redirection vers la page de menu pour les utilisateurs non-admins header("Location: menu_consultation.php"); } } else { // Affichage d'un message d'erreur si l'authentification a échoué echo "Nom d'utilisateur ou mot de passe incorrect"; } mysqli_close($conn); ?>
Voici une explication de chaque ligne de code :
<?php
: début de script PHP.// Connexion à la base de données
: commentaire expliquant ce qui suit.$host = "localhost";
: déclaration de la variable$host
contenant l'adresse du serveur de base de données (localhost signifie que la base de données est sur le même serveur que le script PHP).$user = "username";
: déclaration de la variable$user
contenant le nom d'utilisateur de la base de données.$password = "password";
: déclaration de la variable$password
contenant le mot de passe de la base de données.$dbname = "login";
: déclaration de la variable$dbname
contenant le nom de la base de données à laquelle se connecter.$conn = mysqli_connect($host, $user, $password, $dbname);
: création de la connexion à la base de données en utilisant les informations de connexion fournies. La connexion est stockée dans la variable$conn
.if (!$conn) {
: début d'une instruction conditionnelle qui vérifie si la connexion a échoué.die("Connection failed: " . mysqli_connect_error());
: affichage d'un message d'erreur et arrêt de l'exécution du script si la connexion a échoué.// Récupération des données du formulaire
: commentaire expliquant ce qui suit.$username = $_POST['user'];
: récupération de la valeur du champ de formulaireuser
dans la variable$username
.$password = $_POST['password'];
: récupération de la valeur du champ de formulairepassword
dans la variable$password
.// Vérification de l'existance de l'utilisateur dans la base de données
: commentaire expliquant ce qui suit.$query = "SELECT * FROM Utilisateur WHERE user='$username' AND password='$password'";
: création de la requête SQL pour sélectionner l'utilisateur avec le nom d'utilisateur et le mot de passe spécifiés.$result = mysqli_query($conn, $query);
: exécution de la requête SQL et stockage du résultat dans la variable$result
.if (mysqli_num_rows($result) == 1) {
: début d'une instruction conditionnelle qui vérifie si un utilisateur a été trouvé dans la base de données.// Récupération du rôle de l'utilisateur
: commentaire expliquant ce qui suit.$row = mysqli_fetch_assoc($result);
: récupération de la ligne de résultat de la requête SQL dans un tableau associatif nommé$row
.$role = $row['role'];
: récupération de la valeur du champrole
de la ligne de résultat dans la variable$role
.if ($role == 'admin') {
: début d'une instruction conditionnelle qui vérifie si l'utilisateur a le rôle d'admin.// Redirection vers la page de menu pour les admins
: commentaire expliquant ce qui suit.header("Location: menu_admin.php");
: redirection de l'utilisateur vers la pagemenu_admin.php
.} else {
: début de la section "sinon" de l'instruction conditionnelle.// Redirection vers la page de menu pour les utilisateurs non-admins
: commentaire expliquant ce qui suit.header("Location: menu_consultation.php");
: redirection de l'utilisateur vers la pagemenu_consultation.php
.}
: fin de l'instruction conditionnelle.} else {
: début de la section "sinon" de l'instruction conditionnelle qui vérifie si un utilisateur a été trouvé dans la base de données.// Affichage d'un message d'erreur si l'authentification a échoué
: commentaire expliquant ce qui suit.echo "Nom d'utilisateur ou mot de passe incorrect";
: affichage d'un message d'erreur si aucun utilisateur n'a été trouvé dans la base de données.mysqli_close($conn);
: fermeture de la connexion à la base de données.?>
: fin de script PHP.
Note que ce code est à titre indicatif et qu'il peut être nécessaire de l'adapter à tes besoins spécifiques. Il est recommandé de sécuriser ton formulaire en utilisant des mesures telles que la validation des données et la protection contre les injections SQL.
bonne journée/soirée, au revoir.
24 déc. 2022 à 09:03
31 bis : on le stocke jamais un mot de passe en clair dans la base de données il faudra donc adapter le code qui t'ai proposé en utilisant les fonctions password_hash et password_verify
24 déc. 2022 à 10:54
C'est vrai, je propose donc une modification du code en rajoutant ces fonctions :
Voici comment le code peut être modifié pour utiliser les fonctions password_hash
et password_verify
:
<?php // Connexion à la base de données $host = "localhost"; $user = "username"; $password = "password"; $dbname = "login"; $conn = mysqli_connect($host, $user, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // Récupération des données du formulaire $username = $_POST['user']; $password = $_POST['password']; // Vérification de l'existance de l'utilisateur dans la base de données $query = "SELECT * FROM Utilisateur WHERE user='$username'"; $result = mysqli_query($conn, $query); if (mysqli_num_rows($result) == 1) { // Récupération du rôle de l'utilisateur et du hash du mot de passe stocké en base de données $row = mysqli_fetch_assoc($result); $role = $row['role']; $hash = $row['password']; // Vérification du mot de passe avec la fonction password_verify if (password_verify($password, $hash)) { if ($role == 'admin') { // Redirection vers la page de menu pour les admins header("Location: menu_admin.php"); } else { // Redirection vers la page de menu pour les utilisateurs non-admins header("Location: menu_consultation.php"); } } else { // Affichage d'un message d'erreur si le mot de passe est incorrect echo "Mot de passe incorrect"; } } else { // Affichage d'un message d'erreur si l'utilisateur n'a pas été trouvé en base de données echo "Utilisateur introuvable"; } mysqli_close($conn); ?>
Il est recommandé de hasher les mots de passe au moment de leur enregistrement en base de données, plutôt que de les comparer en clair. En effet, si tu stocke les mots de passe en clair, ils pourraient être facilement compromis en cas de fuite de la base de données. En utilisant les fonctions password_hash
et password_verify
, le mot de passe est protégé et il est impossible de le récupérer à partir du hash stocké en base de données. Si tu utilises une version de PHP inférieure à 5.5.0, tu devras inclure le fichier password.php
dans ton script pour pouvoir utiliser les fonctions password_hash
et password_verify
. Tu peux le télécharger à cette adresse : https://github.com/ircmaxell/password_compat. Je te recommande également de suivre quelques bonnes pratiques pour la gestion des mots de passe :
- Utilise un algorithme de hachage sécurisé, comme
PASSWORD_BCRYPT
. - Ajoute un "sel" aléatoire à chaque mot de passe avant de le hasher, pour empêcher les attaques par dictionnaire et rendre le hachage plus résistant aux attaques de type "rainbow table". Tu peux utiliser la fonction
password_hash
en spécifiant l'optionPASSWORD_DEFAULT
pour générer automatiquement un sel aléatoire et hasher le mot de passe de manière sécurisée. - Utilise des mots de passe complexes et uniques pour chaque compte. Il est recommandé d'utiliser un gestionnaire de mots de passe pour générer et stocker de manière sécurisée des mots de passe complexes.
- Demande à tes utilisateurs de changer régulièrement leur mot de passe et de ne pas le partager avec d'autres personnes. Je te conseille également de t'assurer que ta base de données et ton serveur web sont protégés contre les attaques externes, et de mettre en place des mesures de sécurité telles que l'authentification à double facteur pour protéger les comptes de tes utilisateurs.
Bonne journée.
24 déc. 2022 à 12:44
Merci beaucoup je vais essayer voir...
24 déc. 2022 à 12:46
Dans ce cas on a une seule table n'est ce pas ?
24 déc. 2022 à 15:18
Merci beaucoup c'est bon. Mais je voulais convertir en PDO et je n'ai pas pu...
23 déc. 2022 à 16:21
Bonjour à toi aussi (qui a fait l'effort de supprimer le bonjour mis par défaut...),
d'après ton profil, tu ne devrais pas avoir de souci, non ?
Je suis un étudiant de la troisième année. Un informaticien et un développeur web.
23 déc. 2022 à 19:00
Oui bonsoir, ???? désolé je n'ai pas vu tu sais comme c'est ma première fois d'utiliser celui ci...
Donc je peux avoir aussi des problèmes ?
23 déc. 2022 à 19:01
Sinon je suis un peu doué en php mais j'ai cherché les vidéos dont tu parles sur YouTube mais c'est n'ai plus le cas. Merci d'avance...
23 déc. 2022 à 19:15
Je n'ai jamais parlé de vidéo et même au contraire je les déconseille.
Il est préférable d'utiliser des tutoriels écrits au moins ça te permettra de faire des copier-coller si besoin.