Page 1 sur 1

Récupération Mot de Passe

Posté : 03 oct. 2006, 11:07
par Photographiquement Vôtre
Bonjour,

J' ai créé une page de création de nouveau mot passe en cas d'oubli en fonction de l'email.

Mais elle me met un message d'erreur car ne reconnait pas l'email (Fonction valide_form)

Pouvez vous me dire d'où cela vient.

Merci d'avance

Ma page :
<?

include("../connection.php");

include("../configuration.inc.php");

/* Le formulaire a été soumis, vérif si l'identification est ok */
if (sizeof($HTTP_POST_VARS) > 0) 
	{
	$frm = $HTTP_POST_VARS;
	$message_erreur = valide_form($frm, $erreurs);

	if (empty($message_erreur))
		{
		$nom_utilisateur = recupere_nom_utilisateur($HTTP_POST_VARS["email"]);
		
		initialise_mot_passe($nom_utilisateur);

		$DOC_TITLE = "[CQFD Production]";
		include("$repertoire_modele/haut.php");
		include("modeles/oubli_mot_passe_succes.php");
		include("$repertoire_modele/bas.php");
		die;
		}
	}

$DOC_TITLE = "[CQFD Production]";
include("$repertoire_modele/haut.php");
include("modeles/oubli_mot_passe_form.php");
include("$repertoire_modele/bas.php");

/******************************************************************************
 * FONCTIONS
 *****************************************************************************/

function valide_form(&$frm, &$erreurs)
{
/* Valide le formulaire de mot de passe, et renvoie un message d'erreur
 * Si le message est vide, alors il n'y a pas d'erreur */
	$test=$frm["email"];
	$erreurs = array();
	$msg = "";

	if (empty($frm["email"])) {
		$erreurs["email"] = true;
		$msg .= "Vous n'avez pas saisi d'adresse mail";
	}
	elseif  ((mysql_num_rows(mysql_query("SELECT * FROM tblutilisateur WHERE utilisateurEmail ='$test'")or exit ('Erreur SQL !'.$qid.'<br>'.mysql_error())) == 0)) {
		$erreurs["email"] = true;
		
		$msg .= " Cette adresse électronique n'existe pas ";
		
	}

	return $msg;
}

function recupere_nom_utilisateur($email)
{
/* Obtient le nom d'utilisateur basé sur une adresse e-mail */

	$qid = mysql_query("SELECT utilisateurEmail FROM tblutilisateur WHERE utilisateurEmail = '$email'")or exit ('Erreur SQL !'.$qid.'<br>'.mysql_error());
	if ($qid)
		{
		if (mysql_num_rows($qid) > 0)
			{
			$utilisateur = mysql_fetch_array($qid);
			}
		}

	return $utilisateur["email"];
}

?>
Mon Formulaire : oubli_mot_passe_form
<table cellpadding=0 cellspacing=0 border=0 >
			<tr><td class=tetiere align=center >Récupérer un mot de passe</td></tr>
		</table><p></p>
<table cellpadding=20>
<tr valign=top>
<td width=300 class=normal>
	<p>Entrez votre adresse e-mail pour récupérer votre mot de passe. En validant ce formulaire, 
	votre mot de passe sera réinitialisé et le nouveau mot de passe vous sera envoyé automatiquement par e-mail.
</td>

<td bgcolor="#ffffcc">
<?php
if (! empty($message_erreur))
	{
?>
	<div class=warning align=center><?=$message_erreur ?></div>
<?php
	 }
 ?>

	<form name="entryform" method="post" action="<?=$_SERVER['PHP_SELF']?>">
	<table>
		<tr>
			<td class="label">Adresse email:</td>
			<td><input type="text" name="email" size=25 value="<?=$frm['email'] ?>"></td>
		</tr>
		<tr>
			<td colspan=2 align=center><input type="submit" value="Envoyer" class="bouton"><input type="button" value="Annuler" class="bouton" onClick="javascript: history.go(-1)">
			<p class=normal>
			  <a class="normal" href="../membre.php">S'identifier</a>
			| <a class="normal" href="../index.php">Page d'accueil</a>
			</td>
	</table>
	</form>
</td>
</tr>
</table>

Posté : 03 oct. 2006, 11:23
par LEON
Salut,

Tout d'abord, je te conseille d'utiliser la méthode
$_POST[]
A la place de
$HTTP_POST_VARS
Qui est obsolète.

Ensuite, peux-tu nous en dire un peu plus sur l'erreur que tu reçois?
Quel genre, et à quelle ligne?

Merci.

Posté : 03 oct. 2006, 11:27
par Ryle
Y a pas un petit soucis de logique là :
elseif  ((mysql_num_rows(mysql_query("SELECT * FROM tblutilisateur WHERE utilisateurEmail ='$test'")or exit ('Erreur SQL !'.$qid.'<br>'.mysql_error())) == 0)) { 
        $erreurs["email"] = true; 
         
        $msg .= " Cette adresse électronique n'existe pas "; 
         
    } 
S'il y a des lignes dans ton SELECT tu informes que l'adresse n'existe pas :)

Décompose d'avantage ton code, ca sera plus lisible et plus facile à maintenir ou a debugger puisque tu pourras tester les différentes étapes :
else {
  $sql = "SELECT * FROM tblutilisateur WHERE utilisateurEmail ='$test'";
  $rs = mysql_query($sql) or die ('Erreur SQL !'.$qid.'<br>'.mysql_error());
  if(mysql_num_rows($rs)) { // tu devrais avoir un succes ici et non une erreur :)
    $erreurs["email"] = true; 
    $msg .= " Cette adresse électronique n'existe pas "; 
  }
}

Posté : 03 oct. 2006, 11:29
par zeus
De plus, des lignes comme celle là
elseif  ((mysql_num_rows(mysql_query("SELECT * FROM tblutilisateur WHERE utilisateurEmail ='$test'")or exit ('Erreur SQL !'.$qid.'<br>'.mysql_error())) == 0)) {
C'est un nid à bug.

Je suis pour la lisibilité du code et je ne pense pas, avec les machines actuelles, que d'écrire 5 lignes de plus soient vraiment pénalisant et je trouve que c'est plus lisible comme ça ;
else
{
    $str_requete = "SELECT * FROM tblutilisateur WHERE utilisateurEmail ='$test'";
    $o_result = mysql_query($stre_requete) or exit ('Erreur SQL !'.$qid.'<br>'.mysql_error());

    $nb_result = mysql_num_rows($o_result);
    if  ($nb_resut == 0)) {
        ...
    }
}

Posté : 03 oct. 2006, 13:06
par Photographiquement Vôtre
Merci j'ai remis le code plus propre ce qui m'a permis de résoudre le pb