Récupération Mot de Passe

Eléphant du PHP | 330 Messages

03 oct. 2006, 11:07

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>
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent

Eléphant du PHP | 50 Messages

03 oct. 2006, 11:23

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 oct. 2006, 11:27

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 "; 
  }
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 oct. 2006, 11:29

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)) {
        ...
    }
}
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 330 Messages

03 oct. 2006, 13:06

Merci j'ai remis le code plus propre ce qui m'a permis de résoudre le pb
-------------------------------------------------------
Il n'y a que les cons et les moules qui adhèrent