Changement de mot de passe - Espace membre [Résolu/Fermé]

Signaler
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
-
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
-
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:
<?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 !

5 réponses

Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
mysql_result, regarde içi :
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.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
mince quel ^ù$^* je suis --', dans la bdd le champs s'appelle "pass_md5"
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
donc si la colonne sa du mot de passe s'appelle pass_md5 je dois changer quoi donc mon code ?
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
Sa y'est sa marche !!
Merci beaucoup du temps que tu as pris pour moi Guiver !!
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
Content d'avoir pu aider ;)
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
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
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']."'";
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
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
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
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
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.
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
Pour ma variable $_SESSION['login'], sa fonctionne car il y a avant un autre code php qui marche avec $_SESSION['login'].

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
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
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 :)
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
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,
$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";
}
?>
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
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
Messages postés
62
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
9 janvier 2017
3
Guiver ?
Messages postés
251
Date d'inscription
mardi 30 novembre 2010
Statut
Membre
Dernière intervention
6 février 2019
83
J'ai répondu il y'a 10 minutes...