en fait mon but est d' envoyer un mot de passe (’mdp’) d' une table 'utilisateurs’ qui appartient à une BDD 'desert’. Dans un premier temps l' envoi de mail avec un message fonctionne à merveille. Mais mon maître de stage m' a demandé de récupérer le 'mdp' d' un utilisateur au cas où ce dernier l' aurait oublié. Donc si quelqu' un pourrait se pencher sur mon cas, ce serait très sympa de sa part.

Voici mon code =

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Mot de passe oubli&eacute</title>
    </head>
    <body>
        <h1>Mot de passe oubli&eacute</h1>
            <form method="post">
            <label>Email</label>
            <input type="email" name="email" required><br>
            <label>Message</label>
            <textarea name="message" required></textarea><br>
            <input type="submit">
        </form>
        



<?php

//connexion;

$userdb="phpmyadmin";
$passdb="*******";
$dbname="******";
$host="localhost";


try
{
    $bdd = new PDO('mysql:host='. $host .';dbname='. $dbname .';charset=utf8', $userdb, $passdb);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}



//envoi d' un simple mail avec son message
        if(isset($_POST['message'])){
            $position_arobase=strpos($_POST['email'],'@');
            if($position_arobase===false)
                echo '<p>Votre email doit comporter un arobase.</p>';
            else {
                $retour=mail('*******@gmail.com','Envoi depuis *******', $_POST['message'], 'From : '.$_POST['mail']);
                if($retour)
                    echo '<p>Votre message a &eacutet&eacute envoy&eacute.</p>';
                else
                    echo '<p>Erreur.</p>';
            }
        }
        
  



//envoi du mdp par mail (sur quoi je bloque)

if(!empty($_POST['mail']))
$mail = $_POST['mail'];
else
exit("mail vide.");
 

$sql = "SELECT mail FROM utilisateurs WHERE mail = '".$mail."' ";
$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 mdp FROM utilisateurs WHERE mail = '".$mail."' ");
$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['mail'], $objet, $row2['mdp'], $headers))
echo 'probleme lors de l\'envoi du mail';
else
echo 'mail envoye';
}


?>
    </body>
</html>

Salut poussmouss !

Tu instancies un object PDO pour ta connexion à la base de données mais tu ne l'utilises pas. Jette un coup d'oeil à cette page pour apprendre à t'en servir.

Sinon on comprends ce que tu as l'intention de faire, mais c'est pas forcément en lisant ton code qu'on va déceler les erreurs toute de suite. Tu as un message d'erreur en particulier ? Tu as un résultat mais pas celui attendu ?
Merci pour ton retour,
J' ai rectifié tout ce qui concerne l' objet PDO.
Le problème c' est qu' il n' y a aucune erreur, je m' explique :
je souhaiterais récupérer une donnée 'mdp' en appelant une base de donnée biensûr, pour ensuite l' envoyer par mail. Mais le mail s(' envoie sans que le mdp n' y figure.
ça serait sympa de ta part si tu pourrais me filer un coup de main, c' est pour une soutenance Smiley boulet


<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Mot de passe oubli&eacute</title>
    </head>
    <body>
        <h1>Mot de passe oubli&eacute</h1>
            <form method="post">
            <label>Email</label>
            <input type="email" name="mail" required><br>
            <label>Message</label>
            <textarea name="message" required></textarea><br>
            <input type="submit">
        </form>
 


 <?php
 
  $userdb="******";
$passdb="******";
$dbname="******";
$host="*********";
 
 
try
{
    	$bdd = new PDO('mysql:host='. $host .';dbname='. $dbname .';charset=utf8', $userdb, $passdb);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
 
 
 
 
        	if(isset($_POST['message'])){
            	$position_arobase=strpos($_POST['mail'],'@');
 
		 if($position_arobase===false)
 
	 echo '<p>Votre email doit comporter un arobase.</p>';
 
else {
                $retour=mail('**********@gmail.com','Envoi depuis ***********', $_POST['message'], 'From : '.$_POST['mail']);
 
	 if($retour)
                    echo '<p>Votre message a &eacutet&eacute envoy&eacute.</p>';
                else
                    echo '<p>Erreur.</p>';
            }
        }
 
 
 
 
	if(!empty($_POST['mail']))
	$mail = $_POST['mail'];
else
	exit("mail vide.");
 
 
	$sql = "SELECT mail FROM utilisateurs WHERE mail = '".$mail."' ";	
	
	$req =$bdd->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 = $bdd->query("SELECT mdp FROM utilisateurs WHERE mail =  :mail ");
	$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['mail'], $objet, $row2['mdp'], $headers))
	echo 'probleme lors de l\'envoi du mail';
else
	echo 'mail envoye';
}
 
 
?>
  	  </body>
	</html>

Modifié par poussmouss (24 Aug 2018 - 14:33)
Bah c'est normal, tu fais un truc inutile.

