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 -
-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
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>
A voir également:
- Redirection en php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Avertissement de redirection - Forum Virus
- L'url suivante, censée aboutir à un article, donne lieu à une redirection indiquant que la page n'a pas été trouvée. retrouvez la page recherchée. reportez le titre de l’article et son auteur. - Forum Microsoft Edge / Internet Explorer
- Alert php ✓ - Forum PHP
3 réponses
Bonjour
D'après cette ligne :
$role est un objet, pas un nombre. Donc tu ne peux pas le comparer à 1 ou à 2 ou à 3 comme tu le fais dans
La valeur à tester, c'est
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
$roletout court.
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...
Ce que je ne comprends pas, c'est qu'est ce qui ne marche pas bien exactement ????
S@M
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
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.
Merci pour votre aide.
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 !...
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 !...