IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Le changement de Mot de Passe en PHP-PDO ne s'applique pas dans ma Base de Données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut Le changement de Mot de Passe en PHP-PDO ne s'applique pas dans ma Base de Données
    Bonjour.

    J'ai décidé de passer mes requêtes qui étaient en MySQLi-Prepared en PDO.

    Mais j'ai un sérieux souci au niveau de la requête de mise à jour des Mots de passe représentée par la fonction modifyPass() (du Fichier processUser.php) qui n'applique pas la nouvelle modification de Mot de Passe dans la Base de Données et aucune erreur non plus n'est signalée et pourtant j'arrive à modifier avec succès les Emails grâce à sa fonction modifyEmail().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    function dbQuery($sql)
    {
    	$args = func_get_args();
    	if($args != null){
    		array_shift($args);
    		/* if(is_array($args) && count($args) === 1){
    			$tab = $args[0];
    			$args = (is_array($args)) ? $tab : array($tab);
    		  }*/
    	}
    	$db = new MySQL();
    	$result = ($args != null) ? $db->query($sql,$args) : $db->query($sql);
    	return $result;
    }
     
    /*
    	Modify a user
    */
    function modifyEmail()
    {
    	$userId 	= (int)$_POST['hidUserId'];	
    	$new_email 	= $_POST['new_email'];
     
    	$sql   = "UPDATE tbl_users 
    	          SET email = ?
    			  WHERE id = ?";
     
    	dbQuery($sql,$new_email,$userId);
     
    	header('Location: index.php?view=email&error=' . urlencode('Email modifié avec succès.'));
     
    }
     
     
     
    /*
    	Modify a Password
    */
    function modifyPass()
    {
    	$userId 	= (int)$_POST['hidUserId'];	
    	$new_password 	= $_POST['new_password'];
     
    	$sql   = "UPDATE tbl_users 
    	          SET pwd = ?
    			  WHERE id = ?";
     
    	$new_pwd_hash = hash('sha512',$new_password); // hash512
     
    	dbQuery($sql,$new_pwd_hash,$userId);
     
    	$userEmail = "SELECT email FROM tbl_users WHERE id = ?";
    	$result = dbQuery($userEmail,$userId);		
    	extract(dbFetchAssoc($result));
    	$subject = "Mot de passe modifié";
    	$mail_data = array('to' => $email, 'sub' => $subject, 'msg' => 'change_pwd', 'pwd' => $pwd);
    	send_email($mail_data);
     
    }
    Et voici son le Code du Formulaire HTML traitant la modification des Mot s de passe qui ne marche pas du tout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <form action="processUser.php?action=modifyPass" method="post" >
     <table width="500px" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
      <tr>
        <td colspan="2" class="label">Modifier le Mot de Passe </td>
        </tr>
      <tr> 
       <td width="150" class="label">Nom d'utilisateur</td>
       <td class="content">
       	<input name="txtUserName" type="text" class="box" id="txtUserName" value="<?php echo $fname. ' '.$lname; ?>" size="30"  readonly="readonly">
        <input name="hidUserId" type="hidden" id="hidUserId" value="<?php echo $id; ?>"> </td>
      </tr>
     <tr> 
       <td width="150" class="label">Nouveau Mot de Passe</td>
       <td class="content">
       <span id="sprypwd"> 
    	<input name="new_password" type="password" class="box"  id="pass" size="30">
        <br/>
        <span class="passwordRequiredMsg">Nouveau Mot de Passe obligatoire.</span>
    	<span class="passwordMinCharsMsg">Vous devez spécifier au moins 6 caractères.</span>
    	<span class="passwordMaxCharsMsg">Vous devez spécifier au plus 10 caractères.</span>
    	</span>
       </td>
      </tr>
    <tr> 
       <td width="150" class="label">Confirmer</td>
    <td class="content">
    	<span id="sprycpwd"> 
    	<input name="new_password" type="password" class="box"  id="pass" size="30">
        <small> </small>
    	<br/>
    	<span class="confirmRequiredMsg">Confirmer Nouveau Mot de Passe.</span>
    	<span class="confirmInvalidMsg">Les valeurs du mot de passe de confirmation ne correspondent pas.</span>
    	</span>
    	</td>
     </tr> 
     <tr> 
       <td width="150">&nbsp;</td>
       <td width="10">&nbsp;</td>
       <td>&nbsp;</td>
     </tr>
     <tr> 
      <td colspan="3"><div align="center"> 
        <input name="btnModify" type="submit" class="bluebox" id="btnModify" value="Valider" onClick="return checkPassword();">
        &nbsp;&nbsp; 
       </div></td>
     </tr>
     <tr>
      <td colspan="3">&nbsp;</td>
     </tr>
    </table>
    </form>
    Pourquoi donc le changement des Mots de passe de ma requête modifyPass() ne fonctionne toujours pas malgré mes nombreuses tentative à corriger ce bug alors que se modifie avec succès le changement des Emails ???

    Aidez-moi donc à corriger ce qui semble ne pas fonctionner au niveau de la fonction modifyPass() qui traite le changement des Mots de Passe car le changement ne s'applique pas du tout.

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 522
    Par défaut
    Bonjour,

    Puisque tu récupères des variables $_POST, il faudrait obligatoirement préparer tes requêtes afin de les protéger contre les injections sql et ne pas utiliser query, donc au lieu de :

    $result = ($args != null) ? $db->query($sql,$args):$db->query($sql);
    il faut écrire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = $db->prepare($sql)->execute($args);

    Puis ça m'étonnes que la modification de l'email s'exécute sans erreur, car d'après la documentation php, le deuxième argument de la méthode query doit être un entier (fetchMode), alors que dans ton exemple tu passes un tableau !

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Bonjour,

    Puisque tu récupères des variables $_POST, il faudrait obligatoirement préparer tes requêtes afin de les protéger contre les injections sql et ne pas utiliser query, donc au lieu de :

    $result = ($args != null) ? $db->query($sql,$args):$db->query($sql);
    il faut écrire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = $db->prepare($sql)->execute($args);
    1 - Grand merci pour votre réponse. Mais, les requêtes étaient déjà préparées dans la méthode query de la classe MySQL laquelle méthode est récupéré via le $db->query($sql,$args):$db->query($sql);:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public function query($sql,$args = null){
    		// vérifie que $sql ne soit pas null ou vide
    		if(empty($sql) || $sql == null){
    			die($this->error('La variable $sql est vide'));
    		}
     
     
    		// test la connexion à la BDD
    		try {
    			// $pdo contient une instance à PDO
    			  $pdo = $this->connect();
    			  // préparation de la requête pour éviter les injections $sql est la requête
    			  $reponse = $pdo->prepare($sql);
    			  // exécution de la requête préparer avec en arguments un tableau
    			  $reponse->execute($args);
     
     
    		} catch (PDOException  $e) {
    			// échec de connexion
    			$this->bug($e);
    		}
    		// $reponse contient un jeu de résultat sous forme d'objet PDOStatement
        return $reponse;
      }
    Donc les requêtes sont bien préparées dans la méthode query qui est après appelée dans la méthode dbQuery.


    Citation Envoyé par Toufik83 Voir le message
    Puis ça m'étonnes que la modification de l'email s'exécute sans erreur, car d'après la documentation php, le deuxième argument de la méthode query doit être un entier (fetchMode), alors que dans ton exemple tu passes un tableau !
    2 - Mais comment pourrais-je modifier et la méthode modifyPass et celle de la modification des Emails modifyEmail pour qu'elles fonctionnent correctement ??? Car c'est la raison même de mon poste.

    Comment devrais inclure la méthode fetchMode dans la méthode modifyPass de mon cas ???

    Merci de me donner un exemple de code.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 522
    Par défaut
    Bonjour,

    J'ai cru que c'était query du PDO que tu utilises et pas celle de la classe MySQL.

    Ceci dit que le fetchMode n'a aucun rapport avec le problème.

    Quand tu fais un var_dump du tableau des arguments à l'intérieur de query, les valeurs sont elles correctes?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Quand tu fais un var_dump du tableau des arguments à l'intérieur de query, les valeurs sont t-elles correctes?
    Dans la méthode modifyPass, JE NE VOIS AUCUNE ERREUR S'AFFICHER, quand je fais, la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $data = dbQuery($sql,$new_pwd_hash,$userId);
     
    	echo "<pre>";
    	print_r($data);
    	echo "</pre>";
    C'est le statuquo. Juste la même redirection vers la page d'accueil comme toujours et toujours sans modification du nouveau Mot de Passe dans la Base de Données.

    Mais chose curieuse, j'ai décidé de modifier de commenter toute la méthode modifyPass comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /* function modifyPass()
    {
    	$userId 	= (int)$_POST['hidUserId'];	
    	$new_password 	= $_POST['new_password'];
     
    	$sql   = "UPDATE tbl_users 
    	          SET pwd = ?
    			  WHERE id = ?";
     
    	$new_pwd_hash = hash('sha512',$new_password); // hash512
     
    	$data = dbQuery($sql,$new_pwd_hash,$userId);
     
    	echo "<pre>";
    	print_r($data);
    	echo "</pre>";
     
    	$userEmail = "SELECT email FROM tbl_users WHERE id = ?";
    	$result = dbQuery($userEmail,$userId);		
    	extract(dbFetchAssoc($result));
    	$subject = "Mot de passe modifié";
    	$mail_data = array('to' => $email, 'sub' => $subject, 'msg' => 'change_pwd', 'pwd' => $pwd);
    	send_email($mail_data);
     
    }*/
    Et je réessaie le mise la modification du mot de passe de l'utilisateur, je reçois l'erreur, je ne vois rien s'afficher... Et c'est toujours la même redirection pourtant la méthode modifyPass est commenté et ne devrait normalement plus fonctionner ni rediriger puisque l'Action du formulaire qui est la méthode modifyPass traitant la modification des Mots de Passe vient d'être commentée.

    Je joins ci-dessous le Code en lui-même et le problème que je rencontre se pose au niveau de l'Admin: "admin/user/processUser.php" dans lequel, il y a la méthode modifyPass en question qui devrait traiter le changement de Mot de Passe de l'Utilisateur Connecté:

    bkfr.zip

    C'est vraiment un casse-tête. J'ai tout essayé.

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 522
    Par défaut
    Bonjour,

    Après avoir télécharger le fichier zip et importer la base de données (+ quelques petites modifications...), j'ai créer manuellement un compte et j'ai réussi à modifier mon mot de passe sans aucune erreur (à part celle des transactions).

    Si tu as commenté la fonction modifyPass() alors qu'elle s'exécute toujours, ceci dit que tu modifies un fichier qui se trouve dans un autre dossier que celui de ton projet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2010, 13h57
  2. Formulaire changement de mot de passe php / phpMyAdmin
    Par sef313 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/10/2009, 16h18
  3. Réponses: 3
    Dernier message: 15/08/2007, 09h04
  4. Probleme avec changement du mot de passe utilisateur
    Par Davenico dans le forum Outils
    Réponses: 2
    Dernier message: 19/12/2003, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo