Besoin d'aide pour mot de passe perdu

Résolu
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014 - 7 mai 2014 à 12:31
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 - 9 mai 2014 à 12:13
bonjour,
j'ai repris un script d'espace membre, sur ce script la page mot de passe perdu ne fonctionner pas, j'ai essayé de refaire le code et j'ai toujours une erreur et je ne c'est pas d'ou est cette erreur (Fatal error: Call to undefined method Inscription::passOubli() in /homepages/15/d272926618/htdocs/essai/membre/new_passe.php on line 31):

<?php


//------------------------------------------------------
// Version issue de la source du site Codes_sources
//------------------------------------------------------
 session_start();
include('header.php');
echo '<div id="header"> 
<div id="logo"></div>
<div id="menu">
<form action="" method="post">
<table align="center" class="form">
<tr>
<td colspan="3" align="center" class="titre_form">Mot de passe oublié</td>
</tr>';

if(!empty($_POST['envoi'])) {
	echo '<tr><td colspan="3" align="center">';
	if(!empty($_POST['email']))
$email = $_POST['email'];
else
exit("mail vide.");

// on se connecte à MySQL
$db = mysql_connect('xxxxxxxxxxxxxxxx', 'xxxxxx', 'xxxxx'); 
// on sélectionne la base
mysql_select_db('xxxxxx',$db); 
 
extract($_POST);
echo Inscription::passOubli($email);

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
if(mysql_num_rows($req) != 1)//si le nombre de lignes retourne par la requete != 1
exit("mail inconnu.");
else
{
$row1 = mysql_fetch_assoc($req);
$retour = mysql_query("SELECT pass FROM tbl_membre WHERE email = '".$email."' ");
$row2 = mysql_fetch_assoc($retour);
 
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$objet = 'Récupération de votre mot de passe';
 
if(!mail($row1['email'], $objet, $row2['pass'], $headers))
echo 'probleme lors de l\'envoi du mail';
else
echo 'mail envoye';
}
	
	
		extract($_POST);
echo Inscription::passOubli($email);

	
	
	echo '</td></tr>';
}
echo '<tr>
<td valign="top" rowspan="4"><img src="design/image/connexion.png" width="70" height="70" /></td>
</tr>
<tr>
<td>Votre Email : </td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit" name="envoi" value="Valider" class="input" /></td>
</tr>
</table>
</form> 
</div> 
</div>';
include('footer.php');
?>

13 réponses

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
7 mai 2014 à 13:45
Bonjour,

Effectivement vu comme ça le script ne peut pas fonctionner.
Tu fais appel à une méthode static dénommée passOubli de la classe Inscription, cependant dans le code envoyé tu ne définis nul part cette classe et ses méthodes.

Sans accès, au moins partiellement, à ce que peut contenir header.php il est plutôt difficile de répondre.

De quel source t'es-tu inspiré ?
header.php défini-t'il la classe Inscription ? Si oui, défini-t'il la méthode que tu appelles ? Si non, il faudrait bien les définir à un moment.
Es-tu sûr de ne pas avoir omis de prendre des fichiers ?

A bientôt,
Nicolas
0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
Modifié par BunoCS le 7/05/2014 à 14:31
merci pour ta réponse.j'ai repris le script d'Espace membre version 3 en php 5 de JejeScript dans l'header il y a ceci :

<?php
include('function.php');
echo '<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Espace Membre en PHP - Par JejeScript et DBMwebdesign.fr</title>
<link href="'.URLSITE.'/design/black-style.css"  rel="stylesheet" type="text/css" media="screen">
</head>
<body>';
?>


je ne suis pas un grand connaisseur en php
0
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
7 mai 2014 à 14:25
De ce que j'ai pu voir dans le code que j'ai trouvé, la méthode n'est tout simplement pas définie. Il faudrait la définir pour que ça fonctionne.

cf. function.php, classe Inscription
0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
7 mai 2014 à 14:32
merci , des que je met cf. function.php, classe Inscription sa me met une erreur certainement je doit le mettre au mauvais endroit
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
7 mai 2014 à 14:39
function.php et header.php devraient être dans le même répertoire.
Quelle est l'erreur exacte ?
0
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 341
7 mai 2014 à 15:23
Je pense que la question exacte à poser est :

Quelle version du script utilises tu ? Celle disponible sur CCM ou bien celle prise sur le site de l'auteur ?

Autre point...
Dans ta page function.php : est ce que dans cette page tu as bien la fonction :
	public static function passOubli($email) 
?

0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
7 mai 2014 à 15:57
oui dans la page fonction.php j'ai bien public
static function passOubli($email)
J'ai modifier juste la page new page car celle de l'auteur été vraiment incomplète voici le script original :
<?php session_start();
include('header.php');
echo '<div id="header"> 
<div id="logo"></div>
<div id="menu">
<form action="" method="post">
<table align="center" class="form">
<tr>
<td colspan="3" align="center" class="titre_form">Mot de passe oublié</td>
</tr>';
if(!empty($_POST['envoi'])) {
	echo '<tr><td colspan="3" align="center">';
	echo '</td></tr>';
}
echo '<tr>
<td valign="top" rowspan="4"><img src="design/image/connexion.png" width="70" height="70" /></td>
</tr>
<tr>
<td>Votre Email : </td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit" name="envoi" value="Valider" class="input" /></td>
</tr>
</table>
</form> 
</div> 
</div>';
include('footer.php');
?> 


