Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Lecture du tutoriel

Une newsletter complète

Avatar
Auteur : cyril5789
Créé : le 05/04/2007 20:00:10
Modifié : le 31/03/2008 10:30:50
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Bonjour à tous !
Vous avez choisi de réaliser un système de newsletter pour votre site ?
Alors ce tuto est fait pour vous.

Ici, vous allez créer vos bases de données, créer le formulaire d'inscription ainsi que le système de gestion des membres, sans oublier la rédaction et l'envoi de vos messages.
Vous devez pour cela : connaître l'(x)HTML, le PHP et... c'est tout. Je vais me servir du BBcode, mais je ne le maîtrise pas du tout, je l'ai donc copié d'un autre tutoriel.
Je vais ainsi vous livrer le BBCode sans y passer trop de temps. Personnellement, je n'y connais rien mais c'est très instinctif et vous pourrez modifier ces codes à votre guise.

Sans plus attendre, lançons-nous à l'attaque de... (non, on ne va se battre avec personne ^^) hum hum, à l'attaque, disais-je, des NEWSLETTERS.
Sommaire du chapitre :

Les bases de données (BDD)

Eh oui ! Comme ce code nécessite l'inscription de quelqu'un ou de quelque chose, il nécessite alors une base de données.
Pour ceux qui ne sauraient pas ce qu'est une base de données, je vous renvoie aux cours de M@teo21 sur les bases de données.

Notre table s'appellera newslettermembre.
Donc, pour notre newsletter, nous aurons besoin de... disons... 3 champs :


Évidemment, vous pouvez rajouter autant de champs que vous le désirez (nom, prénom, téléphone) : tout dépend de vos besoins.


Dorénavant, je simplifierai le nom "base de données" par "BDD", sachez donc de quoi il s'agit lorsque vous verrez "BDD".


Voilà : que dire d'autre sur les bases de données ? Eh bien, rien de plus. :)
On peut maintenant commencer à coder !



Le formulaire d'inscription

Le formulaire



Une partie simple mais importante tout de même.

Comment les visiteurs peuvent s'inscrire à la newsletter ?


Eh bien, grâce à un simple formulaire !

Pour les formulaires, je vous reconduis aux cours de M@teo21 sur les formulaires en PHP.

À quoi ressemble un formulaire d'inscription ?

Vous en avez sans doute déjà croisé sur le net, en voici un exemple :

Image utilisateur


Nous allons donc créer ce formulaire (que vous insérerez ensuite où vous le souhaitez sur votre site) :

Code : HTML
1
2
3
4
5
6
7
<form action="inscription_newsletter.php" method="post">
S'inscrire à la newsletter
<input type="text" name="adresse" value="Votre email" />
<label><input type="radio" name="newsletter" value="oui" checked="checked" />S'abonner</label>
<label><input type="radio" name="newsletter" value="non" />Se désabonner</label>
<input type="submit" name="submit" value="Envoyer" />
</form>



Donc ici, inscription_newsletter.php sera la page sur laquelle on arrivera après avoir cliqué sur le bouton Envoyer.

Ensuite, la balise input sert à insérer une zone de texte dans laquelle les visiteurs placeront leur adresse e-mail et aura par défaut la valeur : Votre e-mail.

Les deux balises suivantes permettent de choisir si l'on veut s'inscrire ou se désinscrire à la newsletter.


L'enregistrement



Eh oui ! Maintenant que quelqu'un a entré son adresse e-mail, il va falloir la traiter !

inscription_newsletter.php



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
mysql_connect("localhost", "user", "mdp");
mysql_select_db("basededonnee"); 
if(get_magic_quotes_gpc()) {
        $_POST = array_map($_POST, 'stripslashes');
        $_GET = array_map($_GET, 'stripslashes');
        $_COOKIE = array_map($_COOKIE, 'stripslashes');
}
$adresse = trim($_POST['adresse']);
 
