-
03/02/2008 - 23h53 drazz
[PHP] Problème avec switch
Bonjour,
Tout d'abord voici le code : Code: <?php
//recupération des identifiants
$login = $_POST['login'];
$password = $_POST['password'];
//initialisation des variables pour la connection à la BDD
include("./initialisation.php");
//connection à la BDD
$connection = mysql_connect("127.0.0.1",$user,$password_bdd);
$db_selected = mysql_select_db($database, $connection);
if(!$connection) {
//redirection vers la page d'erreur
header("Location: http://" . $host . "/site_note/index.php?page=erreur");
} else {
//recherche du login saisi
$req_verification_login = "select login from internaute where login=\"$login\";";
$verification_login = mysql_query($req_verification_login);
while($resultat_verif_login = mysql_fetch_array($verification_login)){
$result_v_l = $resultat_verif_login["login"];
//ici que 2 solutions ... mais le if ne marchait pas ... va savoir pourquoi :o
switch($result_v_l){
case $login :
//recherche du password associé au login saisi
$req_verification_password = "select password from internaute where login=\"$login\";";
$verification_password = mysql_query($req_verification_password);
while($resultat_verif_password = mysql_fetch_array($verification_password)){
$result_v_p = $resultat_verif_password["password"];
//ici que 2 solutions ... mais le if ne marchait pas ... va savoir pourquoi :o
switch($result_v_p){
case $password :
//selection de toutes les informations de l'utilisateur
$req_selection_infos = "select * from internaute where login=\"$login\"";
$selection_infos = mysql_query($req_selection_infos);
while($select_infos = mysql_fetch_array($selection_infos)){
//début session
session_start();
//initialisation des variables de session
$_SESSION['designation'] = $select_infos["designation"];
$_SESSION['nom'] = $select_infos["nom"];
$_SESSION['prenom'] = $select_infos["prenom"];
$_SESSION['email'] = $select_infos["email"];
//redirection vers la page d'acceuil
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site_note/index.php?page=acceuil");
}
break;
default :
//redirection vers la page du mauvais password
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site_note/index.php?page=wrongpass");
break;
}
}
break;
default :
//redirection vers la page du mauvais login
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/site_note/index.php?page=wronglogin");
break;
}
}
}
//déconnection de la BDD
$deconnection = mysql_close($connection); Mon problème se situe au niveau du "switch" pour le login ...
En effet tout ce qui se trouve dans le "default" ne s'exécute pas ! Il me donne une page blanche ! Aucun message d'erreur ... il ne redirige rien ... bref incompréhension totale !
Par contre le contenu de "case $login" marche normelement.
A noter que le switch imbriqué pour le password qui possède la même logique, marche à la perfection.
Oui je sais il n'y a que deux possibilités j'aurais pu utiliser un "if else". C'était d'ailleurs mon premier choix. Cependant le "if" ne marche pas, "page blanche" comme le "default" ...
Voilà, quelqu'un pourrait il m'éclairer ? -
04/02/2008 - 06h06 Towl
Re : [PHP] Problème avec switch
Hum, après un rapide coup d'oeil (au saut du lit, donc pas forcément éclairé ) je ne vois pas trop pourquoi il marche pas.
Sinon, 2 remarques :
- Ton code ne fait aucune vérification des données utilisateurs (c'est mal, TRES mal [1] )
- en général, on fait plutot une vérification sur le couple login/pass en un coup : "SELECT * FROM users WHERE login = '" . mysql_real_escape_string(addsl ashes($user)) . "' AND password = ".mysql_real_escape_string(add slashes($user)) . "';" et tu tests si tu as 0 ou 1 reponse (0 => mauvais login / pass).
[1] Alors pourquoi c'est mal de ne pas vérifier les données utilisateurs : Et bien car il ne faut jamais avoir confiance en lui. Un exemple :
si je rentre login = " Towl '; DROP DATABASE " je te supprimerais toute ta BDD (le code présent ne marche pas en l'état actuel, mais c'est pour te faire comprendre l'idée)
The only limiting factor of the Linux operating system, is his user. - Linus Torvalds -
04/02/2008 - 14h45 xlasserre
Re : [PHP] Problème avec switch
Salut,
Tout a l'air correct ; mais la variable $login est-elle bien vide ? 
juste une idée...
-
04/02/2008 - 15h36 drazz
Re : [PHP] Problème avec switch
 Envoyé par Towl Hum, après un rapide coup d'oeil (au saut du lit, donc pas forcément éclairé  ) je ne vois pas trop pourquoi il marche pas.
Sinon, 2 remarques :
- Ton code ne fait aucune vérification des données utilisateurs (c'est mal, TRES mal [1]  )
- en général, on fait plutot une vérification sur le couple login/pass en un coup : "SELECT * FROM users WHERE login = '" . mysql_real_escape_string(addsl ashes($user)) . "' AND password = ".mysql_real_escape_string(add slashes($user)) . "';" et tu tests si tu as 0 ou 1 reponse (0 => mauvais login / pass).
[1] Alors pourquoi c'est mal de ne pas vérifier les données utilisateurs : Et bien car il ne faut jamais avoir confiance en lui. Un exemple :
si je rentre login = " Towl '; DROP DATABASE " je te supprimerais toute ta BDD (le code présent ne marche pas en l'état actuel, mais c'est pour te faire comprendre l'idée) Mmmh ... Je ne vois pas trop ce que celà change au "niveau sécurité" de vérifier le login et mot de passe en même temps.
Par contre effectivement, je comprends parfaitement l'idée pour l'injection de requêtes SQL. Je m'en vais de ce pas modifier tout ce code 
Merci pour ton intervention.
PS : En ce qui concerne mon problème d'origine, il est résolu -
04/02/2008 - 15h39 xlasserre
Re : [PHP] Problème avec switch
Dommage, j'aurais bien aimé savoir où était le problème d'origine ?!!
-
04/02/2008 - 16h29 drazz
Re : [PHP] Problème avec switch
 Envoyé par xlasserre Dommage, j'aurais bien aimé savoir où était le problème d'origine ?!! Bah en fait je ne sais pas trop non plus 
En fait (après conseils sur un autre forum), j'ai changé tous mes fetch_array en fetch_row puis remplacé mes "switch" en "if". Là le le "if" marche normalement, miracle.
Par contre lorsque l'on saisit rien et qu'on envoi donc une chaine vide, il me redirige vers la page d'acceuil ... or logiquement il faut qu'il le redirige vers la page d'erreur.
M'enfin l'essentiel c'est que le 3/4 du boulot soit fait ! -
04/02/2008 - 16h38 drazz
Re : [PHP] Problème avec switch
Nerf l'edit qui ne marche pas après 5 min ... 
M'enfin ... up donc !
Problème du champ vide résolu ! (via l'autre forum)
Un petit "if (mysql_num_rows($verification_ login) > 0)" et ca marche.
Merci à tous. -
04/02/2008 - 17h58 Towl
Re : [PHP] Problème avec switch
L'avantage de faire une vérif login / pass en une requete, c'est juste que tu fais une requete au lieux de 2, donc tu es plus gentil avec ta BDD (et ca c'est bien, ca se bichonne une BDD )
The only limiting factor of the Linux operating system, is his user. - Linus Torvalds | | |