Update d'une BDD (MySQL)

Résolu/Fermé
Mouch89 Messages postés 109 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 avril 2013 - Modifié par Mouch89 le 2/08/2011 à 09:45
Mouch89 Messages postés 109 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 avril 2013 - 2 août 2011 à 11:17
Bonjour,

J'ai dans dans le script d'une de mes pages le code suivant :

    try 
     { 
      $req = $bdd->prepare('UPDATE membres SET pass = ? WHERE pseudo = ?'); 
      $req->execute(array(hacher($_POST['mdp']), $_SESSION['pseudo'])); 
      $req->closeCursor(); 
       
      $reussite = 'Le chagement de mot de passe a eu lieu. Vous pouvez dès maintenant utiliser votre nouveau mot de passe.'; 
     } 
     catch(Exception $e) 
     { 
      // En cas d'erreur précédemment, on affiche un message et on arrête tout 
      die('Erreur : '.$e->getMessage()); 
     } 


L'idée, c'était de pouvoir changer le mdp du membre en question, quand il le désire. Le problème, c'est que cela ne marche pas :)
Et pourtant... on m'affiche bien le message de réussite, ce qui veut dire que le script est passé sur ma requete sans retourner d'erreur !
Le pire, c'est que j'ai presque le même code pour un code qui doit permettre aux membres de changer leur mail... et ce code fonctionne très bien :x

Je demande donc un peu d'aide, je trouve pas mon erreur ! Vient-elle de la fonction hacher ? (c'est un mix md5, sha1 le tout salé... mais bon, les inscriptions et les connexions passent très bien avec donc je vois pas pourquoi ça poserait pb au changement de mot de passe...)

Merci pour votre aide et bonne journée.

A voir également:

4 réponses

dariumis Messages postés 571 Date d'inscription mardi 16 mars 2010 Statut Membre Dernière intervention 18 avril 2018 63
Modifié par dariumis le 2/08/2011 à 10:22
salut, tu peux mettre tous le code du fichier, notamment quant tu déclare PDO, et puis tu ouvre bien ta session dans ce fichier???
0
Mouch89 Messages postés 109 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 avril 2013 7
Modifié par Mouch89 le 2/08/2011 à 10:34
C'est encore du local :)
Mais oui, je peux vous en mettre un peu plus !

(c'est assez illisible, désolé :p)

<?php session_start();  

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
$bdd = new PDO('mysql:host=localhost;dbname=xxxxx', 'root', '', $pdo_options); 

function hacher($pass) 
{  
 $prefixe = 'xxxxxxxxxxxxxxxxxxxxxx'; 
 $suffixe = 'xxxxxxxxxxxxxxxxxxxxxx'; 
  
    //on hache (avec un mix md5, sha1) après avoir salé. impossible maintenant de retrouver les mots de passe d'origine (sans avoir le code source en tout cas) 
    $pass = md5(sha1($prefixe).$pass.sha1($suffixe)); 
  
 return $pass; 
} 

if (isset($_POST['paypal']) && isset($_POST['verifpaypal'])) 
{ 
 if (($_POST['paypal'] == '') || ($_POST['verifpaypal'] == '')) $erreur = 'Le changement d\'adresse a échoué. Au moins un des champs est vide.'; 
 else { 
  if($_POST['paypal'] != $_POST['verifpaypal']) $erreur = 'Le changement d\'adresse a échoué. Les adresses mail ne sont pas identiques.'; 
  else { 
   if(!(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_'{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_'{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['paypal']))) $erreur = 'Le changement d\'adresse a échoué. Votre adresse mail n\'est pas valide.'; 
   else { 
    try 
    { 
     $req = $bdd->prepare('UPDATE membres SET mail_paypal = ? WHERE pseudo = ?'); 
     $req->execute(array($_POST['paypal'], $_SESSION['pseudo'])); 
     $req->closeCursor(); 
      
     $reussite = 'La chagement d\'adresse sera effectif dès que vous cliquerez sur le lien de validation que vous avez allez recevoir par mail dans quelques instants.'; 
    } 
    catch(Exception $e) 
    { 
     // En cas d'erreur précédemment, on affiche un message et on arrête tout 
     die('Erreur : '.$e->getMessage()); 
    }    
   } 
  } 
 } 
} 
else if (isset($_POST['mdp']) && isset($_POST['nouvmdp']) && isset($_POST['verifnouvmdp'])) 
{ 
 if (($_POST['mdp'] == '') || ($_POST['nouvmdp'] == '') || ($_POST['verifnouvmdp'] == '')) $erreur = 'Le changement de mot de passe a échoué. Au moins un des champs est vide.'; 
 else { 
  if($_POST['nouvmdp'] != $_POST['verifnouvmdp']) $erreur = 'Le changement de mot de passe a échoué. Le nouveau mot de passe et sa vérification ne sont pas identiques.'; 
  else { 
   try 
   { 
    $req = $bdd->prepare('SELECT pass FROM membres WHERE pseudo= ?'); 
    $req->execute(array($_SESSION['pseudo'])); 
    $donnees = $req->fetch(); 
    $req->closeCursor(); 
   } 
   catch(Exception $e) 
   { 
    // En cas d'erreur précédemment, on affiche un message et on arrête tout 
    die('Erreur : '.$e->getMessage()); 
   }  
   if (strlen($_POST['mdp']) < 6) $erreur = 'Le changement de mot de passe a échoué. Votre nouveau mot de passe est trop court. Comptez un minimum de 6 caractères'; 
   else{ 
    if($donnees['pass'] != hacher($_POST['mdp'])) $erreur = 'Le changement de mot de passe a échoué. Le mot de passe actuel rentré est incorrect.'; 
    else { 
     try 
     { 
      $req = $bdd->prepare('UPDATE membres SET pass = ? WHERE pseudo = ?'); 
      $req->execute(array(hacher($_POST['mdp']), $_SESSION['pseudo'])); 
      $req->closeCursor(); 
       
      $reussite = 'Le chagement de mot de passe a eu lieu. Vous pouvez dès maintenant utiliser votre nouveau mot de passe.'; 
     } 
     catch(Exception $e) 
     { 
      // En cas d'erreur précédemment, on affiche un message et on arrête tout 
      die('Erreur : '.$e->getMessage()); 
     }    
    } 
   } 
  } 
 } 
} ?>


Ca suffit ? J'ai encore du HTML, quelques formulaires, etc en dessous mais je pense pas que ça vous intéresse :)
0
Mouch89 Messages postés 109 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 avril 2013 7
2 août 2011 à 11:06
Après avoir mis des echo un peu partout, je crois que le pb vient de ma fonction hacher...

Visiblement, tout les retours de cette fonction donnent la même chaine de 32 caractères... étrange ?
0
Mouch89 Messages postés 109 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 avril 2013 7
2 août 2011 à 11:17
A y'est, j'ai trouvé le problème :)
Je demandais de changer le pass avec la valeur de $_POST['mdp'], sauf que cette dernière, c'est justement le mot de passe actuel (une vérification dans le formulaire de changement).

En fait, fallait prendre $_POST['nouvmdp'] ! Erreur d'inattention !
0