Authentification des utilisateurs
rawiaGL
Messages postés
23
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Alors pour mon site web développé en PHP j'ai trois types d'utilisateurs qui sont déjà enregistrés dans la base de données , ces derniers se connectent via une même interface d'authentification et seront redirigé chacun vers son propre espace.
Donc l'accès au site est limité seulement à ces utilisateurs. Mon problème est que lorsque je tape n'importe quoi dans l'espace d'authentification (login et mot de passe ) je serai redirigé automatiquement vers la page d'accueil de l'administrateur alors que ça ne doit pas être le cas !!
voilà le bout de code que j'ai crée quelqu'un pourrai m'aider plz
<?php
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();
//connexion selon le type de l'utilisateur
switch ($row) {
case ($row['statut']==2):
$_SESSION['login'] = $_POST['login'];
header('Location:./admin/services.php');
exit();
echo ("you logged in as admin");
break;
case ($row['statut']==0):
$_SESSION['login'] = $_POST['login'];
header("location:./user/smtp_client.php");
echo ("you logged in as client");
break;
case ($row['statut']==1):
$_SESSION['login'] = $_POST['login'];
header("location:./sup/smtp_sup.php");
echo ("you logged in as supervisor");
break;
}
//if(($row['login'] != $login) ||($row['mot_de_passe'] != $mot_de_passe)) {
}
else {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('index.php'); // On inclut le formulaire d'identification
exit;
}
?>
Donc l'accès au site est limité seulement à ces utilisateurs. Mon problème est que lorsque je tape n'importe quoi dans l'espace d'authentification (login et mot de passe ) je serai redirigé automatiquement vers la page d'accueil de l'administrateur alors que ça ne doit pas être le cas !!
voilà le bout de code que j'ai crée quelqu'un pourrai m'aider plz
<?php
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();
//connexion selon le type de l'utilisateur
switch ($row) {
case ($row['statut']==2):
$_SESSION['login'] = $_POST['login'];
header('Location:./admin/services.php');
exit();
echo ("you logged in as admin");
break;
case ($row['statut']==0):
$_SESSION['login'] = $_POST['login'];
header("location:./user/smtp_client.php");
echo ("you logged in as client");
break;
case ($row['statut']==1):
$_SESSION['login'] = $_POST['login'];
header("location:./sup/smtp_sup.php");
echo ("you logged in as supervisor");
break;
}
//if(($row['login'] != $login) ||($row['mot_de_passe'] != $mot_de_passe)) {
}
else {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('index.php'); // On inclut le formulaire d'identification
exit;
}
?>
A voir également:
- Authentification des utilisateurs
- Double authentification google - Guide
- Code a 6 chiffres application d'authentification instagram - Forum Instagram
- Entrez l’un des codes à 8 chiffres fourni lors de la configuration de l’authentification à deux facteurs. ✓ - Forum Instagram
- Application d'authentification facebook - Guide
- Gestion des utilisateurs windows 10 - Guide
4 réponses
J'vois pas de souci du coté SQL ;
quoi que tu a bien mis l'authorisation ADMIN/USER sur Integer ?
sinon c'est un string ...
case ($row['statut']=='2'):
( Avec les quotes )
Même les maths ça n'a rien de compliquer.
quoi que tu a bien mis l'authorisation ADMIN/USER sur Integer ?
sinon c'est un string ...
case ($row['statut']=='2'):
( Avec les quotes )
Même les maths ça n'a rien de compliquer.
Bonsoir
1 -
Si les identifiants fournis sont incorrects, ta requête ne rendra rien donc $row vaudra 0. Il faudrait vérifier cela avant de faire le reste du traitement.
2 -
La syntaxe du switch n'est pas du tout celle-là en PHP. Ce serait plutôt :
1 -
$count=mysql_num_rows($result); $row=mysql_fetch_array($result);
Si les identifiants fournis sont incorrects, ta requête ne rendra rien donc $row vaudra 0. Il faudrait vérifier cela avant de faire le reste du traitement.
2 -
La syntaxe du switch n'est pas du tout celle-là en PHP. Ce serait plutôt :
switch ($row ['statut']) {
case 2: ...
case 0: ...
case 1: ...
}
tout marche très bien avec mon code , j'ai du modifier la syntaxe du switch et ça marche aussi mais le problème persiste.
en effet je veux interdire l'accès à tout login ou mot de passe qui n'est pas déjà un membre enregistré dans la base !
en effet je veux interdire l'accès à tout login ou mot de passe qui n'est pas déjà un membre enregistré dans la base !
Si tu as correctement testé la valeur de $count, seuls les membres qui fournissent des identifiants corrects peuvent se connecter. Si les autres y parviennent quand même, c'est que tu as mal - ou pas - fait ce test.
Remarque : dans
Remarque : dans
mysql_escape_string(md5($_POST['mot_de_passe'])), mysql_escape_string ne sert strictement à rien car md5 rend obligatoirement des caractères alphanumériques 'ordinaires'.