IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Envoyer resultat requete SQL par mail en PHP [PHP 7]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Envoyer resultat requete SQL par mail en PHP
    Bonjour,

    à ce jour j'arrive a envoyé un mail, j'arrive a faire de requête sql les afficher faire des conditions avec MAIS comment est ce que je peux envoyer le résultat d'une requête sql par email?
    j'ai compris le principe il faut stocker la requête dans une variable puis on envoie MAIS encore une fois je n'ai pas du tout la syntaxe et je ne trouve pas de la documentation RECENTE.
    Tout ce que je trouve date de 2010
    donc si quelqu'un peut m'orienter vers une documentation récente ou m'envoyer un exemple de code.
    je vous aime.
    merci.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    pour envoyer un e-mail basique, il y a cette fonction php
    https://www.php.net/manual/fr/function.mail.php
    et pour envoyer un e-mail plus complexe (en html, images, pièces-jointes) il y a cette bibliothèque :
    https://github.com/PHPMailer/PHPMailer

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    oui je connais les deux mais ma question comment envoyé un mail après une requête sql (qui sera stocké dans un fichier text )
    Du style selecte * from table1 -> send mail

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Quelque chose comme ça ?

    Je ne comprends pas ce que vous voulez dire par "qui sera stocké dans un fichier text".

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    $req = "SELECT * FROM table";
    $sth = $db->prepare($req);
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_OBJ);
    $to = "youremail@domain.tld";
    $subject = "Résultats de la requête";
    $message = [
        'Requête : ' . $req,
        'Résultats : ',
        print_r($results, true),
    ];
    mail($to, $subject, implode(PHP_EOL, $message));

    Explications : j'ai pour habitude de mettre mes messages dans un tableau, de cette façon, chaque colonne correspond à une ligne. J'utilise alors la fonction implode() pour tout mettre sur une ligne et j'utlise PHP_EOL comme glue afin de créer des retours à la ligne à chaque fois

    Vu qu'on ne met pas de header HTML, le mail est en mode TEXT et donc de simples retour à la ligne suffisent pour le mettre en forme

    PS : Le second attribut de print_r() permet de faire un return de la réponse plutôt qu'un echo() ;-)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    merci je vais tester ca

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
     
     try 
     {
         // connexion bdd + catch erreur
         $bdd = new PDO('mysql:host=localhost;dbname=utilisateur;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
     }
     catch(PDOException $e)
     {
         die('Erreur : '.$e->getMessage());
     }
     
    $req = "SELECT * FROM uti";
    $sth = $bdd->prepare($req);
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_OBJ);
    $to = "monmail@gmail.com";
    $subject = "Résultats de la requête";
    $message = [
        'Requête : ' . $req,
        'Résultats : ',
        print_r($results, true),
    ];
    mail($to, $subject, implode(PHP_EOL, $message));

    Citation Envoyé par L'erreur
    Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp64\www\test\eamillll.php on line 24
    c'est normal que j'ai cette erreur ?

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    Si vous êtes en local, c'est normal.
    Les packages locaux (XAMPP, WAMPP, MAMPP, etc) ne sont pas configurés pour envoyer des mails.

    En réalité, il n'est pas possible d'envoyer directement des mails depuis le serveur local.
    Il va falloir configurer le serveur (Sendmail souvent) pour lui donner les infos de connexion à un service SMTP

    J'avais rédigé un article à ce sujet il y a presque 10 ans (omg ça me rajeuni pas) : https://blog.pierre-roels.com/2012/1...xampp-windows/
    Je ne peux pas confirmer que ça fonctionne encore vu l'âge que ça a mais c'est peut-être une piste

    Bon courage car c'est souvent une sinécure à configurer car soit ça marche du premier coup est c'est tant mieux, soit ça ne marche pas et c'est compliqué pour trouver ce qui bloque

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    hahahahah ca marche merci je vais voir ca tout de suite

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    hmmmm je viens de voir est ce que ça marche avec wamp tu penses ?

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Le principe sera probablement le même (ou très proche). Les seules choses qui peuvent changer c'est l'arborescence des dossiers et le fait que Wamp utilise peut-être autre chose que sendmail.exe et donc c'est un autre fichier de configuration qu'il faut modifier

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Le principe sera probablement le même (ou très proche). Les seules choses qui peuvent changer c'est l'arborescence des dossiers et le fait que Wamp utilise peut-être autre chose que sendmail.exe et donc c'est un autre fichier de configuration qu'il faut modifier
    bon voila j'ai décidé de passer pas PHP mailer finalement et faire une combi entre le bout de code que tu m'as envoyer et ce que j'ai compris.
    (message d'erreur est commenté en bas )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php 
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
     
    require 'includes/Exception.php';
    require 'includes/SMTP.php';
    require 'includes/PHPMailer.php';
     
    $mail = new PHPMailer(true);
     
     
    try 
    {
        // connexion bdd + catch erreur
        $bdd = new PDO('mysql:host=localhost;dbname=utilisateur;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch(PDOException $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    $req = "SELECT * FROM uti";
    $sth = $bdd->prepare($req);
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_OBJ);
     
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = "true";
    $mail->SMTPSecure = "tls";
    $mail->Port = "587";
    $mail->username = "test@gmail.com";
    $mail->password = "codemail";
    $mail->Subject = 'Here is the subject';
    $mail->setFrom("addresse@gmail.com");
    $mail->body = [
        'Requête : ' . $req,
        'Résultats : ',
        print_r($results, true),];
     
     
        $mail->addAddress("addresse@gmail.com");
        if ($mail->send()){
            echo "Mail parti";
        }else {
            echo"errur";
        }
        $mail->smtpClose();
     
     
    // PHPMailer\PHPMailer\Exception: Message body empty in C:\wamp64\www\test\includes\PHPMailer.php on line 1579
    ?>
    pourquoi est ce qu'il dit que le message est vide alors que je lui mets ma requête est ce que je m'y prends mal ? ou ce n'est pas possible du coup faudra faire une requête pour qui créer un fichier avec ma requête ( into outfile 'tmp/test.txt') et envoyer ce fichier en attaché

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Bonjour,

    J'avoue que j'avais pensé à passer par PHPMailer mais ne sachant pas si c'était connu et vu que ça ne répondait pas spécifiquement à la question, je ne l'avais pas proposé
    Bien joué

    Pour ce qui est du problème, ça fait bien longtemps que je n'ai pas utilisé PHPMailer mais en lisant l'exemple présenté sur Github, je lis :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    //Content
        $mail->isHTML(true);                                  //Set email format to HTML
        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    1. C'est AltBody qu'il faut utiliser et non Body.
    AltBody représente le contenu pour un mail en mode "plain text". Cette variable est toujours utilisée de cette façon, et ce peu importe la valeur de isHTML().
    Dans ton cas, tu n'as pas mis $mail->isHTML(true);, je pense donc qu'il cherche le contenu du message dans AltBody qui n'existe pas dans ton code.

    2. Attention à la casse, tu as écrit $mail->body mais il s'agirait plutôt de $mail->Body (B majuscule).
    Je vois que tu as fait l'erreur pour d'autres attributs et ça semble fonctionner malgré tout. Cependant, suivant l'OS sur lequel le script tourne, ça pourrait ne pas fonctionner.

    3. Habituellement, tu ne peux pas mettre un array dans le corps du message. Ca doit être un string car c'est soit du texte, soit de l'HTML (donc du texte ^^)
    Si on reprend mon exemple de base + PHPMailer, ça donnerait :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $message = [
        'Requête : ' . $req,
        'Résultats : ',
        print_r($results, true),
    ];
    $mail->AltBody = implode(PHP_EOL, $message);

    Dis-moi si c'est 3 corrections solutionnent le problème ou si je me trompe ^^

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Oui, c'est ca j'avais corrigé ses bug la mais la je veux juste envoyer un mail :') parce qu'il me dit qu'il trouve pas le port alors que j'ai fais les bonnes configurations je pensais que c'était le code de la requête avant mais non il envoie juste pas l'email pas le "bon" port j'ai essayé tout les autre port également

    J'ai mis l'erreur en bas en commentaire mais voila j'ai mis le port et le smtp.gmail :/ et me dis qu'il arrive pas a se connecter.

    C'était si simple sur Angular :')


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php 
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
     
    require 'includes/Exception.php';
    require 'includes/SMTP.php';
    require 'includes/PHPMailer.php';
     
    $mail = new PHPMailer(true);
     
     
    try 
    {
        // connexion bdd + catch erreur
        $bdd = new PDO('mysql:host=localhost;dbname=uti;charset=utf8', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch(PDOException $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    $req = "SELECT * FROM uti";
    $sth = $bdd->prepare($req);
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_OBJ);
     
     
    $mail->isHTML(true); 
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = "true";
    $mail->SMTPSecure = 'TLS';
    $mail->Port = "587";
    $mail->Username = "test@gmail.com";
    $mail->Password = "codetest";
    $mail->Subject = 'Here is the subject';
    $mail->setFrom("test2@gmail.com");
    $mail->Body ="hello";
    $mail->AltBody = "bonjour";
     
     
        $mail->addAddress("test2@gmail.com");
        $mail->send();
        $mail->smtpClose();
    //Uncaught PHPMailer\PHPMailer\Exception: SMTP Error: Could not connect to SMTP host. in C:\wamp64\www\uti\includes\PHPMailer.php on line 2157
     
    ?>
    et aussi j'ai désactivé la sécurité google donc je vois pas le problème

  14. #14
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Hello,

    Quelle sécurité as-tu désactivé sur Gmail ?
    Il faut autoriser les applications non sécurisées pour pouvoir utiliser le compte Gmail de cette façon

    Personnellement, je te conseillerais plutôt de créer un compte gratuit sur Mailjet ou Mailchimp
    En effet, je ne suis pas fan de retirer des sécurités sur un compte Gmail qui possèdent probablement des informations sensibles

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Salut,

    Au finale j'ai acheté un hébergeur + email :')
    Merci à toi l'utilisation de la requête m'a beaucoup aidé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer un fichier txt par mail avec agent SQL
    Par vponcet0774 dans le forum Développement
    Réponses: 4
    Dernier message: 06/03/2012, 19h17
  2. [Web Service] Envoyer formulaire de contact par mail via php
    Par ginger4957 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/06/2009, 16h53
  3. Réponses: 1
    Dernier message: 26/03/2009, 20h43
  4. Réponses: 8
    Dernier message: 25/07/2006, 23h49
  5. Réponses: 1
    Dernier message: 25/07/2006, 23h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo