Petit prob de session avec multiple accés

PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008 - 20 nov. 2007 à 22:10
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 23 nov. 2007 à 23:34

29 réponses

PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
20 nov. 2007 à 22:12
pq mon message ne s'affiche pas ?? :s
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
20 nov. 2007 à 22:13
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
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 nov. 2007 à 14:13
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:)
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
21 nov. 2007 à 16:28
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 nov. 2007 à 20:24
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 ?
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 12:19
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 :)
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 13:42
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 ?
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 16:03
si je met if (var_dump($result))

il me met bool(false) pas de cat
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 16:19
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
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 16:30
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 :)
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 16:48
à 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é
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 16:51
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
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 18:38
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)
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 20:55
et si tu ne met que where login='$login'; (sans le pass), juste pour voir ce que ca retourne ?
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 21:03
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
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 21:48
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 !
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 22:03
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 ...
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 22:11
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
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
22 nov. 2007 à 22:26
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 !
0
PoMmZz Messages postés 28 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 mai 2008
22 nov. 2007 à 22:38
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
0
Rejoignez-nous