if (!empty($adresse) AND (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $adresse))) //on vérifie qu'une adresse a été entrée et qu'elle a un bon format (pseudo@service.ext)
{
    $adresse = mysql_real_escape_string($_POST['adresse'], ENT_QUOTES); //mesure de sécurité
 
    if ($_POST['newsletter'] == 'oui') // s'il a choisi de s'inscrire
    {
        //on insère une nouvelle ligne dans la BDD contenant l'adresse du visiteur
        mysql_query("INSERT INTO newslettermembre VALUES('', '" . $adresse . "', '1')"); 
        echo 'Vous venez de vous inscrire à la newsletter.';
    }
    //s'il a choisi de se désinscrire
    else
    {
        //on supprime son adresse de la BDD
        mysql_query('DELETE FROM newslettermembre WHERE adresse=' . $adresse);
        echo 'Votre désinscription à la newsletter a bien été prise en compte.';
    }
}
else //si le champ de l'adresse est vide lorsqu'il a cliqué sur "Envoyer", ou bien si le format de l'adresse n'est pas de la forme "pseudo@service.ext", on affiche une erreur
{
    echo 'Une erreur est survenue, vérifiez que vous avez bien rempli le formulaire et que votre adresse est bien de la forme PSEUDO@SERVICE.EXT.';
}
 
//et on n'oublie pas de se déconnecter !
mysql_close();
 
?>


La rédaction de la NEWSLETTER BBcode

Cette partie est sans doute la plus difficile car elle fait appel à du BBcode.

Le BBcode



Le BBcode est un système propre à chaque site (mais standard tout de même) qui permet de pouvoir proposer aux visiteurs (ou même aux administrateurs) des "mini" balises d'(x)HTML sans pour autant l'autoriser.

Je m'explique.
N'allez pas plus loin QU'ICI !
Eh oui, le Site du Zér0 a son propre BBcode !
Le zCode.

Lorsque vous tapez un message sur le forum, vous pouvez le mettre en page, c'est-à-dire rajouter des balises, telles que gras, souligner, etc.
Pour cela vous tapez votre texte, vous le sélectionnez, et vous cliquez sur un bouton de mise en forme tel que Gras ; ainsi, vous verrez apparaître :

Code : Zcode
1
<gras>votre texte</gras>


En réalité, sur une page Web, vous devez taper :
Code : HTML
1
<b>votre texte</b>


Ce principe permet plusieurs choses.
Dans un premier temps, de proposer une mise en forme aux utilisateurs de façon simple (le simple clic sur un bouton suffit).
Dans un deuxième temps, la chose la plus importante, de LIMITER l'(x)HTML aux personnes malveillantes qui pourraient placer de mauvais scripts dans vos pages (car seules les balises pré-enregistrées par le site seront autorisées).
Code : Zcode
1
<gras/> OUI, <b></b> NON


Et dans un troisième temps, de ne pas "choquer" les véritables Zér0s qui n'y connaissent rien avec les mises en forme qui apparaissent si on clique sur un bouton qui n'est pas en BBcode. Je pense qu'un débutant préférera voir dans son texte un...
Code : Zcode
1
<gras>son texte</gras>

...plutôt qu'un...
Code : HTML
1
<b>son texte</b>

...qui ne veut rien dire !

Et bien sûr, ce système ne nécessite pas de connaissance en html et permet une mise en forme sans rajouter ses balises manuellement, car les boutons de mise en forme sont prévus à cet effet.

Il a bien sûr aussi été inventé dans le but de se simplifier la vie :
1) vous tapez
2) vous sélectionnez
3) vous cliquez
et abracadabra ! :magicien:
Le texte est en gras ! (Ça rime en plus :p ).

Utilisation du BBcode



Pour pouvoir créer votre BBcode, je vous demande de lire ce tuto sur le BBcode, il vous permettra de créer le vôtre et de bien comprendre comment ça fonctionne.

Le BBcode s'utilise à deux endroits sur un site le proposant.
Sur la page de rédaction (la prévisualisation), et sur la page de récupération.
Lorsque l'on tape un message sur un forum, avant de l'envoyer, on aime bien avoir un aperçu. Eh bien le Site du Zér0 le propose ! Lorsque vous cliquez sur Image utilisateur, vous voyez apparaître en bas ce que ça donne. Or, le souci c'est qu'Internet ne connaît pas votre BBcode, il ne connaît que les <b>, <center>, etc.
Il faudra donc lui apprendre, ou plutôt faire une conversion de votre BBcode.

Pour cela, on utilise un fichier JS (JavaScript) que l'on place à la racine de votre site : il va ensuite vous permettre de lier le BBcode au vrai code.

