Envoie un email lors d'une date anniversaire

Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 27 janv. 2017 à 14:04
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 30 janv. 2017 à 13:04
Bonjour,
Je souhaiterai complètes mon script afin d'envoyer un email aux adhérents le jour de leur date d'anniversaire.
J'ai ma requète qui me retourne la date d'anniversaire de chaque membre que j'ai affiché sur ma page d'accueil mais lorsque je rajoute l'envoie de mail ça tourbe en boucle et chacun reçois les email des autres en fait.
J'ai essayé d'autres soluions mais rien de concluant, pourvez-vous m'aider s'ils vous plait. Je vous remercie.
	$mois	= date('m');  
	$jour 	= date('d');

	$sql = "SELECT dnaiss, nom, prenom
			FROM cdc_personnes
			LEFT JOIN cdc_adherer ON cdc_personnes.idpers = cdc_adherer.idpers
			WHERE annee = ?
			AND MONTH(dnaiss) = ?
			AND DAY(dnaiss) = ?";
	$requete = $bdd->prepare($sql);
	$requete->execute(array($aadh,$mois,$jour));

    $anniv = '';
    
    while ($donnees = $requete->fetch()) {
		
		if ($anniv == "") {
			$anniv = " - <span style='color:red'>Bon anniversaire à</span> : ";
		} else {
			$anniv .= " - ";
		}
			$anniv .= "$donnees->nom $donnees->prenom";

ICI J'AVAIS RAJOUTER L'ENVOIE DE EMAIL

    }

14 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
27 janv. 2017 à 14:08
Bonjour,

Si tu veux qu'on t'aide ... commence par nous dire ce que tu avais fais à la place de : -- ICI J'AVAIS RAJOUTER L'ENVOIE DE EMAIL --

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 janv. 2017 à 16:41
Bonjour,
J'avais mis le script d'envoie de mail en fait.
Merci
                $sql1  = "SELECT * FROM cdc_configsite where clef='resp'";
                $requete1 = $bdd->prepare($sql1);
                $requete1->execute();
                $reponse1 = $requete1->fetch();
    
                $sql2  = "SELECT * FROM cdc_configsite where clef='cdctel'";
                $requete2 = $bdd->prepare($sql2);
                $requete2->execute();
                $reponse2 = $requete2->fetch();
    
                $sql3  = "SELECT * FROM cdc_configsite where clef='cdcmail'";
                $requete3 = $bdd->prepare($sql3);
                $requete3->execute();
                $reponse3 = $requete3->fetch();
    
                $sql4  = "SELECT * FROM cdc_configsite where clef='cdcurl'";
                $requete4 = $bdd->prepare($sql4);
                $requete4->execute();
                $reponse4 = $requete4->fetch();

						// Adresse email du destinataire
						$destinataire = $donnees->email;
						// Titre de l'email
						$sujet = 'Bon Anniversaire';
						// Contenu du message de l'email
						$message = '<html>';
						$message .= '<body><p>Bonjour '.$donnees->prenom.' <br/>';
						$message .= 'je te souhaite un bon Anniversaire !<br/>';
						$message .= 'Bonne journée.<br/>';
						$message .= 'A bientôt !<br/>';
						$message .= '<p>'.$reponse1->valeur.'</p>';
						$message .= $reponse2->valeur.'<br/>';
						$message .= $reponse3->valeur.'<br/>';
						$message .= $reponse4->valeur.'<br/></body>';
						$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=iso-8859-1'."\r\n";
						$headers .= 'From:"monsite"<monsite@60gp.ovh.net>'."\n";
						// Fonction principale qui envoi l'email
						mail($destinataire, $sujet, $message, $headers);
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
27 janv. 2017 à 16:59
oullaaaaa....

Pourrais tu nous fournir la structure de tes tables ??
Je pense que tu pourrais récupérer toutes les infos en une seule requête ... et régler ton pb en même temps.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
27 janv. 2017 à 18:10
Pour ma table cdc_personnes
idpers nom, prenom dnaiss email
Pour la table cdc_adherer
idpers annee

