Changer le mot de passe d'un membre

Résolu
Bonjour, voilà comme dis dans le titre je veux changer le mot de passe d'un membre mais cela ne fonctionne pas, j'ai tester mes if, eux fonctionne, donc se serais dans le SQL mais il me semble bon, donc je ne vois pas ou pourrais être mon erreur, si quelq'un à une idée?
voici le formulaire:

<section>
   <fieldset><legend>Changement du mot de passe</legend><br>
    <form action="change_mdp_post.php" method="post">

    Pseudo :<input name="pseudoCh" id="pseudo" type="text" />
    <br/><br/>

    Mot de passe :<input name="passCh" type="password" />
    <br/><br/>

    nouveau mot de passe :<input name="nvMdp" type="password" />
    <br/><br/>

    confirmation du nouveau mot de passe :<input name="confirmMdp" type="password" />
    <br/><br/>

    <input type="submit" value="Changer son mot de passe" /> <input type="reset" value="Réinitialiser le formulaire" />
    </form>

    <br>
   </fieldset>
   <a href="membre.php">Retour à la page membre</a>
  </section>


et voici mon traintement

<?php
 session_start();


  if(($_POST["pseudoCh"]) || ($_POST["passCh"]) || ($_POST["nvMdp"]) || ($_POST["confirmMdp"]))
  {

   if(($_SESSION['login']) == ($_POST['pseudoCh']))
   {

    if ( ($_POST["confirmMdp"]) == ($_POST["nvMdp"]) )
    {
     try
     {
      $bdd = new PDO('mysql:host=sql2.olympe.in;dbname='*****', '*****', '******');
     }
     catch(Exception $e)
     {
       die('Erreur : '.$e->getMessage());
     }
     $req = $bdd->prepare(UPDATE membre SET pass_md5=  '.$_POST["passCh"].'  WHERE login = '. $_SESSION["login"]');
     $req->execute(array($_POST["passCh"]));
     header ('Location: change_mdp.php');
    }else
    {
     header ('Location: membre.php');
    }


   }else
   {
    header('Location: index.php');
   }
  }else
  {
   header('Location: Forum.php');
  }
?>

5 réponses

  1. Salut salut,

    La première chose qui doit empêcher l'exécution est à cette ligne :
    $bdd = new PDO('mysql:host=sql2.olympe.in;dbname='*****', '*****', '******');

    Pour le premier paramètre tu ouvres avec une simple cote et les réutilises pour passer le nom de la base de donnée, donc la chaine de texte ne se ferme pas au bon endroit. Essaie comme ça :
    $bdd = new PDO('mysql:host=sql2.olympe.in;dbname=*****', '*****', '******');

    0
    1. désolé c'est moi en métant les "*" qui a fait ça, mais pas dans mon code chez moi, donc le problème est bien ailleurs, désolé pour la faute de copie :s
      0
  2. Ok, il y a une autre faute de cote ici :
    $req = $bdd->prepare(UPDATE membre SET pass_md5=  '.$_POST["passCh"].'  WHERE login = '. $_SESSION["login"]');


    Les instruction SQL doivent être entourées de cotes :
    $req = $bdd->prepare('UPDATE membre SET pass_md5='.$_POST["passCh"].'  WHERE login = '. $_SESSION["login"]);


    Résolu? ===> [RESOLU]
    0
    1. ça avance, effectivement il me remet bien a la bonne page, mais il ne change pas le mot de passe, et la ça fait 2 jours que je me bas sur le SQL
      0
    2. vu que c'est une méthode post, comment fait tu pour voir les echo?
      0
    3. Comme ceci?


      if ( ($_POST["confirmMdp"]) == ($_POST["nvMdp"]) )
      {
      echo"juste apres le if de confirm";
      try
      {
      $bdd = new PDO('mysql:host=sql2.olympe.in;dbname=2sf7gi5g', '2sf7gi5g', 'berderochet69');
      }
      catch(Exception $e)
      {
      die('Erreur : '.$e->getMessage());
      }
      echo "juste avant le SQL";
      $req = $bdd->prepare('UPDATE membre SET pass_md5='.$_POST["passCh"].' WHERE login = '. $_SESSION["login"]);
      $req->execute(array($_POST["passCh"]));
      header ('Location: change_mdp.php');
      0
  3. Tu n'as aucun message d'erreur ?

    Fais des echo des paramètres de tes if juste avant de rentrer dans la condition pour comprendre laquelle bloque l'exécution.
    0
    1. tous mes if fonctionne vu qu'il me dirige bien a la bonne page, c'est le sql qui n'exécute pas correctement mais je vais essayer les echo
      0
  4. La requête préparée me semble un peu étrange, tu prépares la requête en mettant directement les variables dans la chaîne.
    Essaie avec ça :

    $req = $bdd->prepare('UPDATE membre SET pass_md5= :passmd5 WHERE login = :login');
    $req->bindParam(':passmd5', $_POST["passCh"], PDO::PARAM_STR);
    $req->bindParam(':login',$_SESSION["login"], PDO::PARAM_STR);
    $req->execute();
    0
    1. Un très grand merci, cela fonctionne maintenant, vraiment merci!
      0
  5. Pas de soucis, bon courage ;)
    0