Ce fichier devra impérativement s'appeler prev.js.
Voici le contenu de votre fichier :
Code : JavaScript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var timer=0;
var ptag=String.fromCharCode(5,6,7);
function  previsualisation() {
t=document.formulaire.textarea.value 
t=code_to_html(t)
if (document.getElementById) document.getElementById("prev").innerHTML=t
if (document.formulaire.auto.checked) timer=setTimeout(previsualisation,1)
<!-- le "1" est le temps que met le texte à s'afficher, "1" : le texte s'affichera en même temps que l'on écrit (en s) -->
}
function automatique() {
if (document.formulaire.auto.checked) previsualisation() <!-- si on a coché la case d'aperçu automatique -->
}
function code_to_html(t) {
t=nl2khol(t)
// balise Gras <!-- on lui dit que telle balise correspond à tel code en HTML -->
t=deblaie(/(\[\/gras\])/g,t)
t=remplace_tag(/\[gras\](.+)\[\/gras\]/g,'<span style="font-weight: bold;">$1</span>',t) 
t=remblaie(t)
 
// balise Italic
t=deblaie(/(\[\/italic\])/g,t)
t=remplace_tag(/\[italic\](.+)\[\/italic\]/g,'<span style="font-style: italic;">$1</span>',t) 
t=remblaie(t)
 
// balise Citation
t=deblaie(/(\[\/citation\])/g,t)
t=remplace_tag(/\[citation=([\s\S]*?)\](.+)\[\/citation\]/g,'<strong>Citation $1 :</strong><div style="border: 1px solid #000000; width: 50%; font-family: Verdana, \'Trebuchet MS\', Tahoma, \'Times New Roman\', Times, serif; text-align: left; font-size: 11px;" align="center">$2</div>',t) 
t=remblaie(t)
 
// balise souligner
t=deblaie(/(\[\/souligner\])/g,t)
t=remplace_tag(/\[souligner\](.+)\[\/souligner\]/g,'<u>$1</u>',t)
t=remblaie(t)
 
 
// balise droite
t=deblaie(/(\[\/droite\])/g,t)
t=remplace_tag(/\[droite\](.+)\[\/droite\]/g,'<div style="text-align: right;">$1</div>',t)
t=remblaie(t)
 
// balise centrer
t=deblaie(/(\[\/centrer\])/g,t)
t=remplace_tag(/\[centrer\](.+)\[\/centrer\]/g,'<center>$1</center>',t)
t=remblaie(t)
 
// balise image
t=deblaie(/(\[\/image\])/g,t)
t=remplace_tag(/\[image\](.+)\[\/image\]/g,'<img src="$1" alt="" />',t)
t=remblaie(t)
 
 
// smilies Smile <!-- on oublie pas les smilies -->
t=remplace_tag(/:D/g,'<img src="http://siteduzero.com/Templates/images/smilies/smile.png" alt="" />',t) 
t=remblaie(t)
t=unkhol(t)
t=nl2br(t)
return t
}
<!-- tout le code qui suit, c'est pour transformer toutes les balises, comme les preg_replace en PHP -->
function deblaie(reg,t) {
textarea=new String(t);
return textarea.replace(reg,'$1\n');
}
function remblaie(t) {
textarea=new String(t);
return textarea.replace(/\n/g,'');
}
function remplace_tag(reg,rep,t) {
textarea=new String(t);
return textarea.replace(reg,rep);
}
function nl2br(t) {
textarea=new String(t);
return textarea.replace(/\n/g,'<br/>');
}
function nl2khol(t) {
textarea=new String(t);
return textarea.replace(/\n/g,ptag);
}
function unkhol(t) {
textarea=new String(t);
return textarea.replace(new RegExp(ptag,'g'),'\n');
}



Voyons d'un peu plus près :

Code : JavaScript
1
2
3
4
// balise centrer
t=deblaie(/(\[\/centrer\])/g,t)
t=remplace_tag(/\[centrer\](.+)\[\/centrer\]/g,'<center>$1</center>',t)
t=remblaie(t)


Vous l'aurez compris, ceci sert à afficher ce que donne le texte en étant centré :

Les " // " sont là à titre indicatif, tout comme en php.

Puis on repère dans notre texte [centrer] et [/centrer] :
Code : JavaScript
1
t=deblaie(/(\[\/centrer\])/g,t)


Puis on remplace [centrer] et [/centrer] par <center> et </center> :
Code : JavaScript
1
t=remplace_tag(/\[centrer\](.+)\[\/centrer\]/g,'<center>$1</center>',t)



Et on a fini...

Nous allons maintenant voir comment mettre en place une grande zone de texte précédée de boutons de mise en forme et suivie d'une prévisualisation :

Qu'a-t-on besoin pour rédiger une NEWSLETTER ?


