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';
}
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
Bonjour,
aubiben@hotmail.com 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
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