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   -
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 !
A voir également:

5 réponses

Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
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
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   3
 
mince quel ^ù$^* je suis --', dans la bdd le champs s'appelle "pass_md5"
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   3
 
donc si la colonne sa du mot de passe s'appelle pass_md5 je dois changer quoi donc mon code ?
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   3
 
Sa y'est sa marche !!
Merci beaucoup du temps que tu as pris pour moi Guiver !!
0
Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
Content d'avoir pu aider ;)
0
Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
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']."'";
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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
0
Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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
0
Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
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 :
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 ?
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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 :)
0
Guiver Messages postés 262 Date d'inscription   Statut Membre Dernière intervention   87
 
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";
}
?>
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   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
0
axteure Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   3
 
Guiver ?
0