Eh bien d'un formulaire, toujours et encore !


Mais ce n'est pas tout !
La prévisualisation se passe en direct, c'est-à-dire que vous n'aurez pas besoin de réactualiser la page pour la voir ! Et là, on fait appel à un système très pratique : le Javascript !

Quoi ? Mais on en a déjà utilisé tout à l'heure dans notre fichier prev.js et tu ne nous a pas dit au début qu'on avait besoin de connaître le JavaScript !


Et pour cause : je ne le connais pas spécialement non plus ! Je me suis inspiré du tuto deUnder-warz pour le faire, vous n'aurez pas besoin de connaître le JS. Il en est de même pour notre fichier prev.js, c'est très instinctif et vous n'aurez qu'à rajouter des lignes en fonction de vos boutons de mise en forme.

D'abord, le formulaire :

Page newsletter.php


Code : HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sujet :<input type="text" name="sujet" /><br /><br /><!--la case où l'on va mettre le sujet-->
Message :
<input name="auto" id="auto" type="checkbox" onClick="automatique()" /> <label for="auto">Prévisualisation automatique</label><!--et celle où l'on mettra le texte-->
<!-- on crée la case à cocher pour une prévisualisation automatique -->
<br />
<textarea cols=100 rows=40 id="textarea" name="message"></textarea>
<br />
<input type="button" value="Prévisualiser" onClick="previsualisation();return(false)" /><!-- ce bouton va permettre aux utilisateurs d'avoir un aperçu quand ils le veulent, et non en direct -->
<div style="border: 1px dashed #000000; padding: 0.2em; height: 200px; overflow: auto; width: 75%;" align="left" id="prev"></div>
<!-- on crée un div avec quelques caractéristiques, on lui donne un nom et on ne le remplit pas, on le laisse vide -->



Que manque t-il ??

Eh bien déjà les boutons de mise en forme dont je vous ai parlé :

Code : HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[gras]', '[/gras]');return(false)" />
 
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[italic]', '[/italic]');return(false)" />
 
<input type="button" id="souligner" name="souligner" value="Souligner" onClick="javascript:bbcode('[souligner]', '[/souligner]');return(false)" />
 
<input type="button" id="centrer" name="centrer" value="Centrer" onClick="javascript:bbcode('[centrer]', '[/centrer]');return(false)" />
 
<input type="button" id="droite" name="droite" value="A droite" onClick="javascript:bbcode('[droite]', '[/droite]');return(false)" />
 
<input type="button" id="image" name="image" value="Image" onClick="javascript:bbcode('[image]', '[/image]');return(false)" />
 
<a href="#" title="Créer une citation" onClick="javascript:bbcode('[citation=AUTEUR]', '[/citation]');return(false)">Citation</a>
 
<img src="http://siteduzero.com/Templates/images/smilies/smile.png" title="" alt="" onClick="javascript:smilies(':D');return(false)" />


Pas besoin de commenter, tout est dans les names. Remarquez que la mise en place d'une citation ne se fait pas grâce à un bouton, mais grâce à un lien. Pareil pour les images, j'ai rajouté un smiley qui fait office de bouton. Donc nous aurons vu les 3 méthodes d'ajout de mise en forme :
1) par un bouton.
2) par un lien hypertexte et par une image.

Et le JavaScript dans l'histoire ?? :(


Eh bien il arrive, ne vous en faites pas !
Il y a un long code de JavaScript à ajouter et je ne saurai vous en parler, vous n'aurez pas besoin de le modifier celui-là. Ce code devra se trouver entre les balises <head> et </head> de votre page, donc avant les <body> et </body>.

