Envoi de mail pour Anniversaire
Résolu/Fermé
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
-
4 févr. 2018 à 18:29
LaChaux78 Messages postés 569 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 25 octobre 2024 - 6 févr. 2018 à 09:04
LaChaux78 Messages postés 569 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 25 octobre 2024 - 6 févr. 2018 à 09:04
A voir également:
- Mail d'anniversaire
- Yahoo mail - Accueil - Mail
- Publipostage mail - Accueil - Word
- Thunderbird mail - Télécharger - Mail
- Windows live mail - Télécharger - Mail
- Anniversaire facebook disparu - Forum Facebook
9 réponses
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 693
4 févr. 2018 à 19:09
4 févr. 2018 à 19:09
Ah la la ... grosses erreur de débutant :-)
Problème de parenthèses...
Mais il serait plus simple de le gérer directement dans ta requête
Sans oublier... lorsque le mail est envoyé .. d'aller mettre cette valeur à 1
Et puis... ta requête pôur récupérer le contenu à envoyer dans le mail....
place le AVANT ta boucle
ça sert à rien de lancer 50 fois la même requête...
Et pour finir ... où sont de nouveau passé les blocs TRY/CATCH que je te fais ajouter à CHAQUE FOIS ????
Ce n'est pas pour rien qu'il faut les mettre ...
Problème de parenthèses...
if ($DateJour == $anniv_date && $anniv['mail'] == 0) {
Mais il serait plus simple de le gérer directement dans ta requête
$sql = "SELECT nom, prenom, dnaiss, email FROM cdc_personnes P LEFT JOIN cdc_adherer A ON P.idpers = A.idpers WHERE mail = 0 AND annee = ? AND MONTH(dnaiss) = ? AND DAY(dnaiss) = ?";
Sans oublier... lorsque le mail est envoyé .. d'aller mettre cette valeur à 1
Et puis... ta requête pôur récupérer le contenu à envoyer dans le mail....
$sql1 = "SELECT * FROM cdc_configsite where clef = 'resp'"; $requete1 = $bdd->prepare($sql1);
place le AVANT ta boucle
ça sert à rien de lancer 50 fois la même requête...
Et pour finir ... où sont de nouveau passé les blocs TRY/CATCH que je te fais ajouter à CHAQUE FOIS ????
Ce n'est pas pour rien qu'il faut les mettre ...
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
4 févr. 2018 à 20:04
4 févr. 2018 à 20:04
Donc tu me conseil de faire comme ça même si mon script fonctionne sans que je sois obligé de rajouter un champ ? peut-il y avoir un soucis ?
Par contre le bloc try catch est bien présent dans ma requête je ne comprends pas.
Merci
Par contre le bloc try catch est bien présent dans ma requête je ne comprends pas.
Merci
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 693
4 févr. 2018 à 20:56
4 févr. 2018 à 20:56
sans que je sois obligé de rajouter un champ
Y'a des fois je me dis que je n'écrit pas suffisamment bien français... :-)
Bien que sûr que si tu dois ajouter un CHAMP. mais au lieu de gérer dans le IF .. tu gères la condition directement dans la requête comme je l'ai fait...
Par contre le bloc try catch est bien présent dans ma requête je ne comprends pas.
Donc pour la n-ieme fois.... il faut mettre un bloc try/catch A CHAQUE REQUETE.
Tu n'en as pas mis pour ta seconde requête...
Bon.. voila ton code revu et corrigé :
<?php //-----------------------------------------------------------------------------// //Activation de l'affichage des erreurs PHP // A placer AU DEBUT de tes scripts... donc AVANT tes includes ! //-----------------------------------------------------------------------------// // Afficher les erreurs à l'écran ini_set('display_errors', 1); // Afficher les erreurs et les avertissements error_reporting(e_all); // Enregistrer les erreurs dans un fichier de log ini_set('log_errors', 1); // Nom du fichier qui enregistre les logs (attention aux droits à l'écriture) ini_set('error_log', dirname(__file__) . '/log_error_php.txt'); //-----------------------------------------------------------------------------// //connexion à la bdd //-----------------------------------------------------------------------------// require_once("init.php"); //-----------------------------------------------------------------------------// //FONCTIONS //-----------------------------------------------------------------------------// // Fonction qui sert à faire tes requêtes SQL // Contient déjà le try/catch function executeQuery($sql,$datas=NULL){ global $bdd; // permet d'utiliser la variable $bdd dans la fonction //exécution de la requête try{ $requete = $bdd->prepare($sql); $requete->execute($datas); }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($aadh,$mois,$jour); exit(0); // en cas d'erreur.. arrête le script ! } return $requete; } function get_Anniv($aadh,$mois,$jour){ $sql = "SELECT nom, prenom, dnaiss, email FROM cdc_personnes P LEFT JOIN cdc_adherer A ON P.idpers = A.idpers WHERE mail = 0 AND annee = ? AND MONTH(dnaiss) = ? AND DAY(dnaiss) = ?"; return executeQuery($sql,array($aadh,$mois,$jour)); } function get_configsite_resp(){ $sql = "SELECT * FROM cdc_configsite where clef = ? "; $result = executeQuery($sql,array('resp'); $reponse = $result->fetch(); return !empty($reponse) ? $reponse->valeur : ''; } /** * Met le champ "mail" à 1 */ function set_mail_envoye($email){ $sql = "UPDATE cdc_personnes SET mail = 1 WHERE email = ?"; $datas = array($email); return executeQuery($sql,$datas); } function sendMailAnniv($email,$prenom){ // Adresse email des destinataires $destinataire = $email; // Titre de l'email $sujet = 'Joyeux Anniversaire'; // Contenu du message de l'email $message = '<html>'; $message .= '<body><p>Bonjour '.$prenom.'<br/>'; $message .= 'Je te souhaite un bon anniversaire...<br/>'; $message .= 'A bientôt !<br/>'; $message .= ''. $resp . '<br/>'; $message .= '</html>'; // Pour envoyer un email HTML, l'en-tête Content-type doit être défini $headers = 'MIME-Version: 1.0'."\r\n"; $headers .= 'Content-type: text/html; charset=utf-8'."\r\n"; $headers .= 'From:"cliquedecruet"<cliquede@60gp.ovh.net>'."\n"; // Fonction principale qui envoi l'email if(!mail($destinataire, $sujet, $message, $headers)){ echo " Erreur lors de l'envoie du mail !"; } } //-----------------------------------------------------------------------------// // Début de ton script //-----------------------------------------------------------------------------// //include '/home/cliquede/www/libs/envoi_anniv.php' $quant = date("z"); // Quantième du jour dans l'année. NB: le 01/09/AAAAA est le 245è jour de l'année // Si l'on est avant le 01/09, l'année d'adhésion ($aadh) est l'année précédente, sinon c'est l'année courante //if($quant < 245) { $aadh = date("Y")-1; } else { $aadh = date("Y"); } $aadh = $quant < 245 ? date("Y")-1 : date("Y"); // même chose que la ligne au dessus.. mais en écriture ternaire... $mois = date('m'); $jour = date('d'); //récupère la liste des anniversaires $anniv = get_Anniv($aadh,$mois,$jour); //si il y a des données à traiter if(!empty($donnees)){ while ($donnees = $anniv->fetch()) { $anniv_date = $donnees->dnaiss; $email = $donnees->email; $prenom = $donnees->prenom; sendMailAnniv($email,$prenom); //envoie le mail set_mail_envoye($email); // met le champ "mail" à 1 une fois le mail envoyé au destinataire } } ?>
Il faut que tu ajoutes un champ "mail" à ta table cdc_personnes une fois le mail envoyé
et faudra penser à tous les remettre à zéro le 1er Janvier de chaque année..
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
5 févr. 2018 à 13:38
5 févr. 2018 à 13:38
Bonjour,
J'ai mis en place tes fonctions, je regarde d'où viens le soucis cela ne m'a pas généré le mail.
J'ai mis en place tes fonctions, je regarde d'où viens le soucis cela ne m'a pas généré le mail.
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 693
5 févr. 2018 à 14:26
5 févr. 2018 à 14:26
Petite erreur de ma part...
Faut modifier le if ...
Modifie cette partie du code :
Faut modifier le if ...
Modifie cette partie du code :
//si il y a des données à traiter if(!empty($anniv)){ while ($donnees = $anniv->fetch()) { $anniv_date = $donnees->dnaiss; $email = $donnees->email; $prenom = $donnees->prenom; sendMailAnniv($email,$prenom); //envoie le mail set_mail_envoye($email); // met le champ "mail" à 1 une fois le mail envoyé au destinataire } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
5 févr. 2018 à 16:24
5 févr. 2018 à 16:24
Merci je refais un essai...
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
5 févr. 2018 à 18:39
5 févr. 2018 à 18:39
Tout fonctionne bien, je vais faire la requète pour modifier le champ mail remettre à zéro au 1er janvier.
Je te remercie.
Je te remercie.
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 693
5 févr. 2018 à 19:07
5 févr. 2018 à 19:07
Pense à mettre le sujet en résolu.
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
5 févr. 2018 à 20:40
5 févr. 2018 à 20:40
Une petite chose, dans la fonction "get_configsite_resp" la valeur resp ne s'affiche pas lors de l'envoi du message...
function get_configsite_resp() { $sql = "SELECT * FROM cdc_configsite WHERE clef = ? "; $result = executeQuery($sql,array('resp')); $reponse = $result->fetch(); return !empty($reponse) ? $reponse->valeur : ''; } function sendMailAnniv($email,$prenom) { // Adresse email des destinataires $destinataire = $email; // Titre de l'email $sujet = 'Joyeux Anniversaire'; // Contenu du message de l'email $message = '<html>'; $message .= '<body><p>Bonjour '.$prenom.'<br/>'; $message .= 'Je te souhaite un bon anniversaire...<br/>'; $message .= 'A bientôt !<br/>'; $message .= ''. $resp . '<br/>'; $message .= '</html>'; // Pour envoyer un email HTML, l'en-tête Content-type doit être défini $headers = 'MIME-Version: 1.0'."\r\n"; $headers .= 'Content-type: text/html; charset=utf-8'."\r\n"; $headers .= 'From:"cliquedecruet"<cliquede@60gp.ovh.net>'."\n"; // Fonction principale qui envoi l'email if(!mail($destinataire, $sujet, $message, $headers)) { echo " Erreur lors de l'envoie du mail !"; } }
jordane45
Messages postés
38263
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 octobre 2024
4 693
5 févr. 2018 à 21:51
5 févr. 2018 à 21:51
Encore une petite modif
et dans la fonction sendMailAnniv
//récupère la liste des anniversaires $anniv = get_Anniv($aadh,$mois,$jour); //récupère resp $resp = get_configsite_resp(); //si il y a des données à traiter if(!empty($anniv)){ while ($donnees = $anniv->fetch()) { $email = $donnees->email; $prenom = $donnees->prenom; sendMailAnniv($email,$prenom,$resp); //envoie le mail set_mail_envoye($email); // met le champ "mail" à 1 une fois le mail envoyé au destinataire } }
et dans la fonction sendMailAnniv
function sendMailAnniv($email,$prenom,$resp) { // Adresse email des destinataires $destinataire = $email; // Titre de l'email $sujet = 'Joyeux Anniversaire'; // Contenu du message de l'email $message = '<html>'; $message .= '<body><p>Bonjour '.$prenom.'<br/>'; $message .= 'Je te souhaite un bon anniversaire...<br/>'; $message .= 'A bientôt !<br/>'; $message .= ''. $resp . '<br/>'; $message .= '</html>'; // Pour envoyer un email HTML, l'en-tête Content-type doit être défini $headers = 'MIME-Version: 1.0'."\r\n"; $headers .= 'Content-type: text/html; charset=utf-8'."\r\n"; $headers .= 'From:"cliquedecruet"<cliquede@60gp.ovh.net>'."\n"; // Fonction principale qui envoi l'email if(!mail($destinataire, $sujet, $message, $headers)) { echo " Erreur lors de l'envoie du mail !"; } }
LaChaux78
Messages postés
569
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
25 octobre 2024
32
6 févr. 2018 à 09:04
6 févr. 2018 à 09:04
Bonjour, tout fonctionne très bien.
Je te remercie.
Cordialement
Je te remercie.
Cordialement