[Résolu] Alerte email

Alerte email [Résolu] - PHP - Programmation

Marsh Posté le 07-05-2009 à 15:51:15    

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
Reply

Marsh Posté le 07-05-2009 à 15:51:15   

Reply

Marsh Posté le 10-05-2009 à 14:47:58    

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 ;)

Reply

Marsh Posté le 11-05-2009 à 09:23:56    

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

Reply

Marsh Posté le 11-05-2009 à 09:37:04    

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.  
 

Reply

Marsh Posté le 11-05-2009 à 09:37:30    

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
Reply

Marsh Posté le 11-05-2009 à 09:56:23    

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.

Reply

Marsh Posté le 11-05-2009 à 10:09:00    

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

Reply

Marsh Posté le 11-05-2009 à 10:12:20    

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é.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed