système d'alerte lors de mise a jour de la base

yadutonus
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 00:10

Hello,
Le processus fonctionne mais il y a un petit problème, l'émail reçu à toutes les livres du stock !! Il semble que la partie
" . trim($membre[' liste_mots_cles_favoris'], "|") ."

ne soit pas prise en compte, et si je la remplace par exemple par (Colette|Jean) cela fonctionne.

Je te donne la partie de mon code adapté
//Les membres à sélectionner doivent avoir choisi l'alerte email et avoir des mots-clés de livres favoris
$sql = "SELECT * FROM membre WHERE alerte_par_email = 1 AND TRIM(liste_mots_cles_favoris) <>'' ";
$result_membres = mysql_query($sql);

while ($result_membres && $membre = mysql_fetch_array($result_membres)){
        //insérer les données du membre dans la lettre-type
        $lettre_type = sprintf("<h1>Les livres que vous recherchez sont peut-&ecirc;tre arriv&eacute;s</h1><p>Le %s</p><p>(%s)  Bonjour %s  %s (%s)</p>", date("d/m/Y"), $membre['idmembre'], $membre['nom'], $membre['prenom'], $membre['email']);
        $lettre_type .= "<p>Voici les derniers livres correspondant &agrave; vos alertes de recherche</p><ul>";

        //Obtenir la liste des livres favoris du membre correspondant aux mots-clés du champ liste_mots_clés_favoris (les mots-clés sont séparés par un |)
        $sql = "SELECT * FROM stock WHERE CONCAT(auteur,' ',titre,' ',description,' ',commentaire) REGEXP ' " . trim($membre[' liste_mots_cles_favoris'], "|") ."' ORDER BY ref DESC " ;
        $result_livres = mysql_query($sql);
Merci encore pour ton aide !

yadutonus
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 00:15

Encore une chose dans le code actuel, email envoyé recherche dans toute la table livre or il faudrait que la recherche se concentre sur les livres dernièrement ajoutés (cad nouveau depuis le dernier mail d'alerte). Comment faire pour ajouter cette contrainte ?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

15 janv. 2011, 01:36

Bonjour yadutonus,

Pour le premier problème tu peux enlever le TRIM car il ne sert à rien et vérifie bien que les valeurs dans ta base dans le champ liste_mots_cles_favoris sont bien séparées par un caractère |.

Voici la correction:
$sql = "SELECT * FROM stock WHERE CONCAT(auteur,' ',titre,' ',description,' ',commentaire) REGEXP ' " .  $membre[' liste_mots_cles_favoris'] ."' ORDER BY ref DESC " ;
Pour ta deuxième question concernant les nouveaux livres. Il faut ajouter un champ "date_entree_livre" dans le stock pour repérer les nouveaux livres par rapport à la dernière date d'alerte envoyée à un membre et pour cette dernière il faut ajouter un champ "date_derniere_alerte" dans la table membre.
La date d'entrée du livre sera renseignée à l'ajout d'un nouveau livre et la date de dernière alerte sera mise à jour après la réussite de l'envoi d'un mail d'alerte pour un membre.
La comparaison de ces deux dates doit donc être ajoutée à la requête de sélection des livres d'un membre alerté dans le programme d'envoi des e-mails.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène