Problème de redirection

Fermé
rawiaGL Messages postés 18 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 2 mai 2015 - 5 oct. 2014 à 13:53
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 5 oct. 2014 à 20:21
Bonjour,
j'ai trois types d'utilisateurs enregistrés dans ma base de données admin, utilisateur et superviseur, ils accèdent chacun à son espace propre via la même interface d'authentification
tout autre login ou mot de passe non inscrit n'a pas d'accès à l'application dont voici le code de la page login



session_start();
//require('./includes/login.php');

/*************************************/
/*Proc?dure de connexion au base
/***********************************/
$host="127.0.0.1";
$user="root";
$password="root";
$myconnex=mysql_connect($host,$user,$password) or die("connexion impossible");
////////////////////////////////// Test l'existance de la base et le nom de la base ////////////////////////
$bdd="stage";
mysql_select_db($bdd) or die ("erreur de connexion à la base de donn?es");

if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['mot_de_passe']) && !empty($_POST['mot_de_passe']))) {
extract($_POST);

// on recupère le password et le login de la table qui correspond au visiteur
$sql = 'SELECT * FROM `admin_smtp` WHERE login="'.mysql_escape_string($_POST['login']).'" AND mot_de_passe="'.mysql_escape_string(md5($_POST['mot_de_passe'])).'"';
$result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$count=mysql_num_rows($result);
$row=mysql_fetch_array($result);
mysql_free_result($result);
mysql_close();

if($row['login'] != $login) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('./index.php'); // On inclut le formulaire d'identification
exit;
}
else {
//connexion selon le type de l'utilisateur

switch ($row['statut']) {
case 2:
$_SESSION['login'] = $_POST['login'];
header('Location:./admin/services.php');
echo ("you logged in as admin");
break;
case 0:
$_SESSION['login'] = $_POST['login'];
header("location:./user/smtp_client.php");
echo ("you logged in as client");
break;
case 1:
$_SESSION['login'] = $_POST['login'];
header("location:./sup/smtp_sup.php");
echo ("you logged in as supervisor");
break;

}
}
}
else {
echo '<p>Vous avez oublie de remplir un champ.</p>';
include('./index.php'); // On inclut le formulaire d'identification
exit;

}

?>




Mon problème est lorsque je me connecte en tant que admin c'est à dire case statut = 2
il m'affiche le message "Mauvais login/password .."

j'arrive pas à comprendre où est exactement le problème ?

1 réponse

JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
5 oct. 2014 à 19:52
Salut,

- A quoi bon faire un "extract" si tu continues d'utiliser le tableau POST !
- Au lieu de vérifier si le login est correct (chose inutile, puisque si la requete retourne quelque chose, c'est que le login et le mot de passe sont corrects), vérifie seulement si "$count" est égale à 1, si c'est le cas, alors tout est correct, sinon, tu affiches le message d'erreur.
- Utilise "mysql_real_escape_string" au lieu de "mysql_escape_string", sinon, évite toutes ces fonctions ainsi que mysql_connect, mysql_select_db ... etc, sont obsolètes, il est fortement conseillé de changer de méthode de travail et de migrer vers PDO ou MySQLi.

- Ton erreur, mysql_fetch_array retourne un tableau indexés, et non pas un tableau associatif, donc la fonction que tu recherches est "mysql_fetch_assoc".

PS : Dans la page de l'admin, de l'utilisateur et du superviseur, est ce que tu vérifies tout en haut si l'utilisateur a le droit d'accès ?
Parce que si ce n'est pas le cas, n'importe qui peux se connecter en tant qu'utilisateur, puis taper dans la barre des adresses "http://localhost/sup/smtp_sup.php" et accéder a la section du superviseur !

Bon courage.
1
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 5/10/2014 à 21:16
@ludobabs
En fait non, elles ne sont pas ignorées !
Il est plus approprié de dire que les "echo" sont totalement inutiles après une redirection, parce que vu que tout le script s'exécute en seulement quelques millisecondes, on a alors l'impression que les messages ne sont pas générés, mais en réalité sur le serveur, ils le sont !

Donc les instructions après une redirection sont bel et bien exécutés, maintenant faut voir si elles sont utiles ou pas (cas de la directive "echo") !

D'ailleurs c'est pour ça que pleins de gens mettent "exit" ou "die" juste après une redirection, c'est pour dire au compilateur que ce n'est plus la peine de continuer l'exécution de la page.

SI tu as encore un doute, essaye ce script !
<?php
if(!isset($_GET['redirected'])) {
 header('Location: index.php?redirected=true');
 $_SESSION['tmp'] = true;
}
else echo $_SESSION['tmp'];


Normalement le script affiche une erreur, "variable $_SESSION['tmp'] introuvable", car sa définition se trouve après la redirection ... et ben non, la variable est bel et bien définie et affiché.
0