Code : JavaScript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<head>
<title>Rediger une newsletter</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript" type="text/javascript" src="prev.js"></script><!-- on appelle le fichier prev.js pour faire fonctionner la prévisualisation -->
<script language="Javascript">
function bbcode(bbdebut, bbfin)
{
var input = window.document.formulaire.textarea;
input.focus();
/* pour IE (toujous un cas à part lui ;) )*/
if(typeof document.selection != 'undefined')
{
var range = document.selection.createRange();
var insText = range.text;
range.text = bbdebut + insText + bbfin;
range = document.selection.createRange();
if (insText.length == 0)
{
range.move('character', -bbfin.length);
}
else
{
range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
}
range.select();
}
/* pour les navigateurs plus récents que IE comme Firefox... */
else if(typeof input.selectionStart != 'undefined')
{
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
var pos;
if (insText.length == 0)
{
pos = start + bbdebut.length;
}
else
{
pos = start + bbdebut.length + insText.length + bbfin.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
/* pour les autres navigateurs comme Netscape... */
else
{
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos))
{
pos = prompt("insertion (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length)
{
pos = input.value.length;
}
var insText = prompt("Veuillez taper le texte");
input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
}
}
function smilies(img)
{
window.document.formulaire.textarea.value += '' + img + '';
}
</script>
</head>




On y est presque ! Il manque ce dont je vous ai parlé plus tôt : l'affichage des membres avec une case devant pour n'envoyer la newsletter qu'aux gens que vous voulez. Ne vous inquiétez pas, vous n'aurez pas à tous les cocher à chaque fois que vous rédigez une newsletter : votre choix sera préservé dans la BDD sur le champ envoi et se placera par défaut lors de votre prochaine rédaction de newsletter.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<table style="text-align: left; margin-left: auto; margin-right: auto;">
 
  <tbody align="center">
 
    <tr>
 
      <th>Envoyer ?</th>
 
 
      <th>Adresse mail</th>
          
 
    </tr>
 
<?php
mysql_connect("localhost", "user", "password");
mysql_select_db("bdd");
 
//je sélectionne maintenant les informations contenues dans ma BDD "newslettermembre"
$retour = mysql_query('SELECT adresse, envoi, id FROM newslettermembre ORDER BY id ASC');
while( $donnees = mysql_fetch_assoc($retour) )
{
?>
<!-- je crée la case à cocher qui sera cochée par défaut si dans le champ "envoi" j'ai "1" et décochée si j'ai "0" -->
<td><input type="checkbox" name="<?php echo 'envoi['.$donnees['id'].']';?>" <?php if ($donnees['envoi']== 1) {?> checked="checked"<?php } ?> /></td>
<?php
//puis on affiche l'adresse du membre
echo '
<td>' . htmlspecialchars(stripslashes($donnees['adresse'])) . '
</tr>';
}
?>
 
 
  </tbody>
</table>


Et maintenant, il ne manque plus que le bouton de type submit Envoyer.
Code : HTML
1
<input type="submit" name="submit" value="Envoyer" />


Ça y est ! On a tout!
Regardons ce que ça donne !


Code : PHP
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Rédiger une newsletter</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript" type="text/javascript" src="prev.js"></script><!-- on appelle le fichier prev.js pour faire fonctionner la prévisualisation -->
<script language="Javascript">
function bbcode(bbdebut, bbfin)
{
var input = window.document.formulaire.textarea;
input.focus();
/* pour IE (toujours un cas à part lui ;) )*/
if(typeof document.selection != 'undefined')
{
var range = document.selection.createRange();
var insText = range.text;
range.text = bbdebut + insText + bbfin;
range = document.selection.createRange();
if (insText.length == 0)
{
range.move('character', -bbfin.length);
}
else
{
range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
}
range.select();
}
/* pour les navigateurs plus récents que IE comme Firefox... */
else if(typeof input.selectionStart != 'undefined')
{
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
var pos;
if (insText.length == 0)
{
pos = start + bbdebut.length;
}
else
{
pos = start + bbdebut.length + insText.length + bbfin.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
/* pour les autres navigateurs comme Netscape... */
else
{
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos))
{
pos = prompt("insertion (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length)
{
pos = input.value.length;
}
var insText = prompt("Veuillez taper le texte");
input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
}
}
function smilies(img)
{
window.document.formulaire.textarea.value += '' + img + '';
}
</script>
</head>
<body>
 
 <center>
 
<form method="post" action="newslettergo.php" name="formulaire">
Sujet :<input type="text" name="sujet" /><br /><br />
Message :
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[gras]', '[/gras]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[italic]', '[/italic]');return(false)" />
<input type="button" id="souligner" name="souligner" value="Souligner" onClick="javascript:bbcode('[souligner]', '[/souligner]');return(false)" />
<input type="button" id="centrer" name="centrer" value="Centrer" onClick="javascript:bbcode('[centrer]', '[/centrer]');return(false)" />
<input type="button" id="droite" name="droite" value="A droite" onClick="javascript:bbcode('[droite]', '[/droite]');return(false)" />
<input type="button" id="image" name="image" value="Image" onClick="javascript:bbcode('[image]', '[/image]');return(false)" />
<a href="#" title="Créer une citation" onClick="javascript:bbcode('[citation=AUTEUR]', '[/citation]');return(false)">Citation</a>
<img src="http://siteduzero.com/Templates/images/smilies/smile.png" title="" alt="" onClick="javascript:smilies(':D');return(false)" />
<br />
<input name="auto" id="auto" type="checkbox" onClick="automatique()" /> <label for="auto">Prévisualisation automatique</label>
<!-- on crée la case à cocher pour une prévisualisation automatique -->
<br />
<textarea cols=100 rows=40 id="textarea" name="message"></textarea>
<br />
<input type="button" value="Prévisualiser" onClick="previsualisation();return(false)" /><!-- ce bouton va permettre aux utilisateurs d'avoir un aperçu quand ils le veulent, pas en direct -->
<div style="border: 1px dashed #000000; padding: 0.2em; height: 200px; overflow: auto; width: 75%;" align="left" id="prev"></div>
<!-- on crée un div avec quelques caractéristiques, on lui donne un nom et on ne le remplit pas, on le laisse vide -->
 
 
 
 
 
 
 
<table style="text-align: left; margin-left: auto; margin-right: auto;">
 
  <tbody align="center">
 
    <tr>
 
      <th>Envoyer ?</th>
 
 
      <th>Adresse mail</th>
          
 
    </tr>
 
<?php
mysql_connect("localhost", "user", "password");
mysql_select_db("bdd");
 
//je sélectionne maintenant les informations contenues dans ma BDD "newslettermembre"
$retour = mysql_query('SELECT adresse, envoi, id FROM newslettermembre ORDER BY id ASC');
while( $donnees = mysql_fetch_assoc($retour) )
{
?>
<!-- je crée la case à cocher qui sera cochée par défaut si dans le champ "envoi" j'ai "1" et décochée si j'ai "0" -->
<td><input type="checkbox" name="<?php echo 'envoi['.$donnees['id'].']';?>" <?php if ($donnees['envoi']== 1) {?> checked="checked"<?php } ?> /></td>
<?php
//puis on affiche l'adresse du membre
echo '
<td>' . htmlspecialchars(stripslashes($donnees['adresse'])) . '
</tr>';
}
?>
 
 
  </tbody>
</table>
 
 
 
 
 
<input type="submit" name="submit" value="Envoyer" />
</form>
 
 
 
<?php
//Et on n'oublie pas de refermer la connexion !
mysql_close();
 
?>


N'oubliez pas de mettre votre fichier prev.js à la racine de votre site !

La récupération du message et le postage

Nous venons de poster un message et nous voulons le traiter. Un petit problème survient !
Vous venez de poster un message contenant du BBcode ; or, les boîtes de réception de vos membres ne connaissent pas le BBcode ! o_O

Je vous rassure, vous ne l'avez pas encore posté ! D'ailleurs, avant cette étape, il vous faut le convertir :

Page newslettergo.php



Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$message = stripslashes($_POST['message']); // On enlève les slashs qui se seraient ajoutés automatiquement
   
 
   
    // On fait passer notre texte à la moulinette des Regex
//gras
    $message = preg_replace('`\[gras\](.+)\[/gras\]`isU', '<b>$1</b>', $message);
//italic
    $message = preg_replace('`\[italic\](.+)\[/italic\]`isU', '<i>$1</i>', $message);
//souligner
$message = preg_replace('`\[souligner\](.+)\[/souligner\]`isU', '<u>$1</u>', $message);
//centrer   
$message = preg_replace('`\[centrer\](.+)\[/centrer\]`isU', '<center>$1</center>', $message);
//aligner à droite   
$message = preg_replace('`\[droite\](.+)\[/droite\]`isU', '<div style="text-align: right;">$1</div>', $message);
//une citation
$message = preg_replace('`\[citation=([\s\S]*?)\](.+)\[/citation\]`isU', '<strong>Citation $1 :</strong><div style="border: 1px solid #000000; width: 50%; font-family: Verdana, \'Trebuchet MS\', Tahoma, \'Times New Roman\', Times, serif; text-align: left; font-size: 11px;" align="center">$2</div>',$message);
//un smiley :)   
$message = preg_replace('`\:D`isU', '<img src="smile1.png" alt="" />',$message);
//insertion d'image
$message = preg_replace('`\[image\](.+)\[/image\]`isU', '<img src="$1" alt="" />',$message);


Houlala c'est quoi, tout ça ??? :waw:


Ce sont des regex, ils vont vous permettre de transformer votre BBcode en code international, l'(x)html.

On prend la variable $message, on enlève nos [gras][/gras] et le reste, et on les remplace par <b></b> ; on fait de même avec toutes les autres mises en page et on prend en compte les modifications à chaque fois dans $message. Vous pourrez rajouter des lignes en fonction de ce que vous avez choisi de mettre comme bouton sur la page précédente.

Et maintenant on met à jour le champ envoi de vos visiteurs à "1" si on a coché, à "0" sinon :

Code : PHP
1
2
3
4
5
$id_list = implode(',', $_POST['envoi']);
if(is_array($id_list) && !empty($id_list)) {
        mysql_query('UPDATE newslettermembre SET envoi = 1 WHERE id IN(' . $id_list . ')');
        mysql_query('UPDATE newslettermembre SET envoi = 0 WHERE id NOT IN(' . $id_list . ')');
}


Donc ici, on vérifie chaque membre s'il est coché ; si oui, on met un "1" dans son champ envoi, sinon, on met un "0".

Maintenant, il faut récupérer les adresses des gens qui sont à "1" et faire une boucle pour envoyer le message à toutes ces personnes.


Code : PHP
1
2
3
4
5
6
7
$retour = mysql_query('SELECT adresse FROM newslettermembre WHERE envoi="1" '); // On sélectionne les adresses e-mail des membres à "1"
while ($donnees = mysql_fetch_array($retour))
{
mail($donnees['adresse'], $_POST['sujet'], $message);
}
//et on envoie le tout par mail
?>


Nous venons de voir la fonction mail. Elle est toute simple :


Et voilà : c'est fini !!

Il n'y a plus qu'à mettre le tout en un !

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
 
// ça, vous avez l'habitude je pense...
mysql_connect("localhost", "user", "password");
mysql_select_db("bdd");
 
if(isset($_POST['sujet']) AND isset($_POST['message']))
{
   $message = stripslashes($_POST['message']); // On enlève les slashes qui se seraient ajoutés automatiquement
   
 
   
    // On fait passer notre texte à la moulinette des Regex
//gras
    $message = preg_replace('`\[gras\](.+)\[/gras\]`isU', '<b>$1</b>', $message);
//italic
    $message = preg_replace('`\[italic\](.+)\[/italic\]`isU', '<i>$1</i>', $message);
//souligner
$message = preg_replace('`\[souligner\](.+)\[/souligner\]`isU', '<u>$1</u>', $message);
//centrer   
$message = preg_replace('`\[centrer\](.+)\[/centrer\]`isU', '<center>$1</center>', $message);
//aligner à droite   
$message = preg_replace('`\[droite\](.+)\[/droite\]`isU', '<div style="text-align: right;">$1</div>', $message);
//une citation
$message = preg_replace('`\[citation=([\s\S]*?)\](.+)\[/citation\]`isU', '<strong>Citation $1 :</strong><div style="border: 1px solid #000000; width: 50%; font-family: Verdana, \'Trebuchet MS\', Tahoma, \'Times New Roman\', Times, serif; text-align: left; font-size: 11px;" align="center">$2</div>',$message);
//un smiley :)   
$message = preg_replace('`\:D`isU', '<img src="smile1.png" alt="" />',$message);
//insertion d'image
$message = preg_replace('`\[image\](.+)\[/image\]`isU', '<img src="$1" alt="" />',$message);    
        
 
 
//la boucle de mise à jour
for($j=1;$j<=$_POST['nombredi'];$j++)
 {
 
     if ($_POST['envoi'.$j.''] == '1') 
         { //(Si la checkbox est cochée)
        mysql_query("UPDATE newslettermembre SET envoi='1' WHERE id=" . $_POST['idmembre'.$j.'']);
                echo $_POST['idmembre'.$j.''];
     }
         else
         {
         mysql_query("UPDATE newslettermembre SET envoi='0' WHERE id=" . $_POST['idmembre'.$j.'']);
         }
 
         
}
 
//la boucle d'envoi
$retour = mysql_query('SELECT adresse FROM newslettermembre WHERE envoi="1" '); // On sélectionne les adresses e-mail des membres
while ($donnees = mysql_fetch_array($retour))
{
mail($donnees['adresse'], $_POST['sujet'], $message);
}
 
?> 
 
<h2>Le message a été envoyé</h2><br>
 
<?php
}
else // Sinon,
{
?>
<h2>Le message n'a pas été envoyé</h2>
 
<?php
}
//Et on n'oublie pas de refermer la connexion !
mysql_close();
 
?>

La gestion des membres

La partie la plus simple maintenant, je pense. Elle consiste à afficher les membres et à mettre un lien à cliquer permettant de les supprimer :

Il faudra maintenant faire appel aux $_GET qui permettent de voir si on fait une action ou non sur le membre.

Mais d'abord on affiche les membres :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<table style="text-align: left; margin-left: auto; margin-right: auto;">
 
  <tbody align="center">
 
    <tr>
 
 
      <th>Supprimer</th>
 
      <th>Adresse</th>
          
 
    </tr>
 
<?php $retour = mysql_query('SELECT * FROM newslettermembre ORDER BY id DESC'); while ($donnees = mysql_fetch_array($retour)) { ?>
    <tr>
 
//on crée le lien (newslettermembre.php?supprimer_membre=) vers chaque membre correspondant à leur id :
      <td><?php echo '<a href="newslettermembre.php?supprimer_membre=' . $donnees['id'] . '">'; ?>Supprimer</td>
 
//et on affiche l'adresse
 
      <td><?php echo  $donnees['adresse']; ?></div></td>
 
    </tr>
 
<?php } // Fin de la boucle qui liste les membres ?>
  </tbody>
</table>


Puis on vérifie avec $_GET si on supprime un membre ou non, et si c'est le cas, on va supprimer l'entrée dans la BDD.

Code : PHP
1
if (isset($_GET['supprimer_membre'])) { mysql_query('DELETE FROM newslettermembre WHERE id=' . (int)$_GET['supprimer_membre']); } ?>


Au final, on aura donc un combiné des deux :

newslettermembre.php

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php mysql_connect("localhost", "user", "password");
mysql_select_db("bdd");
 
if (isset($_GET['supprimer_membre'])) { mysql_query('DELETE FROM newslettermembre WHERE id=' . (int)$_GET['supprimer_membre']); } ?>
 
<table style="text-align: left; margin-left: auto; margin-right: auto;">
 
  <tbody align="center">
 
    <tr>
 
 
      <th>Supprimer</th>
 
      <th>Adresse</th>
          
 
    </tr>
 
<?php $retour = mysql_query('SELECT * FROM newslettermembre ORDER BY id DESC'); while ($donnees = mysql_fetch_array($retour)) { ?>
    <tr>
 
//on crée le lien (newslettermembre.php?supprimer_membre=) vers chaque membre correspondant à leur id :
      <td><?php echo '<a href="newslettermembre.php?supprimer_membre=' . $donnees['id'] . '">'; ?>Supprimer</td>
 
//et on affiche l'adresse
 
      <td><?php echo  $donnees['adresse']; ?></div></td>
 
    </tr>
 
<?php } // Fin de la boucle qui liste les membres ?>
  </tbody>
</table>
 
<?php
 
//Et on n'oublie pas de refermer la connexion !
mysql_close();
 
?>

Q.C.M.

Par quoi sera rempli le champ "envoi" des utilisateurs ?
Si l'on veut qu'une case de type checkbox ou radio soit cochée par défaut, il faudra ajouter :
Qui crée le BBCode de votre site ?
Comment s'appelle le fichier en JavaScript à mettre à la racine du site pour une prévisualisation ?
Que fait-on pour remplacer le BBCode par de vraies balises xHTML sur la page de réception de la newsletter ?

On utilise des :


Image utilisateurCe tuto a été corrigé par les zCorrecteurs.
Image utilisateur

Voilà, le cours sur les newsletters se termine, j'espère vous avoir aidés. N'hésitez pas à me faire part de mes erreurs.

Modifications



Évidemment, le code que j'ai mis ici ne contient aucune mise en page : vous pouvez ajouter du code CSS pour embellir vos messages.

Si vous ne voulez pas que n'importe qui puisse utiliser votre newsletter, protégez vos pages par un mot de passe ou créez un espace membre (par Dixy).


Vous pouvez aussi ajouter d'autres champs à votre base de données comme "nom", "prénom", "âge", etc. Tout ce que vous voulez.
En ce qui concerne le BBCode, vous pouvez aussi ajouter différentes couleurs, différentes tailles à votre texte, il suffit juste de remplacer les balises BBCode à chaque fois par les bonnes balises.

Voilà ! Merci, et à bientôt !
Auteur : cyril5789
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 327 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.2659s (0.2508s)