Besoin d'aide pour mot de passe perdu [Résolu]

Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
- - Dernière réponse : jordane45
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
- 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');
?>
Afficher la suite 

Votre réponse

13 réponses

Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Dernière intervention
10 mai 2014
3
0
Merci
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
Commenter la réponse de ndubien
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
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
Commenter la réponse de stephane07130
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Dernière intervention
10 mai 2014
3
0
Merci
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
Commenter la réponse de ndubien
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
merci , des que je met cf. function.php, classe Inscription sa me met une erreur certainement je doit le mettre au mauvais endroit
Commenter la réponse de stephane07130
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Dernière intervention
10 mai 2014
3
0
Merci
function.php et header.php devraient être dans le même répertoire.
Quelle est l'erreur exacte ?
Commenter la réponse de ndubien
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364
0
Merci
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) 
?

Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
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>';
		}
	}
Commenter la réponse de stephane07130
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364
0
Merci
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);

Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
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.
jordane45
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364 -
... 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>';
		}
	}


Commenter la réponse de stephane07130
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
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
Commenter la réponse de stephane07130
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364
0
Merci
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>';
		}
	}

Commenter la réponse de jordane45
Messages postés
11
Date d'inscription
mercredi 30 avril 2014
Dernière intervention
9 mai 2014
0
Merci
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
Commenter la réponse de stephane07130
Messages postés
25029
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mars 2019
364
0
Merci
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é....



Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.