Requête mysql liste mail avec fin de fichier
Résolu/Fermé
OrionM24
Messages postés
6
Date d'inscription
lundi 27 septembre 2021
Statut
Membre
Dernière intervention
13 janvier 2022
-
12 janv. 2022 à 13:43
OrionM24 Messages postés 6 Date d'inscription lundi 27 septembre 2021 Statut Membre Dernière intervention 13 janvier 2022 - 13 janv. 2022 à 16:37
OrionM24 Messages postés 6 Date d'inscription lundi 27 septembre 2021 Statut Membre Dernière intervention 13 janvier 2022 - 13 janv. 2022 à 16:37
A voir également:
- Requête mysql liste mail avec fin de fichier
- Liste déroulante excel - Guide
- Fichier rar - Guide
- Yahoo mail - Accueil - Mail
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
4 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié le 12 janv. 2022 à 17:41
Modifié le 12 janv. 2022 à 17:41
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);
jordane45
Messages postés
38331
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2024
4 713
Modifié le 12 janv. 2022 à 21:33
Modifié le 12 janv. 2022 à 21:33
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>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
12 janv. 2022 à 21:10
12 janv. 2022 à 21:10
Oui c'est encore mieux et plus clair comme ça ! Merci Jordane ;)
OrionM24
Messages postés
6
Date d'inscription
lundi 27 septembre 2021
Statut
Membre
Dernière intervention
13 janvier 2022
13 janv. 2022 à 15:38
13 janv. 2022 à 15:38
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
OrionM24
Messages postés
6
Date d'inscription
lundi 27 septembre 2021
Statut
Membre
Dernière intervention
13 janvier 2022
13 janv. 2022 à 16:08
13 janv. 2022 à 16:08
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
jordane45
Messages postés
38331
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2024
4 713
13 janv. 2022 à 16:11
13 janv. 2022 à 16:11
Une erreur 500 c'est souvent une erreur de point-virgule oublié, une parenthèse ou une accolade mal fermée ...ou une variable mal nommée.
Par exemple, peux tu nous montrer ta ligne 52 ?
J'avais mal écrit le nom de la variable puis édité le code ensuite pour le corriger...
Par exemple, peux tu nous montrer ta ligne 52 ?
J'avais mal écrit le nom de la variable puis édité le code ensuite pour le corriger...
OrionM24
Messages postés
6
Date d'inscription
lundi 27 septembre 2021
Statut
Membre
Dernière intervention
13 janvier 2022
13 janv. 2022 à 16:37
13 janv. 2022 à 16:37
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.
Modifié le 12 janv. 2022 à 18:49
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
12 janv. 2022 à 20:14
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 :