et voici le code de la page fonction pour le mot de passe oublié :

	// mot de passe oublier
	// Si l'email est valide
	// 		Si l'email existe dans la bdd
	// 			creation d'un nouveau mot de passe
	// 			enregistrement du nouveau mot de passe
	// 			Si l'envoie de l'email avec nouveau mot de passe est ok
	//				retourne message d'information
	//			Sinon
	//				retourne erreur de l'envoie
	//		Sinon
	//			retourne email existe pas dans la bdd
	// Sinon
	// Retourne email nn valide
	public static function passOubli($email) {
		if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$verifMail = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.EMAIL);
			$verifMail -> bindParam(':email', $email);
			$verifMail -> execute();
			if($verifMail -> rowCount() !== 1) {
				$donnee = $verifMail -> fetch(PDO::FETCH_ASSOC);
				$newPass = Cryptage::chaine(8);
				$cryptPass = Cryptage::crypter($newPass);
				$enregistrePass = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPASS.EMAIL);
				$enregistrePass -> bindParam(':newPass', $cryptPass);
				$enregistrePass -> bindParam(':email', $email);
				$enregistrePass -> execute();
				//               *************************                //
				$headers ='From: "'.$donnee['nom'].' '.$donnee['prenom'].'"'.$email.''."\n";
				$headers .='Reply-To: '.MAILSITE.''."\n";
				$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
				$headers .='Content-Transfer-Encoding: 8bit'; 
				$sujet = "Nouveau mot de passe pour ".NOMSITE;
				$message = 'Bonjour '.$donnee['pseudo'].','."\n\n";
				$message .= "Voici votre nouveau mot de passe : ".$newPass."\n\n";
				$message .= 'Cordialement,'."\n";
				$message .= NOM_SITE.'.'."\n";
				if(mail(MAIL_SITE, $sujet, $message, $headers)) {
					return 'Un nouveau mot de passe viens de vous être envoyé,<br />pensez à vérifiez vos spams.';
				}
				else {
					return '<span class="error-info">"Erreur lors de l\'envoie de votre mot de passe.</span>';
				}
			}
			else {
				return '<span class="error-info">L\'adresse email '.$email.' n\'existe pas,<br />veuillez en saisir une autre et recommencer.</span>';
			}
		}
		else {
			return '<span class="error-info">L\'adresse email saisi n\'est pas valide.</span>';
		}
	}
0
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 341
7 mai 2014 à 16:17
Le souci vient de :
echo Inscription::passOubli($email);


La fonction passOubli se trouve dans la class Connexion et non Inscription.

Essayes avec :
echo Connexion::passOubli($email);

0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
7 mai 2014 à 16:36
merci, il y a de l'amélioration, il me met comme erreur :L'adresse email xxxxx@xxxxx.fr n'existe pas,
veuillez en saisir une autre et recommencer.Erreur SQL !

Query was empty.

Alors que dans la base de donner cette adresse mail existe bien.
0
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 341
7 mai 2014 à 18:03
... Ton adresse mail... elle ne serait pas présente plusieurs fois dans ta table par hasard ??

Ou alors c'est qu'aucune requête n'a été mise en place pour ça...et qu'il te faudra la créer manuellement...
Au cas où ajoutes un Echo de la requête pour voir à quoi elle ressemble et teste là en direct dans ta BDD pour voir ce qu'elle te retourne.

public static function passOubli($email) {
		if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$verifMail = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.EMAIL);
			$verifMail -> bindParam(':email', $email);
			$verifMail -> execute();
			if($verifMail -> rowCount() !== 1) {
				$donnee = $verifMail -> fetch(PDO::FETCH_ASSOC);
				$newPass = Cryptage::chaine(8);
				$cryptPass = Cryptage::crypter($newPass);
				$enregistrePass = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPASS.EMAIL);
				$enregistrePass -> bindParam(':newPass', $cryptPass);
				$enregistrePass -> bindParam(':email', $email);
				$enregistrePass -> execute();
				//               *************************                //
				$headers ='From: "'.$donnee['nom'].' '.$donnee['prenom'].'"'.$email.''."\n";
				$headers .='Reply-To: '.MAILSITE.''."\n";
				$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
				$headers .='Content-Transfer-Encoding: 8bit'; 
				$sujet = "Nouveau mot de passe pour ".NOMSITE;
				$message = 'Bonjour '.$donnee['pseudo'].','."\n\n";
				$message .= "Voici votre nouveau mot de passe : ".$newPass."\n\n";
				$message .= 'Cordialement,'."\n";
				$message .= NOM_SITE.'.'."\n";
				if(mail(MAIL_SITE, $sujet, $message, $headers)) {
					return 'Un nouveau mot de passe viens de vous être envoyé,<br />pensez à vérifiez vos spams.';
				}
				else {
					return '<span class="error-info">"Erreur lors de l\'envoie de votre mot de passe.</span>';
				}
			}
			else {
				return '<span class="error-info">L\'adresse email '.$email.' n\'existe pas,<br />veuillez en saisir une autre et recommencer.</span> <br><pre>'.SELECT.ALL.MEMBRE.EMAIL .' <br> Email = '.$email.' <br> RowCount = '.  $verifMail -> rowCount()   .' </pre></br>';
			}
		}
		else {
			return '<span class="error-info">L\'adresse email saisi n\'est pas valide.</span>';
		}
	}


