Page 1 sur 1

un probleme avec le controle d'un passe en md5

Posté : 16 nov. 2005, 15:40
par krakra4
Bonjour,

j'ai codifié un passe en md5 (j'ai verifié il est bien rentré en 32 caracteres dans ma base sql

mais lors de la verif de celui ci dans une page php il ne le reconnait pas.

surement une erreur comme d'hab ds mon script.

merci pour votre aide
<?php

session_start();
$loginOK = false;  

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['passe'])) ) {

  extract($_POST);  


 $db=mysql_connect("xxx","xxxx","xxxxx"); 
 mysql_select_db('xxxx',$db);  
$sql = "SELECT  passeperso, emailperso, typepronos, datedebut, datefin, heure  FROM membres WHERE loginperso = '".addslashes($login)."'";

  $req = mysql_query($sql);
 $passemd5== md5($data['passeperso']); 

  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
    

    if ($passe == $passemd5) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['login'] = $data['login'];
header("location: http://www.xxxxxxxxx/dddd.php");

?>

Posté : 16 nov. 2005, 15:44
par Cyrano
L'erreur est à priori ici:
$passemd5 == md5($data['passeperso']);
Tu utilises un op^érateur de comparaison au lieu d'un opérateur d'affectation. Correction:
$passemd5 = md5($data['passeperso']);

re,

Posté : 16 nov. 2005, 16:09
par krakra4
maintenant g une erreur

Parse error: parse error, unexpected $ in /xxxxx/fffff.php on line 43

voila le script
<?php
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce
// On n'effectue les traitement qu'à la condition que 
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['passe'])) ) {

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
 $db=mysql_connect("xxxx","xxxx","xxxxx"); 
 mysql_select_db('xxxxx',$db);  
$sql = "SELECT  passeperso, emailperso, typepronos, datedebut, datefin, heure  FROM membres WHERE loginperso = '".addslashes($login)."'";

  $req = mysql_query($sql);
$passemd5= md5($data['passeperso']);  
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
    
    // On vérifie que son mot de passe est correct
   if ($passe == $passemd5) { 
 {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['login'] = $data['login'];



header("location: http://www.xxxxx/xxxx.php");


?>

Posté : 16 nov. 2005, 16:18
par Cyrano
L'accolade ouvrante du dernier if() n'est pas fermée de même que celle du premier.

D'où l'importance de correctement indenter son code. Ma méthode:
<?php
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce
// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['passe'])) )
{
    extract($_POST);  // je vous renvoie à la doc de cette fonction

    // On va chercher le mot de passe afférent à ce login
    $db=mysql_connect("xxxx","xxxx","xxxxx");
    mysql_select_db('xxxxx',$db);
    $sql = "SELECT  passeperso, emailperso, typepronos, datedebut, datefin, heure  FROM membres WHERE loginperso = '".addslashes($login)."'";

    $req = mysql_query($sql);
    $passemd5= md5($data['passeperso']);
    // On vérifie que l'utilisateur existe bien
    if (mysql_num_rows($req) > 0) 
    {
        $data = mysql_fetch_assoc($req);

        // On vérifie que son mot de passe est correct
        if ($passe == $passemd5)
        {
            {
                $loginOK = true;
            }
        }
    }

    // Si le login a été validé on met les données en sessions
    if ($loginOK)
    {
        $_SESSION['login'] = $data['login'];

        header("location: http://www.xxxxx/xxxx.php");
    }
}
?>
Là, c'est clair et tu alignes l'ouvrante et la fermante su la même colonne, tu repères alors immédiatement une erreur.

re,

Posté : 17 nov. 2005, 08:43
par krakra4
re,

désolé mais mm erreur.

Posté : 17 nov. 2005, 09:16
par Cyrano
ça m'avance bien : bon, proposition de simplification pour strictement le même résultat :
<?php
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce
// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['passe'])) )
{
    extract($_POST);  // je vous renvoie à la doc de cette fonction
    $login_test = addslashes($login);

    // On va chercher le mot de passe afférent à ce login
    $db = mysql_connect("xxxx","xxxx","xxxxx");
    mysql_select_db('xxxxx',$db);
    $sql = "SELECT COUNT(*) ".
           "FROM `membres` ".
           "WHERE `loginperso` = '". $login_test ."' ".
           "AND `passeperso` = '". md5($passe) ."'";
    $exec = mysql_query($sql) or die("<p>Erreur lors de l'exécution de la requête : ". mysql_error() ."</p>\n");
    $resultat = mysql_result($exec, 0);
    if($resultat == 1)
    {
        $loginOK = true;
        $_SESSION['login'] = $login;
        header("Location: http://www.xxxxxxx/xxxxx.php");
    }
}
?>