Bonjour à toutes et tous, Je pense ne pas être le seul à m'être plongé dans des envois de mails. je suis train de voir pour envoyer des notifications lors d'un ajout de commentaires sur un billet, j'ai réussi à faire une newsletter et une notification lors d'une réponse à un billet (pas trop compliqué jusque là). je vais la faire simple: Lors d'une réponse à un commentaire posté sur un billet, je dois envoyer une notification aux membres pour les prevenir d'une réponse postée, mais selon ces critères: - S'il est le premier à répondre, il ne doit pas recevoir de notification - pas fait encore cette partie - Seuls les membres ayant activé la notification reçoivent le mail filtré par une variable "combillet" Et mon soucis principal et celui d'envoi sans les redondances, si un membre a déjà répondu 3 fois, il ne faut pas qu'il reçoivent 3 fois la notification, j'avais filtré par un "*DISTINCT*" tel que: [code]$sql ="SELECT DISTINCT email FROM users WHERE combillet='1'";[/code] Cela ne fonctionnait pas, j'ai donc fait par: [code]$sql ="SELECT email FROM users WHERE combillet='1' GROUP BY email";[/code] mais même résultat. Enfin, je pense que pour le faire plus simple, en utilisant un **array_unique** serait le plus valable (http://php.net/manual/fr/function.array-unique.php) et un **for**, mais je suis une quiche pour ce qui est d'incrémentation des tableaux.., qu'en pensez-vous ? Je cherche de toute façon de mon côté, mais je m'y perds au bout d'un moment :)
Bon, j'ai refait sur un serveur local, j'ai résolu la boucle en passant par 2 While.
A bientôt.
Bonjour Thokki,
à ta place voici ce que je ferai :
dans ta table contenant les commentaires 'comments' (par exemple) tu rajoutes un champ 'send' qui est un boolean (true|false)
ensuite lorsqu'un nouveau commentaire est posté, tu l'ajoutes dans ta table 'comments' en mettant la valeur 'send' a false
puis tu récupères dans cette table les utilisateurs dont le champ send est à false
SELECT DISTINCT id, user_id FROM comments WHERE send = false;
si cette liste contient un seul utilisateur (c'est ton premier com), tu ne fais que modifier la ligne en passant le champ 'send' à true
si tu en as plus de un, elle contiendra les utilisateurs ayants commentés et à qui tu dois envoyer un mail
enfin passe le champ 'send' à true pour l'ensemble des lignes récupérés
Ciao
Alors, j'ai modifié, voici ce que ca pourrait donner (code en essai):
<h2>Envoi notification nouveau commentaire [DEBUG]</h2>
<?php
// Récupération mails des commentaires postés
$sqlemailcom = "SELECT DISTINCT mail,send FROM commentaires WHERE idedc=$id and send='0'";
$reqemailcom = mysql_query($sqlemailcom) or die ('Erreur SQL<br/>'.mysql_error());
// On initialise le compteur d'envoi
$i = 0;
// On boucle
while ($dataemailcom= mysql_fetch_assoc($reqemailcom)){
$emailcom = $dataemailcom'mail'];
// On récupère l'adresse quand le membre est abonné
$sqlnotifok =" SELECT login,email FROM users WHERE email='$emailcom' AND combillet='1'";
$reqnotifok = mysql_query($sqlnotifok) or die ('Erreur SQL<br/>'.mysql_error());
$datanotifok= mysql_fetch_assoc($reqnotifok);
if (mysql_num_rows($reqemailcom) == 1){
// ON NE FAIT RIEN = Premier commentaire posté, pas de notification
}
if (mysql_num_rows($reqemailcom) > 1){
// ON ENVOI LES NOTOFICATIONS:
// Objet
$objet = 'xxxxxxxxx.fr > Réponse à un commentaire.' . "\r\n";
// EMAIL du membre
$email = $datanotifok'email'];
// Header
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From:xxxxx@xxxxxx.fr' . "\r\n";
// Message
$message = file_get_contents('admin/template/_notification_header_format.html', FILE_USE_INCLUDE_PATH);
$message .= "Bonjour <b>".$datanotifok'login']."</b>, ";
$message .= "un nouveau commentaire a été publié sur l'article <u><a href=\"http://xxxxxxxxx.fr/comments.php?id=\"".$id."\"\">".$data'titre']."</a></u>";
$message .= file_get_contents('admin/template/_notification_footer_format.html', FILE_USE_INCLUDE_PATH);
// Preview
echo $email;
echo "<br/>";
echo $objet;
echo "<br/>";
echo $headers;
echo "<br/>";
echo $message;
$i++;
// DESACTIVATION ENVOI MAIL POUR ESSAIS
// mail($email,$objet,$message,$headers);
}
}
// MISE A JOUR BOOLEEN SEND
$sqlsend ="UPDATE commentaires set send='1' where idedc=$id";
$reqsend = mysql_query($sqlsend) or die('Erreur de connexion à la base<br/>'.$sqlsend.'<br/>'.mysql_error());
echo $i." Messages envoyés";
?>
Bonjour Swup.
Merci de ta réponse, je vais explorer cette méthode. Pour info, j'ai 2 tables, une qui contient les commentaires et une autre (celle des membres) où je vais y récupérer leur adresse mail (permet de vérifier si email commentaire posté = email d'un membre) et de vérifier si le membre en question veut bien recevoir les messages (notifications dans son compte), Mais ca ne change absolument rien à la logique !
Merci !
Je valide :)