Changement de mot de passe - Espace membre
Résolu
axteure
Messages postés
61
Date d'inscription
Statut
Membre
Dernière intervention
-
Guiver Messages postés 262 Date d'inscription Statut Membre Dernière intervention -
Guiver Messages postés 262 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Pour mon espace membre je souhaite proposer au membre de changer son mot de passe lorsqu'il est connecté, j'ai trouvé un code sur Internet auquel je me suis inspiré et que j'ai modifié:
code php:
Je ne comprend pas la ligne list($pass) = mysql_fetch_array($sql);
et le code html:
Cela ne marche pas mais je ne sais pas d'ou sa vient, j'ai essayé de modifier pleins de trucs mais rien n'y fais :(, merci d'avance de votre aide !
Pour mon espace membre je souhaite proposer au membre de changer son mot de passe lorsqu'il est connecté, j'ai trouvé un code sur Internet auquel je me suis inspiré et que j'ai modifié:
code php:
<?php $base = mysql_connect ('xxx', 'xxx', 'xxx'); mysql_select_db ('xxx', $base); $sql = mysql_query("SELECT pass FROM membre WHERE login = " .$_SESSION['login'].""); list($pass) = mysql_fetch_array($sql); if ($newpass == $repeatnewpass) { $password = md5($pass); if ($password == $pass) { $pass = md5($newpass); $sql= "UPDATE membre SET pass ='" .$pass. "' WHERE login ='".$_SESSION['login']."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); echo "mot de passe changé"; } else { echo "Ancien mot de passe non valide"; } } else { echo "Les deux nouveaux mots de passe sont différents"; } ?>
Je ne comprend pas la ligne list($pass) = mysql_fetch_array($sql);
et le code html:
Mot de passe actuel :<br /><input type="password" name="password"><br /><br /> Nouveau mot de passe :<br /><input type="password" name="newpass"><br /><br /> Répetez le nouveau mot de passe :<br /><input type="password" name="repeatnewpass"> <br /><br />
Cela ne marche pas mais je ne sais pas d'ou sa vient, j'ai essayé de modifier pleins de trucs mais rien n'y fais :(, merci d'avance de votre aide !
A voir également:
- Changement de mot de passe - Espace membre
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
5 réponses
mysql_result, regarde içi :
https://www.php.net/manual/fr/function.mysql-result.php
Essaye comme ça :
Dans ta BDD, tu es certain que les champs s'appellent "pass" et "login" ?
Ton utilisateur a bien un mot de passe ?
Tu as l'erreur avec le code que je t'ai passé ? Ou avec le tien ?
C'est normal que se soit affiché : "Ancien mot de passe non valide" vu que $pass n'existe pas. Donc "if (md5($passactuel) == $pass)" n'est pas vrai.
Le problème vient de ton SELECT, et comme je l'ai déjà dis, je ne connais plus le mysql.
Dès que tu auras corrigé ton SELECT, le reste devrait rouler.
https://www.php.net/manual/fr/function.mysql-result.php
Essaye comme ça :
$pass=mysql_result($sql,0);
Dans ta BDD, tu es certain que les champs s'appellent "pass" et "login" ?
Ton utilisateur a bien un mot de passe ?
Tu as l'erreur avec le code que je t'ai passé ? Ou avec le tien ?
C'est normal que se soit affiché : "Ancien mot de passe non valide" vu que $pass n'existe pas. Donc "if (md5($passactuel) == $pass)" n'est pas vrai.
Le problème vient de ton SELECT, et comme je l'ai déjà dis, je ne connais plus le mysql.
Dès que tu auras corrigé ton SELECT, le reste devrait rouler.
Salut,
Désolé, je n'utilise pas mysql mais je pense que mysql_fetch_array() renvoi une réponse sous forme de tableau.
le list($pass) doit certainement permettre de récupérer l'unique réponse dans une variable. (à vérifier)
En supposant que tu récupère bien tes variables :
$newpass = $_POST['newpass'];
...
Essaye de remplacer
par
Désolé, je n'utilise pas mysql mais je pense que mysql_fetch_array() renvoi une réponse sous forme de tableau.
le list($pass) doit certainement permettre de récupérer l'unique réponse dans une variable. (à vérifier)
En supposant que tu récupère bien tes variables :
$newpass = $_POST['newpass'];
...
Essaye de remplacer
if ($newpass == $repeatnewpass) { $password = md5($pass); if ($password == $pass) { $pass = md5($newpass); $sql= "UPDATE membre SET pass ='" .$pass. "' WHERE login ='".$_SESSION['login']."'";
par
if ($newpass == $repeatnewpass) { if (md5($password) == $pass) { $pass2 = md5($newpass); $sql= "UPDATE membre SET pass ='" .$pass2. "' WHERE login ='".$_SESSION['login']."'";
Bonjour et d'abord merci !
J'ai changé comme tu m'as dit, mais sa m'affiche une erreur:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/u302086084/public_html/membre.php on line 38
qui correspond a : list($pass) = mysql_fetch_array($sql);
De plus, dés que je me connecte, sa m'affiche "Ancien mot de passe non valide"
et quand je rentre des choses dans les champs puis que je valide. La page se charge mais rien ne se fait, aucune erreur sauf l'erreur "Ancien mot de passe non valide" qui ne bouge pas. Meme quand je rentre le bon mot de passe :/. Et au final le mot de passe ne se change pas. Bref il ne se passe rien :s
J'ai changé comme tu m'as dit, mais sa m'affiche une erreur:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/u302086084/public_html/membre.php on line 38
qui correspond a : list($pass) = mysql_fetch_array($sql);
De plus, dés que je me connecte, sa m'affiche "Ancien mot de passe non valide"
et quand je rentre des choses dans les champs puis que je valide. La page se charge mais rien ne se fait, aucune erreur sauf l'erreur "Ancien mot de passe non valide" qui ne bouge pas. Meme quand je rentre le bon mot de passe :/. Et au final le mot de passe ne se change pas. Bref il ne se passe rien :s
Tu peux donner tout ton <form></form> et tout le script php utilisé pour l'update stp ?
Tu es sur de ta variable $_SESSION['login'] ?
Remplace
par :
PS :
mysql est devenu obsolète depuis quelques années. Il faudrait le remplacer par du mysqli ou du PDO.
Ensuite, ce n'est pas une bonne idée de concaténer tes variables directement dans tes requêtes.
Tu es sur de ta variable $_SESSION['login'] ?
Remplace
list($pass) = mysql_fetch_array($sql);
par :
$pass=mysql_result($sql,0,'pass');
PS :
mysql est devenu obsolète depuis quelques années. Il faudrait le remplacer par du mysqli ou du PDO.
Ensuite, ce n'est pas une bonne idée de concaténer tes variables directement dans tes requêtes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour ma variable $_SESSION['login'], sa fonctionne car il y a avant un autre code php qui marche avec $_SESSION['login'].
Voici le form:
et le code php:
voila. Merci encore
Voici le form:
<form method="post" action="membre.php"> Mot de passe actuel :<br /><input type="password" name="pass"><br /><br /> Nouveau mot de passe :<br /><input type="password" name="newpass"><br /><br /> Répetez le nouveau mot de passe :<br /><input type="password" name="repeatnewpass"><br /><br /> <input type="submit" Value="Changer le mot de passe" name="submit">
et le code php:
<?php $base = mysql_connect ('mysql.hostinger.fr', 'u302086084_clem', 'gamearn'); mysql_select_db ('u302086084_bdd', $base); $sql = mysql_query("SELECT pass FROM membre WHERE login = " .$_SESSION['login'].""); $pass=mysql_result($sql,0,'pass'); if ($newpass == $repeatnewpass) { if (md5($password) == $pass) { $pass2 = md5($newpass); $sql= "UPDATE membre SET pass ='" .$pass2. "' WHERE login ='".$_SESSION['login']."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); echo "mot de passe changé"; } else { echo "Ancien mot de passe non valide"; } } else { echo "Les deux nouveaux mots de passe sont différents"; } ?>
voila. Merci encore
Cache vite tes identifiants de connexions à ta BDD !
As-tu encore l'erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource ?
si tu fais un :
dans ton php, il affiche bien le bon login et le bon pass en md5 ?
Le php que tu m'affiches c'est membre.php ?
ou c'est une fonction appelé en include() dans ton membre.php ?
Dans le deuxième cas, tu peux me passer les paramètres que tu envois à ta fonction ?
As-tu encore l'erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource ?
si tu fais un :
echo $_SESSION['login']. ' / '.$pass;
dans ton php, il affiche bien le bon login et le bon pass en md5 ?
Le php que tu m'affiches c'est membre.php ?
ou c'est une fonction appelé en include() dans ton membre.php ?
Dans le deuxième cas, tu peux me passer les paramètres que tu envois à ta fonction ?
j'ai changer mes identifiants merci ;)
j'ai l'erreur Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/u302086084/public_html/membre.php on line 38
Quand je fais un echo, sa m'affiche juste mon pseudo / (rien) cela veut dire que j'ai un truc qui va pas avec pass :s $pass
le code php que je t'ai donné est bien contenu dans membre.php sans include()
Merci :)
j'ai l'erreur Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/u302086084/public_html/membre.php on line 38
Quand je fais un echo, sa m'affiche juste mon pseudo / (rien) cela veut dire que j'ai un truc qui va pas avec pass :s $pass
le code php que je t'ai donné est bien contenu dans membre.php sans include()
Merci :)
Vérifie bien ta requête mysql stp.
Les noms des champs sont bons ?
Tu as bien un "pass" associé à ton utilisateur ?
Et j'y pense,
Se serait pas plutôt : (avec la variable entre simple quote)
Ensuite, tu as deux fois la variable $pass.
Pour finir, je vois pas comment tu récupères tes POST du-coup.
Ce qui nous fait donc, pour le HTML :
Et pour le php
Les noms des champs sont bons ?
Tu as bien un "pass" associé à ton utilisateur ?
Et j'y pense,
$sql = mysql_query("SELECT pass FROM membre WHERE login = " .$_SESSION['login']."");
Se serait pas plutôt : (avec la variable entre simple quote)
$sql = mysql_query("SELECT pass FROM membre WHERE login = '" .$_SESSION['login']."'");
Ensuite, tu as deux fois la variable $pass.
Pour finir, je vois pas comment tu récupères tes POST du-coup.
Ce qui nous fait donc, pour le HTML :
<form method="post" action="membre.php"> Mot de passe actuel :<br /><input type="password" name="passactuel"><br /><br /> Nouveau mot de passe :<br /><input type="password" name="newpass"><br /><br /> Répetez le nouveau mot de passe :<br /><input type="password" name="repeatnewpass"><br /><br /> <input type="submit" Value="Changer le mot de passe" name="submit">
Et pour le php
<?php $base = mysql_connect ('xxx', 'xxx', 'xxx'); mysql_select_db ('xxx', $base); $sql = mysql_query("SELECT pass FROM membre WHERE login = '".$_SESSION['login']."'"); $pass=mysql_result($sql,0,'pass'); $passactuel = $_POST['passactuel']; $newpass = $_POST['newpass']; $repeatnewpass = $_POST['repeatnewpass']; if ($newpass == $repeatnewpass) { if (md5($passactuel) == $pass) { $pass2 = md5($newpass); $sql= "UPDATE membre SET pass ='" .$pass2. "' WHERE login ='".$_SESSION['login']."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); echo "mot de passe changé"; } else { echo "Ancien mot de passe non valide"; } } else { echo "Les deux nouveaux mots de passe sont différents"; } ?>
Donc j'ai toujours l'erreur Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/u302086084/public_html/membre.php on line 38
avec en dessous Ancien mot de passe non valide qui s'affiche directement au chargement de la page
C'est le $pass qui va pas, jcomprend pas trop quand tu dis est ce que le pass est bien associé a ton utilisateur...
et je ne comprend pas trop non plus la ligne $pass=mysql_result($sql,0,'pass');
Merci
avec en dessous Ancien mot de passe non valide qui s'affiche directement au chargement de la page
C'est le $pass qui va pas, jcomprend pas trop quand tu dis est ce que le pass est bien associé a ton utilisateur...
et je ne comprend pas trop non plus la ligne $pass=mysql_result($sql,0,'pass');
Merci
Merci beaucoup du temps que tu as pris pour moi Guiver !!