Connexion administrateur ne donne pas

Fermé
JeunLoup Messages postés 6 Date d'inscription jeudi 26 juillet 2018 Statut Membre Dernière intervention 14 août 2018 - 14 août 2018 à 17:24
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 14 août 2018 à 18:46
bon aprem à vous. j'aurais un problème et j'aurais vrmt besoin d'aide svp.
j'arrive pas à me connecter en mode administrateur 'admins' mais en mode utilisateur si 'users'

voici mon code



<?php
	// tous d'abord il faut démarrer le système de sessions
    session_start();
    
	if ($_POST) {
		require_once 'connexion.php'; 
		extract($_POST);
		if($type_user=="administrateur"){
			$sql="SELECT * FROM admins WHERE login_admin='$user_name' AND pwd_admin='$password'";
		}
		else{
			$sql="SELECT * FROM users WHERE login_user='$user_name' AND pwd_user='$password'";
		}

		$resultat=mysqli_query($bdd,$sql);
		if($resultat){
			if(mysqli_num_rows($resultat)==0){
				echo 'Utilisateur ou mot de passe incorrecte !!';
			}
			else if($type_user=="administrateur"){
				$row=mysqli_fetch_assoc($resultat);
				$_SESSION['id_admin']=$row['id_admin'];
				$_SESSION['login_admin']=$row['login_admin'];
				header('location:admin_page.php');
			}
			else{
				$row=mysqli_fetch_assoc($resultat);
				$_SESSION['id_user']=$row['id_user'];
				$_SESSION['login_user']=$row['login_user'];
				header('location:user_page.php');
			}
		}
		mysqli_free_result($resultat);
		mysqli_close($bdd);
	}
?>
<!DOCTYPE html>
<html lang="fr">

<head>
    <!-- Basic -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>
       page login
    </title>
</head>
<body>
	<form action='login.php' method='POST'>
		<label>Nom d'utilisateur :</label>
		<input type="text" name="user_name" placeholder="Nom d'utilisateur " /><br />

		<label>Mot de passe :</label>
		<input type="text" name="password" placeholder="Mot de passe " /><br />

		<label>Type d'utilisateur :</label>
		<select name="type_user">
			<option value="admin">Administrateur</option>
			<option value="user" selected>Utilisateur</option>
		</select><br />
		<input type="submit" value="Se connecter" >
	</form>
</body>

</html> 

A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
14 août 2018 à 18:46
Bonjour,

Faire des tables pour gérer les users d'un côté et les admins de l'autre est une erreur....
Il vaut mieux n'avoir qu'une seule table et jouer sur un champ que tu places à 1 ou 0 en fonction des droits de l'utilisateur.
Par exemple, une seule table "users" et un champ "admin"
Ce qui, dans ton code, donnerait :

<?php
// tous d'abord il faut démarrer le système de sessions
session_start();
 
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
 
//connexion à la bdd
require_once 'connexion.php';

//si le formulaire a été envoyé  
if (!empty($_POST)) { 
  extract($_POST);
  
  $isAdmin = $type_user=="administrateur" ? ' AND admin=1 ':"";
  $sql = "SELECT * 
          FROM users 
          WHERE login_user='$user_name' 
          AND pwd_user='$password'
          $isAdmin
          ";
  $resultat=mysqli_query($bdd,$sql);
  //si la requête a retournée une erreur
  if(!$resultat){
    echo("Error description: " . mysqli_error($con));
    exit();
  }
  if(mysqli_num_rows($resultat)==0){
    echo 'Utilisateur ou mot de passe incorrecte !!';
  }else 
    $row=mysqli_fetch_assoc($resultat);
    $_SESSION['user']['id']=$row['id'];
    $_SESSION['user']['login']=$row['login'];
    $_SESSION['user']['admin']=$row['admin'];
    if($type_user=="admin"){  
      header('location:admin_page.php');
      exit();//toujours mettre un exit après une redirection
    }else{
      header('location:user_page.php');
      exit();//toujours mettre un exit après une redirection
    }
  }
	mysqli_free_result($resultat);
	mysqli_close($bdd);
}
?>


De plus, il te faut "crypter" (ou plus exactement hacher ) le password du user.
Pour ça, tu dois utiliser les fonctions de php password_hash() pour le "crypter" et password_verify() pour le vérifier.
https://www.php.net/manual/fr/function.password-verify.php

NB: Ton souci se trouvait au niveau de la vérification de l'administrateur.
Tu regardais si
$type_user=="administrateur"

Alors que la value de ton champ est : "admin"
<option value="admin">


0