La communauté ALL HTML c'est 58005 membres à ce jour dont 2 inscrits aujourd'hui et 30 depuis une semaine.

Cases à cocher : Trier les destinataires et envoi d'une newsletter en fonction de leur statut

Photo de elizabeth Article publié le mardi 27 novembre 2007 par elizabeth.
Cet article est classé dans les catégories « PHP »

Ce code permet de lister les statuts sous lesquels sont inscrits les internautes, et de proposer cette liste avec des cases à cocher afin d'envoyer la newsletter uniquement aux membres inscrits sous les statuts que nous avons cochés.

j'ai été bien aidée sur le forum, alors ça me parraît normal aujourd'hui de vous faire profiter de mon code qui fonctionne grâce aux membre de ce site...

j'ai au départ deux bases de données.
- l'une regroupant les membres avec les champs mail, statut, et d'autres infos diverses.
- l'autre contanant les champs id, sujet, texte avec le contenu de mes newsletters (que je crée préalablement avec fck-editor, dans un formulaire à part)
dans mon fichier "liste.php" je crée un formulaire contenant mes choix.

à noter que ce formulaire peut être créé dynamiquement en extrayant les champs d'une base de donnée, en sélectionnant les statuts avec DISTINCT pour ne pas avoir de doublons, mais c'est une autre histoire...


la variable $id que je fais passer dans le formulaire est une variable récupérée à une page précédente, c'est l'id correspondant à la newsletter que j'ai choisi d'envoyer. je liste simplement mes newsletter et je crée un lien vers liste.php avec l'id de ma lettre.

liste.php


<? $id=$_GET['id']; ?> <form name="form1" method="post" action="envoi.php"> <p> Envoyer la lettre uniquement aux statuts séléctionnés :<br> <br> <input name="statut[]" type="checkbox" id="statut[]" value="professionnels"> professionnels <br> <input name="statut[]" type="checkbox" id="statut[]" value="particuliers"> particuliers <br> <input name="statut[]" type="checkbox" id="statut[]" value="envoi test"> envoi test<br> <p align="center"> <input name="id" type="hidden" value="<? echo $id ?>"> <input type="submit" name="Submit" value="envoyer selon ce tri"> </p> </form>

et maintenant je vais récupérer la lettre en fonction de son id,
puis récupérer les statuts cochés, afin d'envoyer la lettre à ces personnes, en prenant soin de l'envoyer qu'une fois la lettre même si l'internaute s'est inscrit sous plusieurs statuts.
je me suis inscrite sous le statut "envoi test" ainsi je peux m'envoyer la lettre juste à moi (et éventuellement mes équipiers en leur attribuant ce statut aussi) afin de voir ce que ça donne.
ça se trouve dans...

envoi.php



d'abord, ma newsletter :
<?php $id=$_POST['id']; mysql_select_db($database_base, $base); $query_news = sprintf("SELECT * FROM newsletter WHERE id = '$id'"); $news = mysql_query($query_news, $base) or die(mysql_error()); $row_news = mysql_fetch_assoc($news); $totalRows_news = mysql_num_rows($news); ?> $sujet=$row_news['sujet']; $message=$row_news['texte']; //**************** recup lettre avec les caractères spéciaux $sujet=stripslashes($sujet); $message=stripslashes($message); htmlentities("$message");

voilà, j'ai mes variables de newsletter à envoyer.
maintenant je récupère mes statuts :

<?php foreach ($_POST['statut'] as $_POST['choix']) { echo "",$_POST['choix'],"<br>"; } ?> </span> <? $statut = ''; // on place les valeurs dans un tableau pour plus de sécurité (risque d'injection de code) $var = array('professionnels','particuliers','envoi test'); foreach ($_POST['statut'] as $k=>$value) { if(in_array($value,$var)){ if(!empty($statut)){ $statut .= " OR statut='$value'"; } else{ $statut .= "statut='$value'"; } } } //pour vérifier : echo "<br />".$statut; ?>

