Changement de mot de passe - Espace membre

Résolu/Fermé
axteure Messages postés 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 - Modifié par axteure le 21/04/2013 à 20:35
Guiver Messages postés 262 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 - 23 avril 2013 à 11:54
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 mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
23 avril 2013 à 09:55
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
23 avril 2013 à 10:53
mince quel ^ù$^* je suis --', dans la bdd le champs s'appelle "pass_md5"
0
axteure Messages postés 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
23 avril 2013 à 10:57
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
23 avril 2013 à 10:59
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 mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
23 avril 2013 à 11:54
Content d'avoir pu aider ;)
0
Guiver Messages postés 262 Date d'inscription mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
22 avril 2013 à 14:35
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
22 avril 2013 à 14:59
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 mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
22 avril 2013 à 15:18
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
22 avril 2013 à 15:46
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 mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
22 avril 2013 à 16:10
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
22 avril 2013 à 17:26
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 mardi 30 novembre 2010 Statut Membre Dernière intervention 20 mai 2021 87
22 avril 2013 à 17:44
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
22 avril 2013 à 17:59
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 62 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 9 janvier 2017 3
23 avril 2013 à 10:05
Guiver ?
0