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)
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 :
- l'id ID de type INT (10), à mettre en index par défaut et AUTO-INCREMENT ;
- l'adresse e-mail : ADRESSE de type VARCHAR (255) ;
- l'envoi ENVOI qui ne contiendra que "1" ou "0" selon le désir du membre à recevoir ou non les mails, de type TINYINT (1).
É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
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 :
Nous allons donc créer ce formulaire (que vous insérerez ensuite où vous le souhaitez sur votre site) :
Code : HTML1
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();
?>
|
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
En réalité, sur une page Web, vous devez taper :
Code : HTML
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
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
...plutôt qu'un...
Code : HTML
...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 !
Le texte est en gras ! (Ça rime en plus

).
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

, 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 : JavaScript1
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 : JavaScript1 | t=deblaie(/(\[\/centrer\])/g,t)
|
Puis on remplace
[centrer] et
[/centrer] par
<center> et
</center> :
Code : JavaScript1 | 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 !
- Le sujet
- Le texte
- On va voir comment ajouter la liste des membres avec une case devant pour envoyer, ou non, à certains membres seulement un e-mail.
- Et sans oublier le bouton submit ENVOYER
.
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 de
Under-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 : HTML1 | <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 !
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 !
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 ???
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 : PHP1
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 : PHP1
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 :
- avant la première virgule, on met le destinataire (récupéré ici de notre bdd)
- après la deuxième virgule, le sujet (ici par POST, car nous n'y avons fait aucune manipulation)
<puce>et en dernier le message (ici $message, et non par POST car nous avons fait plein d'actions sur ce message).
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 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 : PHP1 | 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();
?>
|