Redirection en php

Résolu
turkish15 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
-helper- Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   -
bonjour à tous, voilà, j'ai 3 pages espace membre en fonction de celui qui se connecte, pour ça j'ai une table user(id_user, username, password, id_role) ici id_role est une clé étrangère pour reconnaitre le role de l'utilisateur, exemple, id_role=1 est un admin.
le problème c'est que je n'arrive pas à rediriger chaque utilisateur qui se connecte vers son espace membre qui lui ai dédié.

voici mon index.php
    <?php
    // on teste si le visiteur a soumis le formulaire de connexion
    if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

    $base = mysql_connect ('localhost', 'root', '');
    mysql_select_db ('nice', $base);

    // on teste si une entrée de la base contient ce couple login / pass
    $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_real_escape_string($_POST['login']).'" AND password="'.mysql_real_escape_string(md5($_POST['pass'])).'"';
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $data = mysql_fetch_array($req);
    $sql2 = 'SELECT id_role FROM membre WHERE login="'.mysql_real_escape_string($_POST['login']).'" AND password="'.mysql_real_escape_string(md5($_POST['pass'])).'"';
    $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $role = mysql_fetch_object($req2);
	
	
	
	
    mysql_free_result($req);
	mysql_free_result($req2);
    mysql_close();

    // si on obtient une réponse, alors l'utilisateur est un membre
    if ($data[0] == 1 && $role==1) {
    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: administrateur.php');
    exit();
    }
	elseif ($data[0] == 1 && $role==2) {
    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: charge_etude.php');
    exit();
    }
	elseif ($data[0] == 1 && $role==3) {
    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: membre.php');
    exit();
	}
    // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    elseif ($data[0] == 0) {
    $erreur = 'Compte non reconnu.';
    }
    // sinon, probléme bdd
    else {
    $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    }
    }
    else {
    $erreur = 'Au moins un des champs est vide.';
    }
    }
    ?>
    <html>
    <head>
    <title>Accueil</title>
    </head>

    <body>
    Connexion à l'espace membre :<br />
    <form action="index.php" method="post">
    Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
    Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
    <input type="submit" name="connexion" value="Connexion">
    </form>
    <a href="inscription.php">Vous inscrire</a>
    <?php
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    </body>
    </html>

3 réponses

Utilisateur anonyme
 
Bonjour

D'après cette ligne :
$role = mysql_fetch_object($req2);

$role est un objet, pas un nombre. Donc tu ne peux pas le comparer à 1 ou à 2 ou à 3 comme tu le fais dans
&& $role==1
.
La valeur à tester, c'est
$role->id_role
, pas
$role
tout court.
1
-helper- Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   27
 
Salut !

Je vois que y a du mieux ! mysql_real_escape_string a fait son apparition !
On se connecte toujours avec l'utilisateur root et sans mot de passe.... Enfin bref on va dire que tu fais des tests sur un serveur chez toi !...

Pourquoi faire 2 requêtes alors que l'intégralité des infos peut être récupéré en une seule fois ? Je note au passage que tu es repassé sur un modèle un utilisateur = 1 seul rôle, hier c'était un utilisateur peut avoir plusieurs rôles...

Voilà comment j'aurais codé ton affaire...

// Récupération des variables
$sLogin = mysql_real_escape_string( $_POST['login'] );
$sPass = mysql_real_escape_string( $_POST['pass'] );

// Recupère le role si il existe
$hRet = mysql_query( "SELECT 'id_role' FROM membre WHERE login = $sLogin AND password = MD5($sPass)" );
if( ($aRow = mysql_fetch_array( $hRet )) !== false )
{
   switch( $aRow['id_role'] )
   {
        case 1: $sPage = 'administrateur.php'; break;
        case 2: $sPage = 'charge_etude.php'; break;
        default: throw new Exception('Role inconnu !')
   }
   header( "location: $sPage" );
}


Ce que je ne comprends pas, c'est qu'est ce qui ne marche pas bien exactement ????

S@M
0
turkish15 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
En fait, j'ai changé le script, je me suis trempé en utilisant mysql_fetch_object ( faut dire que je suis super novice en PHP), du coup j'ai corrigé ça.
Merci pour votre aide.
0
-helper- Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   27
 
Pas de quoi !

mysql_fetch_object : j'ai cru voir que quelqu'un avait réagi dessus, tu peux l'utiliser, mais tu n'avais pas pris en compte que la variable de retour de cette fonction est un objet, et pas un nombre !

On est tous novices au départ... et même expérimenté, on fait toujours des erreurs !...
0