OVH Cloud OVH Cloud

Modification de mot de passe

1 réponse
Avatar
aubiben
Bonjour à tous,

J'ai cérer une page avec un formulaire pour modifier un mot de passe.
Le problème est que mon update se fait dans la base de donnée, mais
on dirait que le script ne confirme pas. Il semble qu'après le update,
le script arrête et la page se regénère. Si quelqu'un à une
solution, merci.

$ancien = $HTTP_GET_VARS["ancien"];
$nouveau = $HTTP_GET_VARS["nouveau"];
$confirme = $HTTP_GET_VARS["confirme"];
$sql1 = "select * from profs where id_prof = '".$current_user."'";
$c = mysql_fetch_array(requete($sql1));
if (($c["pass"] != $ancien) || ($nouveau != $confirme))
{
$message = "Erreur, veuillez recommencer";
}
else if (($c["pass"] == $ancien) && ($nouveau == $confirme))
{
$sql2 = "update profs set pass = '".$confirme."' where id_prof '".$current_user."'";
$r = mysql_query($sql2);
$message = 'Votre mot de passe a été modifié';
}
else
{
$message = 'Erreur';
}
}

1 réponse

Avatar
MaXX
Bonjour,


wrote:
Bonjour à tous,
J'ai cérer une page avec un formulaire pour modifier un mot de passe.
Le problème est que mon update se fait dans la base de donnée, mais
on dirait que le script ne confirme pas. Il semble qu'après le update,
le script arrête et la page se regénère. Si quelqu'un à une
solution, merci.
Vous n'avez probablement pas copié tout le code, il y a une "}" de trop

selon moi... Le rechargement de la page vient peut être de la partie que
vous avez omis de copier... (genre le bloc "if" qui determine si on a
affaire a une demande de changement de mdp)

$ancien = $HTTP_GET_VARS["ancien"];
$nouveau = $HTTP_GET_VARS["nouveau"];
$confirme = $HTTP_GET_VARS["confirme"];
Utilisez plutot la methode POST, ca évitera d'avoir les mots de passes

en clair dans l'url (et l'historique du navigateur)...

$sql1 = "select * from profs where id_prof = '".$current_user."'";
Je vous deconseille de passer une entrée utilisateur dans une requète

sql sans l'avoir passé par un petit nettoyage et verifié que sa longueur
est correcte pour le type de champ utilisé... (voir du cote de
preg_match pour n'autoriser que certains caractères, par ex: A-Za-z0-9).
Vous le faites peut être mais rien ne me permet de le dire.

$c = mysql_fetch_array(requete($sql1));
if (($c["pass"] != $ancien) || ($nouveau != $confirme))
{
$message = "Erreur, veuillez recommencer";
}
else if (($c["pass"] == $ancien) && ($nouveau == $confirme))
ce test est redondant...

{
$sql2 = "update profs set pass = '".$confirme."' where id_prof '".$current_user."'";
Imaginez ce qu'il se passe si $nouveau et $confirme contiennent (sans

les guillemets doubles) "';--", et hop plus de mot de passes...

$r = mysql_query($sql2);
$message = 'Votre mot de passe a été modifié';
}
else
et lui inutile.

{
$message = 'Erreur';
}
}
^

+- je ne sais pas d'ou vient celle-ci

Je réecrirais ca simplement comme ceci (à tester):

if (($c["pass"] == $ancien) && ($nouveau == $confirme)) {
$sql2 = "UPDATE profs SET pass = '".$confirme."' WHERE id_prof
'".$current_user."'";
$r = mysql_query($sql2);
$message = 'Votre mot de passe a été modifié';
}
else{
$message = 'Erreur: soit vous n'avez pas introduit correctement votre
mot de passe actuel, soit vous avez pas introduit deux fois votre
nouveau mot de passe; Veuillez recommencer.';
}

Voilà, j'espere ne pas avoir dit trop de bétises,
--
MaXX