il faut maintenant sélectionner les adresses mail de tous les membres ayant le statut qu'on a choisi. même si une personne s'est inscrite plusieurs fois, il n'y aura qu'un envoi par adresse mail, et j'envoie le tout :

mysql_select_db($database_base $base); $query_emailing = "SELECT DISTINCT mail, statut FROM membres WHERE $statut; $emailing = mysql_query($query_emailing, $base) or die(mysql_error()); while($rang=mysql_fetch_array($emailing)){ $destinataire=$rang['mail']; $From = "From:contact@petite-fee.fr\n"; $From .= "MIME-version: 1.0\n"; $From .= "Content-type: text/html; charset= iso-8859-1\n"; $mail_OK= mail($destinataire, $sujet, $message, $From); } // pour vérifier : echo $destinataire; ?> <?php mysql_free_result($emailing); ?>

voilà,
j'espère que ce code fera des heureux,
merci à ceux qui m'ont aidée à le faire, j'ai bien ramé, si je peux l'éviter à d'autres...

Petite Fée

VOS COMMENTAIRES ...

Commenter cette publication

Photo de pchlj Commentaire publié le lundi 17 décembre 2007 à 14 h 32 par pchlj
Oserais je dire que tu te complique la vie :)

Bon je détaille le process... pour le code tout le monde est garnd et peut se prendre par la main :)

On récupère les DISTINCT emails des membres ayant les status choisis (requète sommes toute assez simple)
PAR CONTRE ON COMPL7TE AVEC UN NOT IN un table qui contient l'email ainsi que l'id de la newsletter (vous verrez plus bas)

On récupère la newsletter => on place en variables le titre et le message

On while sur le resultats des emails
=> on envoi la news
=> dnas la foulée on update la table des envois avec l'email et l'id news

Bon là vous me direz à quoi ça sert de stocker ceux qu'on a envoyés ??? surtout que la première requete est déjà faites :)

Bah oui je sais.. juste il faut savoir qu'au delà de 200 mails par envoi php rame, du coup il vaut mieux morceler son envoi... du coup si on morcèle on en était où l'ors de l'envoi précédent ?? hein ?? ben c'est là que la deuxième table sert :) de plus en cas de gros bug ou de plantage vu qu'on sait qui a déjà reçu la news on peut très facilement relancer le process :D

voilà.. bon en gros ça complète ce que fait tite fée... et ça simplifie un peu aussi..

L'idéal étant d'avoir un cron qui lance régulièrement les newsletters... comme ça on a rien de spécial à gérer :) juste un clic d'envoi quimet à jour le champs dans la table des news...

Bon j'ai peur de partir en vrac je m'arrête tout e suite :)
Photo de elizabeth Commentaire publié le dimanche 23 décembre 2007 à 10 h 34 par elizabeth
je me doute que mes solutions sont un peu... brinquebalantes.
pour me faire un peu pardonner je précise qu'il n'y a pas si longtemps j'étais vendeuse de fringues, et que j'ai appris seule en commençant pas "le php pour les nuls" et grace à vous aussi.
c'est pourquoi mes étapes sont bieeennnnn découpées et mes explications exhaustives.
j'y vais tout doucement et j'explique tout car je suis une débutante qui s'adresse aux débutants... tout en m'inclinant devant les vrais développeurs comme toi et tant d'autres qui m'ont porté secours ces derniers mois.

ta remarque sur mon proces est très très intéressante, je viens d'ailleurs de poser une question par rapport à un problème d'envoi de 200 mails qui cagate.... (tu le trouvera dans le forum serveur)

donc n'hésite pas à partir en vrac, ça peut aider plein de gens dont moi...
et je retiens l'idée de la deuxieme base qui stocke les envois déjà effectués, je fais l'intégrer à mon projet.

merci pchlj
et joyeux noël....

P'tite fée

Commenter cette publication

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

Forums de discussions associés

Discutez et échangez sur ce thème dans notre forum PHP - SQL.

Liens sponsorisés

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.