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 - 23 déc. 2022 à 14:56
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

S'il vous plaît j'ai besoin de votre aide. Je veux une page <index.php> contenant le formulaire d'authentification qui aiguillera l'internaute vers la page <menu_admin.php> si ce dernier a le rôle de admin, sinon vers la page <menu_consultation.php>. Merci de votre compréhension. NB :

une seule table : Utilisateur= user, password

Base de donnée : login


A voir également:

4 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
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)


2
King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 1
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...

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717 > King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024
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.

1

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 :

  1. <?php : début de script PHP.
  2. // Connexion à la base de données : commentaire expliquant ce qui suit.
  3. $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).
  4. $user = "username"; : déclaration de la variable $user contenant le nom d'utilisateur de la base de données.
  5. $password = "password"; : déclaration de la variable $password contenant le mot de passe de la base de données.
  6. $dbname = "login"; : déclaration de la variable $dbname contenant le nom de la base de données à laquelle se connecter.
  7. $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.
  8. if (!$conn) { : début d'une instruction conditionnelle qui vérifie si la connexion a échoué.
  9. 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é.
  10. // Récupération des données du formulaire : commentaire expliquant ce qui suit.
  11. $username = $_POST['user']; : récupération de la valeur du champ de formulaire user dans la variable $username.
  12. $password = $_POST['password']; : récupération de la valeur du champ de formulaire password dans la variable $password.
  13. // Vérification de l'existance de l'utilisateur dans la base de données : commentaire expliquant ce qui suit.
  14. $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.
  15. $result = mysqli_query($conn, $query); : exécution de la requête SQL et stockage du résultat dans la variable $result.
  16. 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.
  17. // Récupération du rôle de l'utilisateur : commentaire expliquant ce qui suit.
  18. $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.
  19. $role = $row['role']; : récupération de la valeur du champ role de la ligne de résultat dans la variable $role.
  20. if ($role == 'admin') { : début d'une instruction conditionnelle qui vérifie si l'utilisateur a le rôle d'admin.
  21. // Redirection vers la page de menu pour les admins : commentaire expliquant ce qui suit.
  22. header("Location: menu_admin.php"); : redirection de l'utilisateur vers la page menu_admin.php.
  23. } else { : début de la section "sinon" de l'instruction conditionnelle.
  24. // Redirection vers la page de menu pour les utilisateurs non-admins : commentaire expliquant ce qui suit.
  25. header("Location: menu_consultation.php"); : redirection de l'utilisateur vers la page menu_consultation.php.
  26. } : fin de l'instruction conditionnelle.
  27. } 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.
  28. // Affichage d'un message d'erreur si l'authentification a échoué : commentaire expliquant ce qui suit.
  29. 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.
  30. mysqli_close($conn); : fermeture de la connexion à la base de données.
  31. ?> : 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.

1
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
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

0
Noa > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
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'option PASSWORD_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.

1
King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 1 > Noa
24 déc. 2022 à 12:44

Merci beaucoup je vais essayer voir...

0
King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 1
24 déc. 2022 à 12:46

Dans ce cas on a une seule table n'est ce pas ?

0
King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 1
24 déc. 2022 à 15:18

Merci beaucoup c'est bon. Mais je voulais convertir en PDO et je n'ai pas pu...

0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
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.


0
King__wild02 Messages postés 12 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 23 août 2024 1
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 ?


0