cs_medjai
Messages postés3Date d'inscriptionmardi 16 décembre 2008StatutMembreDernière intervention14 janvier 2009
-
13 janv. 2009 à 18:18
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 2023
-
19 janv. 2009 à 13:05
Bonjour à vous et tout d'abord Bonne année 2009 !! :p
Voilà pour tout dire, j'ai un problème en ce qui concerne mon authentification sur un site que je développe. Le pire c'est que je ne sais même pas ce qui cloche car je n'ai pas réellement de message d'erreur mais ce qui est sûr c'est que cela ne fonctionne pas comme prévue. o_O
J'ai un formulaire (avec 2 champs: login et pass; ce qui n'est vraiment pas trop compliqué normalement) mais j'ai beau renseigner les bons champs (avec ce qui se trouve dans ma table), je retourne toujours au formulaire sans être rediriger comme il se doit. :colere2:
(problème de la variable $loginOK qui affecte un header !!)
Si c'est bien cela, enfin je crois.. :-°
J'ai un code html pour le formulaire mais qui je pense est bon donc je donne mon script de vérification du formulaire qui je pense doit etre faux (sinon je ne serai pas là, lol :D ).
Voici le code:
Code : PHP
<?php
// On demarre la session
session_start();
function verif_login($login, $pass) {
$loginOK = false;
// On n'effectue les traitement qu'a la condition que les informations aient ete effectivement postees
if(isset($_POST['login']) && isset($_POST['pass']) && ($_POST['login'] && $_POST['pass'] != NULL)){
if (!empty($_POST['login']) && !empty($_POST['pass'])) {
mysql_connect( "localhost" , "" , "" ) or die ("pas d'ouverture mysql".mysql_error());
mysql_select_db("manadgersdb") or die ("connexion base marche pas".mysql_error());
$login = mysql_real_escape_string($_POST['login']);
$query mysql_query("SELECT 'id_clients', login, email, pass_md5 FROM clients WHERE login '$login'") or die ("la requete a echouee".mysql_error());
// On verifie que l'utilisateur existe bien
if ( mysql_num_rows($donnees) >0){
$donnees = mysql_fetch_assoc($query);
}
mysql_close();
// On verifie que son mot de passe est correct
if ((md5($pass)) == $donnees['pass_md5']) {
$_SESSION['id_clients'] = $donnees["id_clients"];
$_SESSION['login'] = $login;
$_SESSION['email'] = $donnees["email"];
$loginOK = true;
}
}
return $loginOK;
}
}
$loginOK = verif_login($_POST["login"], $_POST["pass"]);
//Maintenant dans la var loginOK il y a true si le login est bon, FALSE sinon
// Si le login a ete valide on met les donnees en sessions
if ($loginOK === true) {
header("location: menu.php");
}else{
header("location: monformulaire.php");
}
?>
Voilà et sims d'avance.
Peace
Si t'appelles une voyante et qu'elle ne décroche pas avant que ça sonne, alors raccroche ..!!
By JC.VD
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 13 janv. 2009 à 19:18
C'est un problème d'entête déjà envoyée lors de l'appel de header ('location...
En effet session_start() envoi déjà des headers, et il ne peuvent plus être réenvoyer.
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 13 janv. 2009 à 22:55
Salut,
J'ai parcouru rapidement.
Plutôt que d'utiliser la bufferisation je ferai plus simple :
if (isset ($_POST["login"]) && isset($_POST["pass"]) {
$loginOK = verif_login($_POST["login"], $_POST["pass"]);
//Maintenant dans la var loginOK il y a true si le login est bon, FALSE sinon
// Si le login a ete valide on met les donnees en sessions
if ($loginOK === true) {
header("location: menu.php");
}else{
header("location: monformulaire.php");
}
exit;
}
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 13 janv. 2009 à 23:47
... faut arrêter de parcourir rapidement; j'ai dit une connerie, Flachy Joe a raison : ob_start et ob_end_flush, autant pour moi.
J'en profite :
if ( mysql_num_rows($donnees) >0){
$donnees = mysql_fetch_assoc($query);
}
mysql_close();
// On verifie que son mot de passe est correctif ((md5($pass)) $donnees['pass_md5']) {>
si la requête ne retourne aucun résultat $donnees ne sera pas définie => bug, voir possibilité de faire de l'injection SQL.
mysql_close() => ne sert à rien
&& ($_POST['login'] && $_POST['pass'] != NULL)
=> ne sert à rien, non ?
Les "or die ("pas d'ouverture mysql".mysql_error());" sont dangereux : en cas d'erreur ils révèlent des infos importantes sur la structure de ta base
cs_medjai
Messages postés3Date d'inscriptionmardi 16 décembre 2008StatutMembreDernière intervention14 janvier 2009 14 janv. 2009 à 10:43
Merci, j'ai bien essayyé de modifier l'ordre des tests d'existence des varable login et pass mais rien, nada,niet.
Que dois-je conclure sachant que je n'ai pas encore une methode fructueuse pour debuguer..
Si t'appelles une voyante et qu'elle ne décroche pas avant que ça sonne, alors raccroche ..!!
By JC.VD[Insert_Emoticon%28%27/imgs2/smile_question.gif%27%29; ]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 14 janv. 2009 à 18:36
Je suis pas sur que quiconque regarde la liste des nouveaux échange, celle qui liste les thread par date de début est beaucoup plus utilisable, donc le up ne sert pas à grand chose....
Qu'en est il de l'utilisation de ob_start ?
Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks<
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 15 janv. 2009 à 08:43
Que dois-je conclure
=> tu dois en conclure qu'il faut utiliser la proposition de Flachy Joe et mes remarques du 13 janvier 2009 à 23:47:12 (je rappelle que mon premier post est une erreur)
une methode fructueuse pour debuguer..
=> ajoute ça en haut de ta page, car j'ai l'impression que les reports d'erreurs ne sont pas actifs chez toi :
</form>
</html>
--8<--
Non, ça ne suit pas les standards, mais ça marche !
--8<--[traitement.php]--8<--
<?php
// On demarre la session
session_start();
function verif_login($login, $pass) {
// On n'effectue les traitement qu'a la condition que les informations aient ete effectivement postees
if(isset($login) && isset($pass)){
if (!empty($login) && !empty($pass)) {
/* mysql_connect( "localhost" , "" , "" ) or die ("pas d'ouverture mysql".mysql_error());
mysql_select_db("manadgersdb") or die ("connexion base marche pas".mysql_error());
$login = mysql_real_escape_string($_POST['login']); $query mysql_query("SELECT 'id_clients', login, email, pass_md5 FROM clients WHERE login '$login'") or die ("la requete a echouee".mysql_error());
// On verifie que l'utilisateur existe bien
if ( mysql_num_rows($donnees) >0)
$donnees = mysql_fetch_assoc($query);
mysql_close();
*/
///<DEBUG
//N'importe quel mot de passe est valide...
$donnees['pass_md5'] = md5($pass);
///DEBUG>
// On verifie que son mot de passe est correct
if ((md5($pass)) == $donnees['pass_md5']) {
$_SESSION['id_clients'] = $donnees["id_clients"];
$_SESSION['login'] = $login;
$_SESSION['email'] = $donnees["email"];
return true;
}
}
}
return false;
}
if (verif_login($_POST["login"], $_POST["pass"]))
header("location: menu.php");
else
header("location: monformulaire.php");
?>
--8<--
L'erreur vient du SQL ou du HTML, en tout cas la redirection fonctionne, et l'utilisation de ob_start() ne semble pas utile (!?)
NB : Plusieurs erreurs de logique dans la fonction verif_login d'origine : utilisation de $_POST alors que les var sont en arguments, pas de return dans toutes les conditions, $loginOK qui ne sert à rien.
Flachy Joe
« Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks<