Mot de passe qui change tout seul dans la bdd
Posté : 11 mars 2014, 22:26
Bonjour à tous.
je suis confronté à un problème très embêtant. Lorsque mes membres modifient leur profil, de temps en temps, sans que je ne sache pourquoi, le mot de passe se modifie.
Il devient d41d8cd98f00b204e9800998ecf8427e . Après des recherches j'ai trouvé que cela correspondait à la chaine vide du md5. J'en ai conclu que mon erreur devait être que si le membre valide la modification de son profil sans mettre de mot de passe, cela envoie un mot de passe 'vide'. Seulement, malgré mes différents essais, je n'arrive pas à empêcher ce problème.
Voici mon code :
En tout cas, merci d'avance si vous lisez ce post et que vous essayez de m'aider.
je suis confronté à un problème très embêtant. Lorsque mes membres modifient leur profil, de temps en temps, sans que je ne sache pourquoi, le mot de passe se modifie.
Il devient d41d8cd98f00b204e9800998ecf8427e . Après des recherches j'ai trouvé que cela correspondait à la chaine vide du md5. J'en ai conclu que mon erreur devait être que si le membre valide la modification de son profil sans mettre de mot de passe, cela envoie un mot de passe 'vide'. Seulement, malgré mes différents essais, je n'arrive pas à empêcher ce problème.
Voici mon code :
<?php
session_start();
$titre="Profil";
include("includes/identifiants.php");
include("includes/debut3.php");
include("includes/menu.php");
//On récupère la valeur de nos variables passées par URL
$action = (isset($_POST['action'])) ? $_POST['action'] : (isset($_GET['action']) ? $_GET['action'] : null);
$membre = isset($_GET['m'])?(int) $_GET['m']:'';
?>
Le début où j'récupère le membre et l'action. case "modifier":
if (empty($_POST['sent']))
{
$id=$_SESSION['id'];
//On commence par s'assurer que le membre est connecté
if ($id==0) erreur(ERR_IS_NO_CO);
//On prend les infos du membre
$query=$db->prepare('SELECT membre_pseudo, membre_email,
membre_siteweb, membre_signature, membre_msn, membre_localisation,
membre_avatar, membre_perso, lvl_perso
FROM forum_membres WHERE membre_id=:id');
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> Modification du profil';
echo '<h1>Modifier son profil</h1>';
echo '<form method="post" action="voirprofil.php?action=modifier" enctype="multipart/form-data">
<fieldset><legend>Identifiants</legend>
Pseudo : <strong>'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</strong><br /> <br />
<label for="password"><strong>Nouveau mot de Passe :</strong></label>
<input type="password" name="password" id="password" /><br /><br />
<label for="confirm"><strong>Confirmer le mot de passe :</strong></label>
<input type="password" name="confirm" id="confirm" />
</fieldset>
/// [...]
echo'
<p>Veuillez confirmer votre mot de passe avant de valider.<br /><br />
<input type="submit" value="Modifier son profil" />
<input type="hidden" id="sent" name="sent" value="1" />
</p></form>';
}
Ensuite la vérification que le mot de passe existe (mon erreur est sûrement ici) : else //Sinon on est dans la page de traitement
{
$mdp_erreur = NULL;
$i = 0;
if ($_POST['password'] == $_POST['confirm']|| !empty($_POST['confirm']) || !empty($_POST['password']))
{
$pass = md5($_POST['password']);
$confirm = md5($_POST['confirm']);
}
if ($pass != $confirm || empty($confirm) || empty($pass))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
$i++;
}
et enfin l'envoi du mot de passe :if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
{
if ($pass == $confirm && isset($confirm) || isset($pass))
{
$query=$db->prepare('UPDATE forum_membres
SET membre_mdp = :mdp, membre_email=:mail, membre_siteweb=:website,
membre_signature=:sign, membre_localisation=:loc, membre_perso=:perso, lvl_perso=:lvl_perso
WHERE membre_id=:id');
$query->bindValue(':mdp',$pass,PDO::PARAM_STR);
$query->bindValue(':mail',$email,PDO::PARAM_STR);
$query->bindValue(':website',$website,PDO::PARAM_STR);
$query->bindValue(':sign',$signature,PDO::PARAM_STR);
$query->bindValue(':loc',$localisation,PDO::PARAM_STR);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->bindValue(':perso',$perso,PDO::PARAM_INT);
$query->bindValue(':lvl_perso',$lvl_perso,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
}
J'ai enlevé le reste des infos que les membres modifient sur leur profil. Mais si ça peut vous aider pour trouver mon erreur je le rajouterais.En tout cas, merci d'avance si vous lisez ce post et que vous essayez de m'aider.