Petit prob de session avec multiple accés

Signaler
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008
-
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-

29 réponses

Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

pq mon message ne s'affiche pas ?? :s
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

bonjours voici mon problème
j'ai ca dans verif.php

<?php
if($_POST["login"] != "" && $_POST["pass"] != "")
{
//$login = $_POST["login"] ;
//$pass = md5($_POST["pass"]) ;

//connexion au serveur
$cnx =mysql_connect("localhost","root","xxxx7777") or die ("Pb connexion a la base ".mysql_error());
//sélection de la base de données
$db = mysql_select_db("dbfasung") or die ("Pb selection base ".mysql_error());

//création de la requête SQL
$sql = 'SELECT statut,login,pass_md5 FROM users WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
//exécution de la requête SQL
$requete = mysql_query($sql, $cnx) or die($sql."
".mysql_error()) ;

//on récupère le résultat
$result = mysql_fetch_object($requete) ;
//si la requête s'est bien passée
if(is_object($result))
{
//début de la sessions
session_start() ;
//enregistrement d'une variable de session, ici le login de l'utilisateur

$_SESSION["login"] = $result->login;
switch ($result->statut) {
case "cat1":
header("Location: membership.php") ;
break;
case "cat2":
header("Location: membership2.php") ;
break;
case "cat3":
header("Location: membership3.php") ;
break;
case "cat4":
header("Location: membership4.php") ;
break;
}
}//fin if
//sinon on retourne à la page d'inscription
else
{
header("Location: index.php") ;
}//fin else
}//fin if
/*
sinon on retourne à la page d'inscription
*/
else
{
header("Location: index.php") ;
}//fin else
?>



et ca dans la page ou je veux que cat1 ou n'importe quel cat par apres soit

<?php
session_start() ;
if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")
{
header("Location index.php") ;
}//fin de if
elseif (isset($_SESSION["login"]) && ($_SESSION["login"]) == "cat1")
{
?>
<html>
le code de ma page
</html>

<?php
}fin du else
?>


et dans ma bdd j'ai id, statut, login, pass_md5, age ect....

et pourtant qd je me log il me remet direct sur index.php comme si le pass été pas bon.

Au debut j'avais pas mis les "break;" dans le switch donc je pensais que c'était ça mais non rien à voir il veux pas se logger.

je fait d'autres test pour voir ...

Si quelqu'un à une brillante idée
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Tout d'abord tu joue avec les is_ (is_object) mais pas avec les empty, ton code au début, met voir :
if($_POST["login"] != "" && $_POST["pass"] != "") 
> if (!empty ($_POST['login'] && !empty ($_POST['pass'])
n'oublie pas de tester s'ils ont été crée (isset)
Favorise les simple quote au lieu des doubles

Ton code est difficile à comprendre à cause de l'indentation.
Si j'ai bien compris, il redirige à index.php dans deux cas :
soit $result n'est pas un objet, soi if($_POST["login"] != "" && $_POST["pass"] != "") n'est pas validée

Ce que je te conseil de faire tout d'abord, c'est de vérifier dans le fichier php de validation, si login et pass ont une valeur (un simple echo suivi d'un exit (c'est du débuggage donc c'est permit ! :))
Puis faire un echo juste en dessous de la condition (voir si ca va dans la condition, auquel cas c'est le $result qui fout la merde)

Une fois ca fait, tu regarde quel valeur à $result (var_dump ($result)), si c'est un objet ou non. Si s'en est pas un, c'est que c'est ptete ta requete qui merde.

Fait toutes ces démarches et tu devrait toruver le probleme:)
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

Non le prob est pas la car avant que j'essaye de le faire ne multiple accés ca marcher j'ai juste rajouter ca à mon script

$_SESSION["login"] = $result->login;
switch ($result->statut) {
case "cat1":
header("Location: membership.php") ;
break;
case "cat2":
header("Location: membership2.php") ;
break;
case "cat3":
header("Location: membership3.php") ;
break;
case "cat4":
header("Location: membership4.php") ;
break;

et biensur le champ statut dans ma table sql

sinon en simple user ca marche nickel, c'est pour ca que je suis un peu bloquer

pour l'indentation je l'avais poster une fois tout bien fait mais il ma rien afficher alors j'ai vite fait un copier coller pour le remettre :)

merci qd meme pour ta réponse
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
personnelement, le probleme ne vient pas de ton switch puisque tu disais que tu était redirigé sur une page index.php, qui ne figure pas dans ton switch.

Ta fait les différents tests que je t'ai dit ?
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

ben jsutement ca veut dire qu'il ne passe pas dedans

j'ai mis des echo pour voir et je tombe dans le else du 2eme if donc

if(is_object($result))
{
//début de la sessions
session_start() ;
//enregistrement d'une variable de session, ici le login de l'utilisateur
$_SESSION["login"] = $result->login;
switch ($result->statut)
{
case "cat1":
//header("Location: membership.php") ;
echo 'cat1';
break;
case "cat2":
//header("Location: membership2.php") ;
echo 'cat2';
break;
case "cat3":
//header("Location: membership3.php") ;
echo 'cat3';
break;
case "cat4":
//header("Location: membership4.php") ;
echo 'cat4';
break;
}
}//fin if
//sinon on retourne à la page d'inscription
else
{
//header("Location: index.php") ;
echo 'pas de cat';
}//fin else

donc je pense que j'ai un prob dans mon if (is_object($result))

je vasi regarder ce que je peux faire :)
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
c'est ce que je te disais au début
fait voir un var_dump ($result) pour voir si c'est pas la requete qui pose probleme ?
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

si je met if (var_dump($result))

il me met bool(false) pas de cat
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
met le avant le if, var_dump affiche le contenu d'une variable avec plein de détails
si ca te retourne bool(false) c'est que ton $result est vide : ta requete sql n'est pas bonne

tente ta requete sql (SELECT statut,login,pass_md5 FROM users WHERE
login="'.mysql_escape_string($_POST['login']).'" AND
pass_md5="'.md5(mysql_escape_string($_POST['pass'])).') directement dans phpmyadmin, en remplacant les variables par des que tu connais, tu verra si ca te retourne des lignes ou pas
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

donc je l'ai mis avant le if et il ma return false j'ai donc fait ma requete dans phpmyadmin(SELECT statut,login,pass_md5 FROM users WHERE login= "pom" AND pass_md5="ea416ed0759d46a8de58") et il me met la bonne réposne par contre si je met le pass en clair il me dit que ca existe pas donc pass_md5 'mandah' c'est peut etre ca "pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"" qui foire mais je l'utilisé avec et ca marcher je comprend plus rien la :)
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
à mon avis le probleme vient de la facon dont tu a généré le md5 de ton pass dans ta base de donnée, et la facon dont tu le fait dans ta requete

ta requete tu fait un md5(mysql_escape_string($_POST['pass']));
Le truc, c'est que md5 va aussi prendre en compte le mysql_escape_string, chose que tu n'a pas fait lors de l'insertion de ton pass en md5 dans la bdd. Tu vois ce que je veux dire
fait plutot un mysql_escape_string(md5(pass)); et ca devrait ptete etre mieux

Au passage, prefere sha1 à md5, c'est plus sécursié
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

ok jvais essayer mais j'ai rpis md5 car tout le monde parle de ca :) je débute en php alors j'ai rpis ce qu'il me semblé le plus simple :)

je go essayer ca :)

merci qd même déjà pour ton aide
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

bon j'ai fait ca pour ma requete

$login = mysql_escape_string($_POST['login']) ;
$pass = mysql_escape_string(md5($POST['pass']));

$sql "SELECT statut,login,pass_md5 FROM users WHERE login '$login' AND pass_md5 = '$pass'";

mais ca revien tjrs au même il me met bool(false)
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
et si tu ne met que where login='$login'; (sans le pass), juste pour voir ce que ca retourne ?
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

il met ca

object(stdClass)#1 (2) { ["statut"]=> string(4) "cat1" ["login"]=> string(3) "pom" }
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\wamp\www\SiteFasung\verif.php:21) in C:\wamp\www\SiteFasung\verif.php on line 25

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\SiteFasung\verif.php:21) in C:\wamp\www\SiteFasung\verif.php on line 25
cat1
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
tes warning c'est normal, c'est parce que tu a mis le var_dump, donc ca a affiché quelque chose, avant le start_session, chose qui ne faut pas. Mais comme on fait du débogage, on s'en fou :p

Ensuite, ta requete à marchée là, (elle t'affiche les valeurs de statut, et login. C'est donc la partie pass qui fou la merde
fait des echos de md5($pass) et compare le à celui de la bdd, puis fait de même avec mysql_escape_string, etc.

Tu verra bien quand ce sera identique et tu n'aura plus qu'à corriger ton code !
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

Alors la c'est pas mal qd je met
$login = mysql_escape_string($_POST['login']) ;
$pass = md5(mysql_escape_string($_POST['pass']));

et que je lui dit d'afficher

echo("'".md5(mysql_escape_string($_POST['pass']))."'") ;

il me met le pass coder de l'autre utilisateur de ma base

meme chose qd je met
$login = mysql_escape_string($_POST['login']) ;
$pass = mysql_escape_string(md5($_POST['pass']));

et qd je met
$login = ($_POST['login']) ;
$pass = md5($_POST['pass']));

la il met met n'importe quoi
c'est bizzard qd meme il inverse les lignes ...
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

bon j'ai delete et recréé les utilisateurs

la j'ai les bon mot de pass mais ca change rien il veux pas se loger
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
pas si t'a les bons mots de passe, avec ton $pass = mysql_escape_string(md5($_POST['pass']));, alors t'a plus qu'a faire WHERE login = '$login' AND pass_md5 = '$pass';  et ca devrait etre bon !
Messages postés
28
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 mai 2008

bon j'ia rélgler le prob mdr :) enfaite dans le md5 j'avais mis varchar(20)
Donc il enregistrer pas les dernier caractère :)

now j'ai un autre prob il arrive sur la page mais affiche rien

pourtant j'ai

<?php
if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")
{
header("Location index.php") ;
}//fin if
elseif (isset($_SESSION["login"]) && ($_SESSION["login"]) == "cat1")
{
?>
<html>
Tout le code de ma page
</html>
<?php
}fin du elseif
?>

donc ca devrait être accepter