en fait la table cdc_adherer ai utilite uniquement pour l'adhésion des adherents
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
Modifié par LaChaux78 le 27/01/2017 à 22:05
Bonjour,
En fait je renvoie le script en entier j'ai supprimé les choses inutiles du moins pour ce que je souhaite obtenir.
A savoir envoyer un mail lors d'un anniversaire d'un adhérent.
 $mois = date('m');  
 $jour  = date('d');

 $sql = "SELECT dnaiss, nom, prenom, email
   FROM cdc_personnes
   WHERE MONTH(dnaiss) = ?
   AND DAY(dnaiss) = ?";
 $requete = $bdd->prepare($sql);
 $requete->execute(array($mois,$jour));

    $anniv = '';
    
    while ($donnees = $requete->fetch()) {
  
  if ($anniv == "") {
   $anniv = " - <span style='color:red'>Bon anniversaire à</span> : ";
  } else {
   $anniv .= " - ";
  }
   $anniv .= "$donnees->nom $donnees->prenom";

      // Adresse email du destinataire
      $destinataire = $donnees->email;
      // Titre de l'email
      $sujet = 'Bon Anniversaire';
      // Contenu du message de l'email
      $message = '<html>';
      $message .= '<body><p>Bonjour '.$donnees->prenom.' <br/>';
      $message .= 'je te souhaite un bon Anniversaire !<br/>';
      $message .= 'Bonne journée.<br/>';
      $message .= 'A bientôt !<br/>';
      $message .= '</body>';
      $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=iso-8859-1'."\r\n";
      $headers .= 'From:"monsite"<monsite@60gp.ovh.net>'."\n";
      // Fonction principale qui envoi l'email
      mail($destinataire, $sujet, $message, $headers);
    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 janv. 2017 à 00:15
et tu dis que cela envoie un email à tous, avec dans le mail le prénom de la personne ayant son anniversaire?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 janv. 2017 à 07:04
Bonjour
Non en fait je me suis trompé cela envoie uniquement le mail à la personne concerné mais en boucle c'est à dire la personne concerné par son anniversaire le reçois plusieurs fois.
Merci
0
Utilisateur anonyme
28 janv. 2017 à 07:13
Normal, le script vas s'exécuter à chaque fois qu'il sera chargé, à vrai dire il faut stocker quelque part que le mail à déjà été envoyé, et que donc si le script s’exécute de nouveau, il ne faut pas renvoyer le mail.

Le mieux est de créer une tache CRON si possible.
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 janv. 2017 à 11:15
Bonjour, moi j'ajouterais un champ dans la table cdc_personnes, pour enregistrer le moment où le dernier email d'anniversaire a été envoyé à chacun. Je rajouterais un test sur ce moment dans le SELECT, par exemple:
SELECT dnaiss, nom, prenom, email
   FROM cdc_personnes
   WHERE MONTH(dnaiss) = ?
   AND DAY(dnaiss) = ?"
   AND moment_email_annif < NOW() - INTERVAL 1 WEEK

Et mettre à jour le champ moment_email_annif après envoi du mail.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
28 janv. 2017 à 15:42
Bonjour
Merci pour vos réponses.
J'ai essayé de créer une tache Cron sur mon hébergeur OVH mais je ne comprends pas en fait.
J'ai également rajouté un champ dans ma table cdc_personnes j'ai mis à jour le champ, toujours aucun résultat.
Je vais essayer de persévérer.
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 janv. 2017 à 16:04
peux-tu montrer ton code modifié?
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 janv. 2017 à 16:14
que ne comprends-tu pas avec cron? cela te permet de faire exécuter un code php automatiquement, indépendamment des visites de ton site web.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
Modifié par LaChaux78 le 28/01/2017 à 18:09
Bonjour
En fait j'ai créé une tache cron.
Dans commande à exécuter j'ai le chemin "libs/anniv_cron.php"
il y a les heures, les jours, les jours de la semane, les mois
j'ai laissé par défault.
Ensuite il faut mon script PHP, j'ai fait ça mais surement que cette requète ne vas pas.
 $mois = date('m');  
 $jour  = date('d');

 $sql = "SELECT dnaiss, nom, prenom, email
   FROM cdc_personnes
   WHERE MONTH(dnaiss) = ?
   AND DAY(dnaiss) = ?";
 $requete = $bdd->prepare($sql);
 $requete->execute(array($mois,$jour));

    while ($donnees = $requete->fetch()) {
  
      // Adresse email du destinataire
      $destinataire = $donnees->email;
      // Titre de l'email
      $sujet = 'Bon Anniversaire';
      // Contenu du message de l'email
      $message = '<html>';
      $message .= '<body><p>Bonjour '.$donnees->prenom.' <br/>';
      $message .= 'je te souhaite un bon Anniversaire !<br/>';
      $message .= 'Bonne journée.<br/>';
      $message .= 'A bientôt !<br/>';
      $message .= '</body>';
      $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=iso-8859-1'."\r\n";
      $headers .= 'From:"monsite"<monsite@60gp.ovh.net>'."\n";
      // Fonction principale qui envoi l'email
      mail($destinataire, $sujet, $message, $headers);
    }
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
28 janv. 2017 à 19:25
le plus probable, c'est que ton script ne se trouve pas au bon endroit.
en lisant ceci:
https://docs.ovh.com/fr/hosting/mutualise-taches-automatisees-cron/
tu trouveras les explications pour voir si ton script est bien exécuté.
tu peux ajouter des echo dans ton script, tu pourras ainsi vérifier dans les logs si il se comporte bien.
tu peux aussi forcer l'exécution de ton script, si il est à un endroit accessible du web (il me semble qu'il vaut mieux le mettre à un autre endroit)
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
29 janv. 2017 à 09:12
Bonjour
Merci pour toutes tes explications.
En fait lorsque je regarde dans Logs j'ai cette ligne...
"Cliquez ici pour voir les logs bruts en temps réel"
il y a web - ftp - error - cgi - out - ssh - cron
mais cron ne peut pas être clicable.
la commande est "www/anniv_cron.php, lorsque j'ouvre ma page pour Diagnostiquer une erreur sur ma tâche automatisée ma page est vierge c'est à dire blanche.
Excuse moi j'ai lu tous ce qui concerne le lien que tu m'a envoyé mais je n'y arrive pas.
Merci
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
29 janv. 2017 à 12:08
bonjour,
1) attention, si tu peux ouvrir ta page, d'autres pourront aussi, il est recommandé de placer un script dans un dossier racine qui n’est pas couplé à un domaine ou sous-domaine (donc inaccessible par le web)
2) je lis que cela prend du temps (parfois 24h) avant que le script soit exécuté la première fois, il te suffit peut-être de patienter
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
29 janv. 2017 à 18:36
Bonjour
J'ai ouvert les logs cron malheureusement celà ne me dit rien, c'est vraiment complexe pour un novice.
Pouvez-vous m'aider un peu s'ills vous plait.
Je n'ai aucun retour de mail, comment ce déclenche l'envoie de mail? es ce que mon script est bon? faut-il que je mette mon fichier anniv_cron.php dans un dossier si oui pour quelle raison.
Enfin bref je suis completement perdu.
Merci
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié par yg_be le 29/01/2017 à 19:07
Que contiennent les logs cron?
Je pense que tu avais testé ton script, et tu peux encore le tester en l’appelant par le web, donc tu sais si il est bon, non?
tu peux ajouter des echo dans ton script, tu pourras ainsi vérifier dans les logs si il se comporte bien.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
29 janv. 2017 à 19:42
Alors en Français cela donne...
Votre travail n'a pu être initié pour une raison inconnue. Veuillez contacter le support client pour plus d'informations

