Partage
  • Partager sur Facebook
  • Partager sur Twitter

Recuperation de donnée avec php

Sujet résolu
    13 mai 2021 à 15:20:52

    Bonjour à tous,

    je développe un petit blog en local et j'ai besoin de créer un script de mot de passe perdu.

    Enfaite celui-ci fonctionne avec une vérification du code de sécurité reçut a l'inscription si la combinaison est valide, le script vérifie l'email correspondant au code.

    Mais la je galère ... au début a cause d'un "=" de trop dans ma requete sql .. ahah mais la les données ne sont pas en mémoire et je ne trouve pas ..

    codev = code de vérification unique créer a l'inscription que l'utilisateur rentre dans le formulaire html.

    Le codev s'affiche quand je clic sur le bouton mais pas l'émail.

    $bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
    
    
    if (isset($_POST['codev']))
    {
        $msg_function_lost_pass= 'test';
    $codev = $_POST['codev'];
    $reponse = $bdd->query('SELECT mail FROM membres WHERE confirmkey="'.$codev.'"');
    
    while ($donnees = $reponse->fetch())
    {
    }
    //$donnees['mail'] = $msg_function_lost_pass ;
    //$reponse->closeCursor(); // Termine le traitement de la requête
    //$msg_function_lost_pass ="";
    //
    $msg_function_lost_pass = " Votre code d'authentification est :". $codev ."  via l'email : ". $donnees['mail'] ." ";
    
    //
    
    }
    else
    {
            $msg_function_lost_pass= 'Le code est disponible dans votre émail';
    
    }



    • Partager sur Facebook
    • Partager sur Twitter

    Cordialement, LinkoLabs

      14 mai 2021 à 0:31:29

      1. active les erreurs PDO/SQL au lieu de les chercher
      2. prépare ta requête, tu as une injection SQL

      Tu n'as pas besoin d'un while, juste un if, d'autant que $donnees va falloir FALSE après et en dehors du while.

      Il faut faire :

      $reponse = $bdd->prepare('SELECT mail FROM membres WHERE confirmkey = :codev');
      $reponse->execute(['codev' => $_POST['codev']]);
      if ($donnees = $reponse->fetch()) {
          // il y a une ligne qui correspond, utiliser $donnees['mail']
      } else {
          // rien ne correspond
      }
      

      PS : ces foutus > sont des >

      -
      Edité par julp 14 mai 2021 à 0:33:50

      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2021 à 9:55:42

        Je te remercie de ta réponse je vais regardé a cela avant la lecture de celle-ci j'ai fais quelques tests ahah

        $bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
        
        
        if (isset($_POST['codev']))
        {
            $msg_function_lost_pass= 'test';
        $codev = $_POST['codev'];
        $reponse = $bdd->prepare('SELECT * FROM membres WHERE confirmkey="'.$codev.'"');
        
        while ($donnees = $reponse->fetch())
        {
            $test = "";
            $test = $reponse. '|'.$donnees['mail'];
            
        }
        la requête
        //$msg_function_lost_pass ="";
        $msg_function_lost_pass = " Votre code d'authentification est :". $codev ."  via l'email : ". $donnees['mail'] ." ".$test;
        }
        else
        {
                $msg_function_lost_pass= 'Le code est disponible dans votre émail';
        }
        
        
        
        Mais le retour du print_r ne me retourne aucune valeur dans le tableau.
        j'avais modif aussi le query en prepare de ma requete sql.
        
        Enfin je test ton petit bout de code ! et je reviens vers toi .

         EDITE :

        Il semble que j'ai un souci avec la ligne suivante :

        $reponse->execute(['codev' => $_POST['codev']]);



        WARNING :

        PHP Parse error:  syntax error, unexpected '[', expecting ')' 

        edite :

        Après une petite verification de ton code j'ai modif avec ceci et cela fonctionne il manquais le array je pense ?

        $bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
        
        
        //lost password 
        $reponse = $bdd->prepare('SELECT mail FROM membres WHERE confirmkey = :codev');
        @$reponse->execute(array('codev' => $_POST['codev']));
        if ($donnees = $reponse->fetch()) {
            // il y a une ligne qui correspond, utiliser $donnees['mail']
            $msg_function_lost_pass = "code valide, email : ".$donnees['mail'];
        } else {
            // rien ne correspond
            $msg_function_lost_pass = "le code de verification est non valide.";
        }
        



        -
        Edité par LinkoLabs 15 mai 2021 à 10:38:24

        • Partager sur Facebook
        • Partager sur Twitter

        Cordialement, LinkoLabs

          15 mai 2021 à 11:29:41

          Tu ne travailles quand même pas avec une version < 5.4.0 ?!?

          PS : ne mets pas de @

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2021 à 13:33:58

            La version de php était bien en 5.3 o_O elle est a présent en 7.1:ange:

            • Partager sur Facebook
            • Partager sur Twitter

            Cordialement, LinkoLabs

            Recuperation de donnée avec php

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown