accès aux pages à travers type utilisateur

redirection

a marqué ce sujet comme résolu.

Bonjour tout le monde, j’essaye de rediriger les utilisateurs après authentification aux pages en fonction de leur type utilisateur, mais ma redirection ne fonctionne pas,et voilà ce que je fais:

<?php if (isset($_POST['envoi'])) { 
    $adresse_courriel = trim($_POST['adresse_courriel']); 
    $mot_passe = trim($_POST['mot_passe']); 
    $type_utilisateur = trim($_POST['type_utilisateur']);
    if (sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe,$type_utilisateur) === 1) { 
        
        session_start(); 
         $_SESSION['identifiant_utilisateur'] = $adresse_courriel;
        if($type_utilisateur == 'admin'){
            header("Location: gestionProduits.php"); 
        } 
        elseif ($type_utilisateur == 'client'){
            
            header("Location: gestionCatalogueProduits.php"); 
        }
        
    } else { $erreur = "Identifiant ou mot de passe incorrect."; 
           } 
}?>
 <form id="identification" action="authentification.php" method="post">
                <label>Identifiant</label>
                <input type="text" name="adresse_courriel" value="" required>
                <label>Mot de passe</label>
                <input type="password" name="mot_passe" value="" required>
                <input type="submit" name="envoi" value="Envoyez">
            </form>

ma requete SQL est dans une fonction :

function sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe,$type_utilisateur) {
$req = "SELECT * FROM utilisateurs
        WHERE adresse_courriel='$adresse_courriel' AND mot_passe = '$mot_passe'";
if ($result = mysqli_query($conn, $req)) {
    return mysqli_num_rows($result);
    } 
    else {
        errSQL($conn);
        exit;
    }
}

de l’aide SVP

Attend, il y a plein de problème dans ton code.

De 1, la comparaison mot_passe = '$mot_passe'. Non. On ne stocke JAMAIS un mot de passe en claire dans la BDD. Jamais.

Ensuite, $type_utilisateur = trim($_POST['type_utilisateur']). Le type d’utilisateur est indiqué par l’utilisateur ? C’est absurde. Il peut mentir ! Ne jamais se fier à l’utilisateur.

Ensuite, l’entête HTTP Location n’a d’intérêt qu’avec les codes de retour 3XX. Tu dois modifier le code de retour pour avoir une redirection effective. (Doc)

+1 -0

tu es trop fort par rapport à mon niveau super basique, 1-je vais changer la fonction sql pour ca:

function sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe,$type_utilisateur) {
$req = "SELECT * FROM utilisateurs
        WHERE adresse_courriel=? AND mot_passe = SHA2(?, 256) AND type_utilisateur =?";
    
    
    
 $stmt = mysqli_prepare($conn, $req);
    mysqli_stmt_bind_param($stmt, "sss", $adresse_courriel,$mot_passe,$type_utilisateur);

    if (mysqli_stmt_execute($stmt)) {
        $result = mysqli_stmt_get_result($stmt);
        $nbResult = mysqli_num_rows($result);
        $row = array();
        if ($nbResult) {
            mysqli_data_seek($result, 0);
            $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        }
        mysqli_free_result($result);
        return $row;
    } else {
        errSQL($conn);
        exit;
    }
}

``` 2- normalement en s'authentifiant l'user ne choisi pas le type_utilisateur, mais je sais pas ce que je dois faire dans cette partie la
3- faut il ajouter '/' c'est ca?
+0 -0

j’ai fait quelques modification, j’ai enlevé le type utilisateur des paramètres de la fonction:

function sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe) {
$req = "SELECT * FROM utilisateurs
        WHERE adresse_courriel=? AND mot_passe = SHA2(?, 256) ";
    $stmt = mysqli_prepare($conn, $req);
        mysqli_stmt_bind_param($stmt, "ss", $adresse_courriel,$mot_passe);

    if (mysqli_stmt_execute($stmt)) {
        $result = mysqli_stmt_get_result($stmt);
        $nbResult = mysqli_num_rows($result);
        $row = array();
        if ($nbResult) {
            mysqli_data_seek($result, 0);
            $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        }
        mysqli_free_result($result);
        return $row;
    } else {
        errSQL($conn);
        exit;
    }
}
if (isset($_POST['envoi'])) { 

    $adresse_courriel = trim($_POST['adresse_courriel']); 
    $mot_passe = trim($_POST['mot_passe']); 
     $liste = sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe);
  
    if (sqlControlerUtilisateur($conn, $adresse_courriel, $mot_passe) === 1) { 
        
        foreach ($liste as $row) :
        
        if($row['type_utilisateur'] == 'admin'){
            
            header("Location: /gestionProduits.php"); 
            
        } 
        elseif ($row['type_utilisateur'] == 'client'){
            
            header("Location: /gestionCatalogueProduits.php"); 
        }
        
        endforeach;
        
        
    } else { $erreur = "Identifiant ou mot de passe incorrect."; 
           } 
} 

<form id="identification" action="authentification.php" method="post">
                <label>Identifiant</label>
                <input type="text" name="adresse_courriel" value="" required>
                <label>Mot de passe</label>
                <input type="password" name="mot_passe" value="" required>
                <input type="submit" name="envoi" value="Envoyez">
            </form>

mais la je tombre directement ici: "Identifiant ou mot de passe incorrect."; :'(

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte