Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3282 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Alerte email

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Alerte email

n°1881907
Ben-o
Posté le 07-05-2009 à 15:51:15  profilanswer
 

Bonjour à tous, je fais appel à vous car je rencontre un problème avec la création d'une alerte email pour un site d'annonces immobilières.
 
Le fonctionnement est le suivant :
 
Lorsqu'un utilisateur s'enregistre pour l'alerte email, je récupère son adresse mail ainsi que la requête de sa recherche sous cette forme :
 

Code :
  1. SELECT... FROM... WHERE...


 
Et j'enregistre le tout dans une table (t_alerte_email). Jusque là, pas de problèmes.
 
Là où ça coince, c'est pour le script d'envoi des emails en fonction des alertes.
 
Voici comment je souhaite procéder :
 
1 - Je fais une boucle pour récupérer les requêtes de la table t_alerte_email
2 - Je fais une autre boucle imbriquée pour récupérer les références des maisons correspondant à ces requêtes
3 - Je fais une boucle encore imbriquée, dans laquelle je compare les références récupérées à l'étape 2, avec ma table t_maison (table dans laquelle sont stockées toutes les maisons) en fonction de la date.
4 - Je fais une boucle pour envoyer par email les références récupérées à l'étape 3 aux emails correspondants.
 
Voici le code correspondant :
 

Code :
  1. $date_du_jour = date("Y-m-d" );
  2. // Sélection des requêtes stockées dans la table alerte
  3. $selection_infos_alerte = mysql_query("SELECT id_alerte, email, requete FROM t_alerte_email" );
  4. // On fait une boucle pour récupérer les requêtes
  5. while ($resultats_infos_alerte = mysql_fetch_array($selection_infos_alerte)) {
  6.  // On attribue les résultats à la variable $selection_requete_stockee
  7.  $selection_requete_stockee = mysql_query($resultats_infos_alerte['requete']);
  8.  // On fait une boucle sur la variable $selection_requete_stockee pour récupérer les références (ASP) correspondantes à la requête
  9.  while ($resultats_requete_stockee = mysql_fetch_array($selection_requete_stockee)) {
  10.   // On attribue les résultats à la variable $requete_extraction_affaires
  11.   $requete_extraction_affaires = mysql_query("SELECT * FROM t_maison WHERE t_maison.date_modif = '$date_du_jour' AND t_maison.no_asp = '$resultats_requete_stockee['no_asp']'" );
  12.   // On fait une boucle sur la variable $resultats_extraction_affaires pour récupérer les références à envoyer par email
  13.   while ($resultats_extraction_affaires = mysql_fetch_array($requete_extraction_affaires)) {
  14.    $requete_definitive_envoi_alerte = mysql_query("SELECT * FROM t_maison WHERE... AND t_maison.no_asp = '$resultats_extraction_affaires['no_asp']'" );
  15.    // On compte le nombre de résultats retournés
  16.    $nb_resultats = mysql_num_rows($requete_definitive_envoi_alerte);
  17.    /***** Envoi des offres par email *****/
  18.    $adresse_email_alerte = $resultats_infos_alerte['email'];
  19.    $entete  = 'From: ...'."\n";
  20.    $entete .= 'MIME-Version: 1.0'."\n";
  21.    $entete .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
  22.    $entete .= 'Return-Path: ...'."\n";
  23.    $entete .= 'Content-Transfer-Encoding: 8bit';
  24.    if ($nb_resultats == '1') {
  25.     $sujet = "1 nouvelle annonce correspond à vos critères";
  26.    }
  27.    else {
  28.     $sujet = $nb_resultats." nouvelles annonces correspondent à vos critères";
  29.    }
  30.    $message =
  31.    "<html>".
  32.    "<head>".
  33.    "<title>Alerte email...</title>".
  34.    ...
  35.    ...
  36.    ...
  37.    while ($resultats_definitifs_envoi_alerte = mysql_fetch_array($requete_definitive_envoi_alerte)) {
  38.     $message .= "<p>&nbsp;</p>".
  39.     "<table width='350' border='0' cellspacing='0' cellpadding='0' class='bg1'>".
  40.      "<tr>".
  41.       "<td>".
  42.        '<p>'.$resultats_definitifs_envoi_alerte['ville_internet'].'<br />'.$resultats_definitifs_envoi_alerte['prix'].' €</p>'.
  43.       "</td>".
  44.       "<td>".
  45.       "</td>".
  46.      "</tr>".
  47.      "<tr>".
  48.       "<td>".
  49.       "</td>".
  50.       "<td>".
  51.       "</td>".
  52.      "</tr>".
  53.      "<tr>".
  54.       "<td colspan='2'>".
  55.       "</td>".
  56.      "</tr>".
  57.     "</table>";
  58.    }
  59.    $message .=
  60.    ...
  61.    ...
  62.    ...
  63.    ...
  64.    "</td>".
  65.    "</body>".
  66.    "</html>";
  67.   }
  68.  }
  69. }
  70. mail($adresse_email_alerte, $sujet, $message, $entete);


 
