DotClear : Plugin CommentMail de PresseCitron - Correction du bug sur une boucle foreach à la ligne 88
Par Yoann le vendredi, 27 juillet 2007, 11:16 - Blog Blog - Lien permanent
Eric Dupin de Presse-Citron.net nous porpose un tres bon plugins pour DotClear : CommentMail
Celui-ci permet aux visiteurs ayant laissé un commentaire sur un billet d'être avertir par email en cas de réponse par une autre personne.
Enormement d'utilisateurs après l'installation de ce plugin ce retrouve avec un Warning PHP sur une boucle foreach à la ligne 88
Warning: Invalid argument supplied for foreach() in .../ecrire/tools/commentmail/functions.php on line 88
Eric nous explique comment ne plus avoir ce Warning, mais sa solution n'est pas des plus propre, il se contente de supprimer l'affichage des Warning en ajoutant au debut du fichier error_reporting(E_PARSE); et non de trouver d'où vient rellement le probleme.
Je vous explique ci-dessous d'où vient le problème, et comment le corriger proprement.
D'où vient le problème ?
Si vous regarder de plus près le code du fichier .../ecrire/tools/commentmail/functions.php autour de la ligne 88, la boucle foreach qui nous pose problème est
foreach($r as $cm)
Ici $r doit être un tableau contenant la liste des abonnées à la notification de nouveau commentaires.
Seulement si vous n'avez pas de personnes abonnées à la notification ce tableau est vide, et inexistant, donc $r n'est pas considéré comme un objet tableau, et la fonction foreach vous envoi un warning car elle ne peut pas parcourir cet objet.
La solution : Tester si $r est un tableau avant d'utiliser foreach
Avant
foreach($r as $cm)
{
Ajouter
if (is_array($r)) {
ET Apres
@mail($mail,$n_subject,$n_content,$n_headers); }
Ajouter
}
Voilà après ces quelques modifications du code, vous n'aurez plus d'erreur.
Merci à Eric pour ce plugin.
Commentaires
Merci pour la correction même si j'utilise pas ce plugin.
Le @ devant mail() : pas bien :-P
Si vous ne voulez afficher aucune erreur, une ligne en début de fichier et c'est tout. Le spécifier à chaque fonction est très lourd.
@++
Florent : Je me suis contenté dans ce correctif de corriger proprement le probleme avec la boucle foreach.
Il reste d'ailleur bien d'autre chose à corriger. Par exemple tu postes 2 commentaires et que tu demandes a chaque poste de recevoir une notification, tu recevra alors deux mail.
Bref, l'idée d'Eric est très bonne. A l'occasion je mettrais le nez un peu plus dans le code.
Bonjour Yoann,
Merci pour ce correctif. En ce qui me concerne, je n'arrive pas à le faire fonctionner. Grâce à tes modifications, il n'y a plus de message d'erreur, mais la notification ne semble toujours pas marcher... Est-ce que par hasard tu saurais d'où ça peut venir ?
Merci en tous cas de ton aide,
Eric
j'aimerais bien savoir ou télécharger ce plugin et jeter un coup sur le code .J'aimerai en mettre sur 1 de mes sites .
merci
Alex : Il y a un lien en tout debut de billet vers la page du plugins sur le site de presse citron
son lien ne marche pas !!!
Merci pour ce correctif!!!
Ce va tres bien! Merci pour ce correctif!!!!