//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.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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:)
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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.
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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
PoMmZz
Messages postés28Date d'inscriptionjeudi 9 février 2006StatutMembreDerniè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 :)
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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é
PoMmZz
Messages postés28Date d'inscriptionjeudi 9 février 2006StatutMembreDerniè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
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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 !
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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 !