Requête mysql liste mail avec fin de fichier
Résolu
OrionM24
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
OrionM24 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
OrionM24 Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Requête mysql liste mail avec fin de fichier
- Fichier bin - Guide
- Liste déroulante excel - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
4 réponses
Bonjour,
Pense à utiliser les balises de code pour rendre ton code plus lisible sur le forum stp :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Le premier paramètre $to passé à la fonction php mail() attends effectivement une chaine de caractère contenant la liste des adresses séparées par une virgule.
Je ne comprends pas trop pourquoi tu utilises des balises th ou tr (et la balise </br> n'existe pas au passage, c'est soit <br>, soit <br/>), mais ces balises html n'ont rien à faire dans la liste des adresses mail.
Une solution possible :
- modifier la requête sql pour sélectionner uniquement le champ user_email puisque les autres champs ne semblent pas utilisés
- à la place de faire une boucle avec mysqli_num_rows(), utiliser directement mysqli_fetch_all() pour récupérer la liste des adresses sous la forme d'un tableau php
- utiliser la fonction implode pour transformer le tableau php en chaine de caractère en séparant chaque adresse par une virgule
Pense à utiliser les balises de code pour rendre ton code plus lisible sur le forum stp :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Le premier paramètre $to passé à la fonction php mail() attends effectivement une chaine de caractère contenant la liste des adresses séparées par une virgule.
Je ne comprends pas trop pourquoi tu utilises des balises th ou tr (et la balise </br> n'existe pas au passage, c'est soit <br>, soit <br/>), mais ces balises html n'ont rien à faire dans la liste des adresses mail.
Une solution possible :
- modifier la requête sql pour sélectionner uniquement le champ user_email puisque les autres champs ne semblent pas utilisés
- à la place de faire une boucle avec mysqli_num_rows(), utiliser directement mysqli_fetch_all() pour récupérer la liste des adresses sous la forme d'un tableau php
- utiliser la fonction implode pour transformer le tableau php en chaine de caractère en séparant chaque adresse par une virgule
$sql = 'SELECT user_email FROM `matable` WHERE mail_challenge IN ("oui") ORDER BY `matable`.`nom`ASC'; $req = mysqli_query($bdd, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($bdd)); $emails = mysqli_fetch_all($req); $to = implode(', ', $emails); // [...] suite du code mail($to, $subject, $message, $headers);
Bonjour,
une petite amélioration du code..
une petite amélioration du code..
<?php //Affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); // on se connecte à MySQL $bdd = mysqli_connect("monserveur","mabasededonnees","monPass","mabasededonnees"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); exit(); } // on crée la requête SQL $sql = 'SELECT * FROM `matable` WHERE mail_challenge IN ("oui") ORDER BY `matable`.`nom`ASC'; // on envoie la requête $req = mysqli_query($bdd, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($bdd)); $retour = ""; $to = ""; $arrTo = []; while($donnees = mysqli_fetch_assoc($req)) { $retour .= "<tr><td>".$donnees['user_email']."</td></tr>"; $arrTo[] = $donnees['user_email']; } $subject = "Info TCSP : Encore un nouveau match de tennis du challenge JLB !"; $message = $nomdeclarant.' vous informe : Voici un nouveau resultat de match du challenge au '.$datematch.' : poule '.$poule.' : '.$nomgagnant. ' ' .$prenomgagnant. ' (' .$classtgagnant.') bat : '.$nomperdant.' ' .$prenomperdant.' (' .$classtperdant.') en ' .$nbsets. 'sets ('.$score.') Merci de controler vos propres resultats sur le tableau des matchs et aussi sur le tableau de classement ! Cliquez sur ce lien pour afficher le tableau des resultats ==> https://monsite.fr/challenge/affiche-matchs.php Si vous ne souhaitez plus recevoir ces résultats de matchs informez en JpleWebMaster qui vous supprimera de la liste des envois. Bons matchs ! '; // $headers = "Message emis par le site : https://monsite.fr/ " . $from; // pas valide ... $headers = 'From: ' .$from . "\r\n" . 'Reply-To: ' . $from . "\r\n" . 'X-Mailer: PHP/' . phpversion(); if (!empty($arrTo)) { $to = join(", ",$arrTo); mail($to,$subject,$message,$headers); } else { die('Aucun challenger !'); } ?> <!Doctype html> <html> <head> <meta charset="utf-8" /> <title>récupérer les emails des membres inscrits au challenge</title> </head> <body> <table> <?php echo $retour; ?> </table> </body> </html>
Bonjour et merci à tous les deux Pitet et jordane,
j'ai intégré ce dernier code à mon site et je suis en train de vérifier, mais j'ai une erreur HTP error 500
J'ai pourtant mis mes bons paramètres de bdd !
Je cherche ce que j'ai fait de travers et je reviendrai vers vous
Encore MERCI !!!! en attendant
j'ai intégré ce dernier code à mon site et je suis en train de vérifier, mais j'ai une erreur HTP error 500
J'ai pourtant mis mes bons paramètres de bdd !
Je cherche ce que j'ai fait de travers et je reviendrai vers vous
Encore MERCI !!!! en attendant
C'est réparé, un ; oublié de ma part,
d'autre part il fallait aussi initialiser les variables :
$from = "";
$headers = "";
et maintenant c'est nickel !
Merci les gars pour ce coup de main bien sympathique et surtout terriblement efficace !
J'espère que votre code rectifié servira aussi à la communauté !
Jean-Pierre
https://tennisclubsaintpaulais.fr/?doing_wp_cron=1642086469.7887659072875976562500
d'autre part il fallait aussi initialiser les variables :
$from = "";
$headers = "";
et maintenant c'est nickel !
Merci les gars pour ce coup de main bien sympathique et surtout terriblement efficace !
J'espère que votre code rectifié servira aussi à la communauté !
Jean-Pierre
https://tennisclubsaintpaulais.fr/?doing_wp_cron=1642086469.7887659072875976562500
pas d'inquiétude, c'est déjà tout intégré à notre site officiel et çà fonctionne.
(Malheureusement vous ne pouvez pas tester, il faut être inscrit et connecté pour accéder au menu du challenge.)
C'était en effet un point-virgule oublié de ma part, désolé pour la petite frayeur...
Ah ! et aussi dans la requête j'avais laissé "matable" au lieu du "vrai" nom de la table. (à 73 bougies, je code encore bénévolement pour les besoins de mon club de tennis, mais je commence à avoir quelques petits soucis de mémoire) ... mais bon pour la raquette, çà fonctionne encore !
A bientôt de vous lire et bonne fin de journée.
Encore Merci pour vos précieux conseils.
(Malheureusement vous ne pouvez pas tester, il faut être inscrit et connecté pour accéder au menu du challenge.)
C'était en effet un point-virgule oublié de ma part, désolé pour la petite frayeur...
Ah ! et aussi dans la requête j'avais laissé "matable" au lieu du "vrai" nom de la table. (à 73 bougies, je code encore bénévolement pour les besoins de mon club de tennis, mais je commence à avoir quelques petits soucis de mémoire) ... mais bon pour la raquette, çà fonctionne encore !
A bientôt de vous lire et bonne fin de journée.
Encore Merci pour vos précieux conseils.
oui j'ai compris, en fait j'ai d'autres champs utiles, mais dans l'exemple j'ai raccourci pour la compréhension.
D'accord pour la fonction implode, mais il faut que la dernière adresse récupérée ne comporte pas de virgule, sinon la fonction mail attend une suite et ça ne marche pas.
C'était çà mon problème.
Je vais quand même tester ta solution.
Je reviendrai au besoin.
Bonne soirée
Je n'avais pas compris que le code avait été simplifié, du coup je suppose que la variable $retour avec le code html est utilisée autre part ?
Dans tous les cas, la variable $to ne doit pas contenir de code html.
Tu peux sinon, dans ta boucle, concaténer les adresses dans la variable $to en ajoutant la virgule et l'espace.
Puis après la boucle, si la variable $to n'est pas vide, supprimer les deux derniers caractères (la virgule et l'espace) avec la fonction php substr :