[2017-01-29 18:03:03] ## OVH ## END - 2017-01-29 18:03:03.437940 exitcode: 255
[2017-01-29 19:03:03] ## OVH ## START - 2017-01-29 19:03:03.272654 executing: /usr/local/php5.4/bin/php /homez.650/cliquede/./www//anniv_cron.php

Excuse moi j'essaie d'avancer pas à pas
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
29 janv. 2017 à 19:48
tu peux ajouter des echo dans ton script, tu pourras ainsi vérifier dans les logs si il se comporte bien.
il n'y a rien ensuite dans le log cron, cela devrait se terminer pas un ## OVH ## END
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié par yg_be le 29/01/2017 à 19:56
cliquede/./www//anniv_cron.php me semble un peu suspect, es-tu certain d'avoir mis www/anniv_cron.php dans la définition?
l'exemple de ovh montre /usr/local/php5.6/bin/php /homez.600/loginftp/www/cron.php
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
29 janv. 2017 à 19:57
c'est mieux de ne pas traduire les messages d'erreur, fais simplement un copier/coller.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
30 janv. 2017 à 08:33
Bonjour
Je viens de regarder dans logs et le résultat est:
[2017-01-30 07:03:03] ## OVH ## END - 2017-01-30 07:03:03.494009 exitcode: 255
[2017-01-30 07:03:03]
[2017-01-30 07:03:03] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
[2017-01-30 07:03:03] ## OVH ## END - 2017-01-30 07:03:03.494781 exitcode: 255
[2017-01-30 08:03:03] ## OVH ## START - 2017-01-30 08:03:03.343563 executing: /usr/local/php5.4/bin/php /homez.650/cliquede/./www/anniv_cron.php
0
Utilisateur anonyme
30 janv. 2017 à 08:59
Et si tu enlèves le . devant /www/anniv_cron.php pour avoir le chemin absolu?
0
yg_be Messages postés 22722 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
30 janv. 2017 à 09:10
es-tu certain d'avoir mis www/anniv_cron.php dans la définition?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
30 janv. 2017 à 13:04
Bonjour
En ce qui concerne le . devant /www/anniv_cron.php il est par défault je ne peux pas le supprimer.
J'ai bien mis www/anniv_cron.php dans la définition.
0