0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
Modifié par stephane07130 le 8/05/2014 à 11:00
non mon adresse mail n'est pas présente plusieurs fois dans la base de donner, j'ai essayé l'echo est voici se qui me dit :
SELECT * FROM JejeScriptMembres WHERE email=:email
Email = ****@*****.fr
RowCount = 1

et un message en me disant que l'adresse mail n'existe pas, alors qu'elle est bien présente dans la base de donner
0
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 341
9 mai 2014 à 08:00
public static function passOubli($email) {
		if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
			$verifMail = Bdd::connectBdd()->prepare(SELECT.ALL.MEMBRE.EMAIL);
			$verifMail -> bindParam(':email', $email);
			$verifMail -> execute();
			if($verifMail -> rowCount() == 1) {
				$donnee = $verifMail -> fetch(PDO::FETCH_ASSOC);
				$newPass = Cryptage::chaine(8);
				$cryptPass = Cryptage::crypter($newPass);
				$enregistrePass = Bdd::connectBdd()->prepare(UPDATE.MEMBREZ.MAJPASS.EMAIL);
				$enregistrePass -> bindParam(':newPass', $cryptPass);
				$enregistrePass -> bindParam(':email', $email);
				$enregistrePass -> execute();
				//               *************************                //
				$headers ='From: "'.$donnee['nom'].' '.$donnee['prenom'].'"'.$email.''."\n";
				$headers .='Reply-To: '.MAILSITE.''."\n";
				$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
				$headers .='Content-Transfer-Encoding: 8bit'; 
				$sujet = "Nouveau mot de passe pour ".NOMSITE;
				$message = 'Bonjour '.$donnee['pseudo'].','."\n\n";
				$message .= "Voici votre nouveau mot de passe : ".$newPass."\n\n";
				$message .= 'Cordialement,'."\n";
				$message .= NOM_SITE.'.'."\n";
				if(mail(MAIL_SITE, $sujet, $message, $headers)) {
					return 'Un nouveau mot de passe viens de vous être envoyé,<br />pensez à vérifiez vos spams.';
				}
				else {
					return '<span class="error-info">"Erreur lors de l\'envoie de votre mot de passe.</span>';
				}
			}
			else {
				return '<span class="error-info">L\'adresse email '.$email.' n\'existe pas,<br />veuillez en saisir une autre et recommencer.</span> <br><pre>'.SELECT.ALL.MEMBRE.EMAIL .' <br> Email = '.$email.' <br> RowCount = '.  $verifMail -> rowCount()   .' </pre></br>';
			}
		}
		else {
			return '<span class="error-info">L\'adresse email saisi n\'est pas valide.</span>';
		}
	}

0
stephane07130 Messages postés 11 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 9 mai 2014
9 mai 2014 à 09:54
merci pour ta réponse, désoler je ne l'avais pas lu.
Aprés avoir mis dans ma page fonction ton code voici l'erreur qui me donne :Mot de passe oublié
"Erreur lors de l'envoie de votre mot de passe.Erreur SQL !

Query was empty
0
jordane45 Messages postés 37514 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 31 mai 2023 341
9 mai 2014 à 12:13
Bonjour,

Bon.. on va pas tout refaire....

Le message d'erreur qu'il te donne provient du code :

				if(mail(MAIL_SITE, $sujet, $message, $headers)) {
					return 'Un nouveau mot de passe viens de vous être envoyé,<br />pensez à vérifiez vos spams.';
				}
				else {
					return '<span class="error-info">"Erreur lors de l\'envoie de votre mot de passe.</span>';
				}


C'est donc que le " IF " n'est pas bon...
(ce n'est pas un bug.. juste que la fonction MAIL n'a pas marché...)

Déjà.. tout dépend sur quoi tu héberges ton application (en local sur ton PC.. sur un serveur ...) .. le paramétrage de ton serveur SMTP...etc.

Concernant la discussion actuelle... la question initiale étant :
cette erreur (Fatal error: Call to undefined method Inscription::passOubli() in /homepages/15/d272926618/htdocs/essai/membre/new_passe.php on line 31):
Celle-ci est RESOLU.

Il serait bien de clore ce sujet et de réouvrir une nouvelle discussion pour ce "nouveau" problème..

Même si je pense que s'acharner sur la résolution des soucis provenant de cette source est une perte de temps... je trouve qu'il y a trop de bugs et que le code est assez mal fait.
Personnellement j'essaierai de trouver une autre source plus "fiable" que celle que tu as téléchargé....



0