Voila, après de nombreux essais, je n'arrive à rien... Avec le code ci-dessus, je reçois bien un email, mail il n'y a qu'une maison au lieu des deux qui correspondent à l'alerte email de test, et je ne reçois également le mail que sur une seule adresse email alors que j'ai enregistré 2 alertes identiques avec deux adresses email différentes pour tester.
 
Il y a visiblement un problème avec l'imbrication des boucles, mais je ne trouve pas de solution.
 
Merci beaucoup pour votre aide.


Message édité par Ben-o le 12-05-2009 à 14:36:22
mood
Publicité
Posté le 07-05-2009 à 15:51:15  profilanswer
 

n°1882622
toughzaa
Posté le 10-05-2009 à 14:47:58  profilanswer
 

Bon, voila j'ai eu la flemme de tout lire sincérement
 
Mais je vois un problème dans ton code, c'est le  
 
"mail($adresse_email_alerte, $sujet, $message, $entete);" à la fin
 
En effet, tu ordonnes à php d'envoyer l'email UNE SEULE fois donc c'est normal que tu recoives un seul email
 
A mon avis, tu dois inclure le "#  mail($adresse_email_alerte, $sujet, $message, $entete);" là où tu mets ta boucle pour récupérer les adresses ou faire un truc du genre :
 
$i = 1;
while($i<=$nb_resultats){
     mail($adresse_email_alerte[$i], $sujet, $message, $entete);
     $i++;
}  
 
Ca devrait marcher ;)

n°1882837
Ben-o
Posté le 11-05-2009 à 09:23:56  profilanswer
 

Salut toughzaa, et merci pour ta réponse, malheureusement, ça ne fonctionne quand même pas.

n°1882840
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 11-05-2009 à 09:37:04  profilanswer
 

toughzaa a raison,
tu execute qu'une fois l'envoie de ton mail.
IL faut que tu place ton "mail($adresse_email_alerte, $sujet, $message, $entete);" en fin de la premiere boucle  
celle qui gere les emails.  
 

n°1882841
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 11-05-2009 à 09:37:30  profilanswer
 

montre ton code corrigé,!!
vu que ca marche toujours pas
 
et au faite $adresse_email_alerte tu le définit dans ta troisieme boucle,
c'est pas bon, quoi pas logique, car dans le cas ou $resultats_extraction_affaires est vide,
ben tu définit pas l'adresse mail de destination, et la t'es sur d'avoir un joli petit message d'erreur


Message édité par infoman64 le 11-05-2009 à 09:38:55
n°1882850
Ben-o
Posté le 11-05-2009 à 09:56:23  profilanswer
 

Voici ce que j'ai fait :
 

Code :
  1. ...
  2.    ...
  3.    ...
  4.    ...
  5.    "</td>".
  6.    "</body>".
  7.    "</html>";
  8.   }
  9. }
  10. mail($adresse_email_alerte, $sujet, $message, $entete);
  11. }


 
J'ai déplacé la ligne d'envoi d'email avant la fermeture de la première boucle.
 
Dans ce cas, je reçois bien les emails d'alerte sur les différentes adresses enregistrées, mais par contre, je ne reçois à chaque fois qu'une maison, même si plusieurs correspondent.
 
Il y a un problème avec les boucles, mais je ne vois pas comment le résoudre.
 
Encore merci.

n°1882853
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 11-05-2009 à 10:09:00  profilanswer
 

ouf aprés je sais pas comment est organiser ta bd,  
le mieux quoi moi ce que je fais,
c'est que je fais afficher les requetes, et je les execute a la main,  
dans l'ordre du processus normal,  
comme ca tu regarde deja si ta requete est bonne, et ensuite si elle te renvoie les bons résultats

n°1882854
Ben-o
Posté le 11-05-2009 à 10:12:20  profilanswer
 

Merci infoman pour ton aide en tout cas,
 
Je vais me repencher sur le problème en suivant tes conseils, et je vous tiens informé.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Alerte email

 

Sujets relatifs
[RESOLU] Initialisation paramètre[SQL] Jointure avec un OR [Résolu]
[RESOLU] __call et les tableaux[Résolu] dictionnaire avec un arbre binaire
[RESOLU] Probleme Application FileDialog[RESOLU]HTML - includes et charset
optimisation MySQL possible ? [Résolu][résolu] Récupérer résultat commande avec méthode run
[Résolu] problème avec mon CodeNouvelle fenêtre en premier plan [RESOLU]
Plus de sujets relatifs à : [Résolu] Alerte email


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR