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 :
- 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 :
- $date_du_jour = date("Y-m-d" );
- // Sélection des requêtes stockées dans la table alerte
- $selection_infos_alerte = mysql_query("SELECT id_alerte, email, requete FROM t_alerte_email" );
- // On fait une boucle pour récupérer les requêtes
- while ($resultats_infos_alerte = mysql_fetch_array($selection_infos_alerte)) {
- // On attribue les résultats à la variable $selection_requete_stockee
- $selection_requete_stockee = mysql_query($resultats_infos_alerte['requete']);
- // On fait une boucle sur la variable $selection_requete_stockee pour récupérer les références (ASP) correspondantes à la requête
- while ($resultats_requete_stockee = mysql_fetch_array($selection_requete_stockee)) {
- // On attribue les résultats à la variable $requete_extraction_affaires
- $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']'" );
- // On fait une boucle sur la variable $resultats_extraction_affaires pour récupérer les références à envoyer par email
- while ($resultats_extraction_affaires = mysql_fetch_array($requete_extraction_affaires)) {
- $requete_definitive_envoi_alerte = mysql_query("SELECT * FROM t_maison WHERE... AND t_maison.no_asp = '$resultats_extraction_affaires['no_asp']'" );
- // On compte le nombre de résultats retournés
- $nb_resultats = mysql_num_rows($requete_definitive_envoi_alerte);
- /***** Envoi des offres par email *****/
- $adresse_email_alerte = $resultats_infos_alerte['email'];
- $entete = 'From: ...'."\n";
- $entete .= 'MIME-Version: 1.0'."\n";
- $entete .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
- $entete .= 'Return-Path: ...'."\n";
- $entete .= 'Content-Transfer-Encoding: 8bit';
- if ($nb_resultats == '1') {
- $sujet = "1 nouvelle annonce correspond à vos critères";
- }
- else {
- $sujet = $nb_resultats." nouvelles annonces correspondent à vos critères";
- }
- $message =
- "<html>".
- "<head>".
- "<title>Alerte email...</title>".
- ...
- ...
- ...
- while ($resultats_definitifs_envoi_alerte = mysql_fetch_array($requete_definitive_envoi_alerte)) {
- $message .= "<p> </p>".
- "<table width='350' border='0' cellspacing='0' cellpadding='0' class='bg1'>".
- "<tr>".
- "<td>".
- '<p>'.$resultats_definitifs_envoi_alerte['ville_internet'].'<br />'.$resultats_definitifs_envoi_alerte['prix'].' €</p>'.
- "</td>".
- "<td>".
- "</td>".
- "</tr>".
- "<tr>".
- "<td>".
- "</td>".
- "<td>".
- "</td>".
- "</tr>".
- "<tr>".
- "<td colspan='2'>".
- "</td>".
- "</tr>".
- "</table>";
- }
- $message .=
- ...
- ...
- ...
- ...
- "</td>".
- "</body>".
- "</html>";
- }
- }
- }
- 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