Essaie sans autre requête :


<?php
    include('./Models/db_connect.php');
    $query =
    'SELECT password FROM users WHERE email = :mail';

    $query_params = array(":mail" => 'rick_and_moriarty@gmail.com');

    try {
        $stmt = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }catch(PDOException $ex){
        die("Failed to run query: " . $ex->getMessage());
    }
    $row = $stmt ->fetchAll(); /** Le fetch retourne toujours un array en plus de true/false d'où le fetchAll qui retourne un tableau ou pas*/
    if(count($row) > 0){ /**Utilisateur trouvé (tableau non vide) je sais qu'il y en a un seul grâce à la contrainte unique sur le mail et en raison des probabilités de combinaison correcte le cas échéant */
        echo 'Message envoyé';
    } else { /** Tableau vide */
        echo 'Utilisateur inconnu ou combinaison incorrecte';
    }
?>

/** Le db_connect dans les Models */
<?php
    $db_username = "fdsf";
    $db_password = "";
    $db_host = "localhost";
    $db_name = "dsqdqd";
    /* PDO EN FR OU EN ANGLAIS*/
    $db_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", 
                        PDO::MYSQL_ATTR_INIT_COMMAND => "SET lc_time_names = 'fr_FR'");

        try {
            $db = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_username, $db_password, $db_options);
        } catch(PDOException $ex) {
            die("Failed to connect to the database: " . $ex->getMessage());
        }

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
?>

Modifié par Athos_is_coding (24 Aug 2018 - 15:01)
Ton erreur c'est ça :

$req =$bdd->query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 <!-- Pour pas utiliser !empty($req) ou isset($req[0]))? Il te faut un try catch -->
	if(mysql_num_rows($req) != 1)		//si le nombre de lignes retourne par la requete != 1
	exit("mail inconnu.");
else
{

Après perso en méthodo ton code est très brouillon
Modifié par Athos_is_coding (24 Aug 2018 - 14:50)
Merci mais cela ne m' affiche rien.
J' ai tout recommencé, mais cette fois-ci j' ai procédé par étape.
J' ai créé un simple formulaire avec un e-mail à compléter, et dès que je clique "OK", l'e-mail et le MDP (contenu dans une BDD) qui lui est propre, s' affiche.
Mais maintenant, je souhaite récupérer cette requête pour ensuite l' envoyer par mail.
Ce qui me pose problème n' est pas l' envoi de mail mais la méthode à faire pour récupérer sous forme de requête le MDP (pour ensuite l' envoyer par e-mail.)
Si KK1 aurait une piste, ou un bout de requête ce serait sympa de sa part.
Cordialement.

PS: je suis passé en MySQLI
Voici mon code=

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form method="post">
            <label>Votre email : </label>
            <input type="text" name="mail">
            <input type="submit" value="OK">
        </form>
        <p>       

<?php
        
$bdd = new mysqli("localhost", "*******", "*******", "******");
	

	if ($bdd->connect_errno) {
    	echo "Echec lors de la connexion à MySQL : (" . $bdd->connect_errno . ") " . $bdd->connect_error;
}
	echo $bdd->host_info . "\n";



$mail=$_POST['mail'];

$req = "SELECT * FROM utilisateurs where mail = '$mail'";
 
// j' envoie la requête
	
	$res = $bdd->query($req);
 
// je scanne un par un

	
	echo "<table>";
		
	while ($data = mysqli_fetch_array($res)) {

// on affiche les résultats

	echo (" Votre adresse mail est : ");
	echo "<tr><td>".$data['mail']."</td>
	
	

	<td>".$data['mdp']."</td></tr>";
}
	echo "</table>";

        ?>
	</p>
    </body>
</html>
Salut

cette ligne t'affiche bien le mot de passe ? <td>".$data['mdp']."</td></tr>"; ?
Pardon pour ce retour tardif, et merci d' avoir répondu;

alors oui effectivement le MDP s' affiche, mais c' est juste un test de requête.

Je souhaiterais envoyer le MDP de chacun et chacune, par rapport au $_POST['mail'].
Auriez-vous juste une piste, j' avoue avec PDP, MySql ,..je me mêle les pinceaux !
En fait pour être plus clair =

Je sais afficher les résultats de ma requete dans une page, mais je souhaiterais mettre tout le contenu de cet affichage (mon html resultant de la requete) dans une variable que j' ajoute au corps de mon message.
J' ai trouvé Smiley biggrin Smiley biggrin

Bon courage la communauté Smiley murf
Je précise c'est un simple formulaire qui récupère un mdp de ma base de donnée propre au mail rempli dans ce formulaire, ceci est juste un test, à vous et à moi de l'améliorer pour y mettre plus de sécurité.
Modifié par poussmouss (28 Aug 2018 - 11:40)
Meilleure solution