Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
892 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  requête SQL en php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

requête SQL en php

n°2351109
Nestati
Citation
Posté le 07-04-2020 à 15:57:22  profilanswer
 

Bonjour j'ai réussi à faire une requête INSERT pour s'inscrire mais j'essaie de faire un système de changement de mdp et je n'y arrive pas j'aimerais votre aide merci.
Ma BDD appelée users est sur phpmyadmin et comporte plusieurs colonnes dont id pseudo email et password.
Le problème vient de ma requête SQL

Code :
  1. $q= $db->prepare("UPDATE users SET password = :new_password WHERE email = :email" );


Dans ce code ci-dessous

Code :
  1. <?php session_start(); //ouverture de la session
  2.     //Récuperation du pseudo
  3.     $pseudo=$_SESSION["pseudo"];
  4.     $email=$_SESSION["lemail"];
  5.     $password=$_SESSION["lpassword"];
  6.     //Récuperation du dossier usilisateur correspondant au pseudo
  7. ?>
  8. <!DOCTYPE html>
  9. <html>
  10.     <head>
  11.         <meta charset='uft-8'>
  12.         <title>Paramètres</title>
  13.         <link rel='stylesheet' href='css/main.css'>
  14.         <link rel='stylesheet' href='css/index.css'>
  15.     </head>
  16.     <nav>
  17.         <img src=/images/cloud.png title='icone' id='icone'>
  18.     </nav>
  19.     <body>
  20.         <div id="wrapper">
  21.             <form method="post">
  22.                     <input type="password" name="new_password" id="new_password" placeholder="Votre Nouveau Mot de Passe"><br/>
  23.                     <input type="password" name="newc_password" id="newc_password" placeholder="Confirmer Votre Nouveau Mot de Passe"><br/>
  24.                     <input type="submit" name="formsend" id="formsend" value="Envoyer"><br/>
  25.             </form>
  26.            
  27.              <?php
  28.           if(isset($_POST['formsend'])){
  29.               extract($_POST);
  30.               if(!empty($new_password) && !empty($newc_password)){
  31.                   if($new_password == $newc_password){
  32.                    include 'database.php';
  33.           global $db;
  34.                    $q= $db->prepare("UPDATE users SET password = :new_password WHERE email = :email" );
  35.                          $q->execute([
  36.                             'password'=> $new_password
  37.                          ]);
  38.                          echo "<font style=\"font family: courrier new;\"><strong>Le mdp a été changé merci de vous reconnecter</strong></font>";
  39.                 }else{
  40.                     echo "<font style=\"font family: courrier new;\"><strong>Les mot de passes ne correspondent pas</strong></font>";
  41.                 }
  42.             }else{
  43.                 echo "<font style=\"font family: courrier new;\"><strong>Les champs ne sont pas tous remplis</strong></font>";
  44.             }
  45.         }
  46.         ?>
  47.     </div>
  48.     </body>
  49. </html>


 
J'ai cette erreur :

Code :
  1. Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in

mood
Publicité
Posté le 07-04-2020 à 15:57:22  profilanswer
 

n°2351115
mechkurt
Posté le 07-04-2020 à 16:12:20  profilanswer
 

Code :
  1. $q= $db->prepare("UPDATE users SET password = :new_password WHERE email = :email" );
  2.                    $q->execute([
  3.                          'password'=> $new_password
  4.                    ]);


Tu ne crois pas qu'il te manque un paramètre quelque part ?

Spoiler :

A moins que le but soit d'appliquer le nouveau mot de passe à tous les utilisateurs mais alors c'est ta requête qui n'est pas bonne... :o


---------------
D3
n°2351121
Nestati
Citation
Posté le 07-04-2020 à 16:24:00  profilanswer
 

problème résolu :

Code :
  1. $q= $db->prepare("UPDATE users SET password = :password WHERE pseudo = '$pseudo' " );
  2.                          $q->execute([
  3.                             'password'=> $new_password
  4.                          ]);


 
J'ai un nouveau problème est qu'avec le nouveau mot de passe il est impossible de me connecter avec le nouveau mdp pourtant changé dans la BDD
C'est surement du à ma page de connexion :  

Code :
  1. <?php session_start(); //ouverture de la session
  2.     if (isset($_SESSION["pseudo"])){
  3.         header('Location: dashboard.php');
  4.     }
  5. ?>
  6. <?php
  7.             if(isset($_POST['formlogin'])){
  8.                 extract($_POST);
  9.                 if(!empty($lemail) && !empty($lpassword)){
  10.                     $q = $db->prepare("SELECT * FROM users WHERE email = :email" );
  11.                     $q->execute(['email' => $lemail]);
  12.                     $result = $q->fetch();
  13.                     if($result == true){
  14.                         //le compte existe bien
  15.                         if(password_verify($lpassword, $result['password'])){
  16.                             echo "Le mot de passe est bon , connexion";
  17.                             $_SESSION["pseudo"]=$result['pseudo'];
  18.                             $_SESSION["lemail"]=$result['email'];
  19.                             $_SESSION["lpassword"]=$result['password'];
  20.                             $_SESSION['fileUpload']=False;
  21.                             header('Location: dashboard.php');
  22.                             exit();
  23.                         }else{
  24.                             echo "Le mot de passe est incorrect";
  25.                         }
  26.                     }
  27.                     else{
  28.                         echo "Le compte portant l'email " . $lemail . "n'existe pas";
  29.                     }
  30.                 }
  31.                 else{
  32.                     echo "Veuillez completer l'ensemble des champs";
  33.                 }
  34.             }
  35.         ?>
  36.         <script type="text/javascript" src="js/index.js"></script>
  37.     </body>
  38. </html>


 
Pour raccourcir le code j'ai enlevé la partie avec la déclaration des boutons


Message édité par Nestati le 07-04-2020 à 16:25:00
n°2351132
pluj
Posté le 07-04-2020 à 17:17:25  profilanswer
 

Lu,
 
à quel moment tu haches ce nouveau mot de passe avec password_hash ?
 

Code :
  1. $q= $db->prepare("UPDATE users SET password = :password WHERE pseudo = '$pseudo' " );


Et te voilà avec une injection SQL via $pseudo ! Pourquoi n'en as-tu pas fait un paramètre/marqueur comme tu l'as fait pour le (hash du) mot de passe ?!?
 

Code :
  1. if($result == true){


La comparaison (non stricte) à true est inutile car implicite avec une condition (if/else if/for/while/etc)


Message édité par pluj le 07-04-2020 à 17:19:41

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  requête SQL en php

 

Sujets relatifs
SQL DISTINCT requete spéciale (POSTGRESQL)[SQL] Double compte sur 2 tables en 1 requete [résolu]
Problème pour structurer le résultat d'une requete SQLIdentifier la clause where succès dans requête SQL
[SQL] Requête sur une liste d'adresse ipRequete SQL
Lanceur de requête SQL pour gain de temps en recetteprocesseur + requete SQL
Habiller un tableau résultant d'une requête SQL[RESOLU]requete SQL
Plus de sujets relatifs à : requête SQL en php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR