Session n'autorise qu'un seul utilisateur

Eléphant du PHP | 291 Messages

21 oct. 2005, 20:25

Bonsoir,

En fesans des test sur une partie de code php (Voir ici) je viens de me rendre compte que même si j'ai plusieurs utilisateur enregistré dans la table gesten_utilisateur je n'arrive a m'hautentifier qu'avec un seul compte, je me demandais si cela pouvait provenir du code php (page login.php, en amont la page index.php avec formulaire) :
<?php
// Démarage de la session
session_name('gesten');
session_start();
$loginOK = false;

// Insertion du fichier admin/conf/conf.php
include ("../../conf/conf.php");

// Sequence de verification pour la session

// Si login vide erreur = 0
			if(strlen(trim($_POST['pseudo'])) < 1) { 
			header("Location: ../../index.php?erreur=0"); 
			exit();
			} 

// Si mdp vide erreur = 1
			if(strlen(trim($_POST['mdp'])) < 1) { 
			header("Location: ../../index.php?erreur=1"); 
			exit();
			}

// Si tout est bon

// Recherche du mot de passe en fonction du pseudo
	$sql = "SELECT * FROM gesten_utilisateur WHERE PSEUDO = '".addslashes($pseudo)."'";
	$req = mysql_query($sql) or die('Impossible de séléctionner les données dans la table users');
 
// Vérification du pseudo
	if (mysql_num_rows($req) > 0) {
    $data = mysql_fetch_assoc($req);
   
if ($mdp == $data['MOT_DE_PASSE']) {
      $loginOK = true;
    }
  }

// Pseudo validé alors mise en cache de l'ID_UTILISATEUR
    if ($loginOK) {
    
$sql2 = "SELECT g5.DROIT_GROUPE
FROM
gesten_utilisateur as g1,
gesten_utilisateur_groupe2 as g2,
gesten_utilisateur_groupe as g3,
gesten_utilisateur_groupe_droit as g4,
gesten_utilisateur_droit as g5

WHERE g1.PSEUDO ='".$pseudo."'
AND g1.ID_UTILISATEUR = g2.ID_UTILISATEUR
AND g2.ID_GROUPE = g3.ID_GROUPE
AND g3.ID_GROUPE = g4.ID_GROUPE
AND g4.ID_DROIT = g5.ID_DROIT";
$req2 = mysql_query($sql2) or die('Impossible de visualiser les droits');

// Création de la boucle qui stoque le/les droit(s) de l'utilisateur
        while($data2 = mysql_fetch_array($req2))
        {        
           $droit_groupe .= $data2['DROIT_GROUPE']." "; // Séparation par << espace >>
        }
		
// Mise en cache des variables de sessions    
    $_SESSION['id'] = $data['ID_UTILISATEUR'];
    $_SESSION['pseudo'] = $data['PSEUDO'];
    $_SESSION['mail'] = $data['MAIL'];
    $_SESSION['droit_groupe'] = $droit_groupe;

// Redirection vers le menu.php
header("Location: ../../index2.php"); 

} else {
// Si verification mauvaise erreur = 3
header("Location: ../../index.php?erreur=3");
}
?>
ou de la table en elle même :

Code : Tout sélectionner

CREATE TABLE `gesten_utilisateur` ( `ID_UTILISATEUR` int(11) NOT NULL auto_increment, `NOM` varchar(25) NOT NULL default '', `PRENOM` varchar(25) NOT NULL default '', `MOT_DE_PASSE` varchar(30) NOT NULL default '', `PSEUDO` varchar(30) NOT NULL default '', `MAIL` varchar(30) NOT NULL default '', PRIMARY KEY (`ID_UTILISATEUR`) ) TYPE=MyISAM AUTO_INCREMENT=26 ;
Si vous pouvez m'aider, merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 21:14

Salut, les variables $mdp et $pseudo viennent d'où ?
$pseudo= isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$mdp    = isset($_POST['mdp'])     ? $_POST['mdp']     : NULL;
ensuite htmlentities() et addslashes(). Puis quand tu aura besoin de ces variables dans le script tu fait appel a $pseudo et $mdp et plus aux variables POST.

puis pourquoi faire un choix de données (requete) QUE sur le pseudo ( si plusieurs utilisateurs ont le meme pseudo tu va inutilement avoir plusieur enregitrements a lire, remplace par:
$sql = "SELECT * FROM gesten_utilisateur WHERE PSEUDO = '".$pseudo."' AND MOT_DE_PASSE='".$mdp."'";
$req = mysql_query($sql) or die('Impossible de séléctionner les données dans la table users');

if (mysql_num_rows($req) == 1) //si un utilisateur correspond a ce passe et pseudo
{
    $data = mysql_fetch_assoc($req);
    $loginOK = true; 
    // ICI tout le traiement de la session
}
apres ça verifi les données de session si elles correpondent au donné de l'uilisateur si c'est le cas le probleme vient d'ailleur.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

21 oct. 2005, 21:43

Merci ca a l'air de mieux fonctionner, mis a part que si je change d'utilisateur il garde les groupes de l'utilisateur précedent et ajoute ceux du nouveau, faut que test encore.

Eléphant du PHP | 291 Messages

21 oct. 2005, 22:06

bon ben j'ai fais comme ca et maintenant ca affiche la bonne liste des droits, ca n'incremente plus :
<?php
session_name('gesten');
session_start();
// Remise à zéro de la liste des groupes
$droit_groupe = "";
$loginOK = false;
Merci Truc !!!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 22:10

j'allais te le proposer, mais bon puisque tu as trouvé toi meme c'est beaucoup mieux :D

(ca doit venir du faite que le register_global est a "on" et donc tu garde en mémoire la valeur de des droits précédents dans la variable $droits_goupe)

C'est [Résolu] alors ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

21 oct. 2005, 22:13

Oui pardon !

merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2005, 22:13

de rien, y a pas de quoi :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute