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)
Pour faire un système de messagerie, il faut :
- Avoir de bonnes bases en PHP,
- Savoir bien utiliser MySQL et donc les requêtes
- Avoir un esprit logique (ça aide
)
Pour créer un système de MP il va vous falloir de la patience, parce que c'est un gros gros code

, on peut le faire de deux façons :
- En une seule page (347 lignes),
- En plusieurs pages.
Personnellement je l'utilise en une seule page parce que 347 lignes c'est pas si énorme que ça, comparé à d'autres pages

. Mais si vous préférez séparer en plusieurs page ce sera facilement faisable.
Mon tuto est fait pour un espace membre (on s'en doutait pas du tout

), il utilise donc des sessions pour l'expéditeur, pour voir si le membre est connecté et c'est tout je crois

.
Si vous voulez voir quel résultat donne ce tutoriel allez voir
ici, je sais c'est moche mais c'est pas ce qui compte

, vous vous connectez avec comme identifiant soit "
test" comme pseudo et "
test" comme mot de passe, soit avec "
test2" comme pseudo et "
test" comme mot de passe.
Ensuite, vous attendez d'être redirigé et vous cliquez sur messagerie. Vous pouvez tout tester. Ensuite vous pouvez changer d'utilisateur pour savoir si les messages s'envoient correctement.
Alors allons-y

!
Table SQL
J'espère que vous savez ce qu'est une table SQL, quand même

. Sinon, retournez lire les cours de M@teo21
sur MySQL 
.
Voici la table que nous utilisons pour le système de MP :
Code : SQL 1
2
3
4
5
6
7
8
9
10
11 | CREATE TABLE `mp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sujet` varchar(255) NOT NULL DEFAULT '',
`expediteur` varchar(255) NOT NULL DEFAULT '',
`destinataire` varchar(255) NOT NULL DEFAULT '',
`message` text NOT NULL,
`timestamp` bigint(20) NOT NULL DEFAULT '0',
`vu` enum('0','1') NOT NULL DEFAULT '0',
`efface` enum('0','1','2') NOT NULL DEFAULT '0',
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
|
Explications
- id est de type int et de type auto_increment.
- sujet est de type VARCHAR(255), mais bon, si vous trouvez un sujet de 255 caractères, appelez-moi
.
- expediteur, est de type VARCHAR(255) lui aussi, même discours qu'au-dessus
.
- destinataire, de type VARCHAR(255), encore la même chose...
- message de type TEXT, donc pas de limite de taille (normal, me direz-vous
).
- timestamp de type BIGINT(20), pour pouvoir stocker un timestamp sous sa forme en secondes.
- vu, de type ENUM('0', '1'), c'est-à-dire que l'on ne peut mettre que 0 ou 1, et si on ne précise pas, ce sera zéro.
- efface, de type ENUM('0', '1', '2'), cette fois avec trois possibilités, choix par défaut : 0.
- Et puis voilà : la table SQL, ça doit être assimilé.
mp.php
On va attaquer le principal : la page
mp.php.
Tu dis que le principal c'est la page
mp.php, mais il n'y a pas d'autres pages, si ?
Si, j'utilise une autre page qui s'appelle
fonction.php, dans laquelle il y a la connexion à la base de données. D'ailleurs, on va commencer par cette page.
Finalement, c'est includes/fonction.php
Donc cette fois-ci, on est partis !
Pour ceux qui s'attendaient à un tutoriel où on donne le code en entier en bas de page, vous vous trompez d'adresse. Je donne les codes par morceau avec des explications. Il faut quand même réfléchir un minimum.
Je ne mettrai les balises d'ouverture et de fermeture de PHP (<?php et ?>) que dans le premier et le dernier code ; cependant, il y en aura dans d'autres codes pour pouvoir mettre un peu d'HTML.
Autre chose : dans votre script de connexion, il faudrait que lorsque que vous initialisiez les variables de sessions, vous ajoutiez les variables suivantes qui sont utilisées dans le code : $_SESSION['pseudo'] contient le pseudo du membre, $_SESSION['logged'] prend la valeur true quand l'utilisateur est connecté et la valeur false quand l'utilisateur est déconnecté.
Pour la page
fonction.php, je mets le code en entier

.
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 | <?php
// on crée la fonction connexion() qui réalise la connexion à la BDD
function connexion()
{
// on se connecte à MySQL
mysql_connect('votre_hote', 'votre_identifiant', 'votre_mot_de_passe');
// n sélectionne la base de données
mysql_select_db("votre_base_de_donnees");
}
// fonction redirection qui redirige vers la page donnée en paramètre, faite en Javascript
function redirection($url){
echo "<script type=\"text/javascript\">\n"
. "<!--\n"
. "\n"
. "function redirect() {\n"
. "window.location='" . html_entity_decode($url) . "'\n"
. "}\n"
. "setTimeout('redirect()','2000');\n"
. "\n"
. "// -->\n"
. "</script>\n";
}
?>
|
Et voilà, pas bien dur : je ne vais pas trop détailler, j'ai mis des commentaires exprès pour vous

.
La page mp.php
Cette fois-ci, c'est la bonne

!
On va commencer par un petit bout de code :
Code : PHP1
2
3
4
5
6
7 | <?php
// on commence par ouvrir la session
session_start();
// on inclut le fichier includes/fonction.php
require('includes/fonction.php');
// on utilise la fonction connexion définit dans includes/fonction.php
connexion();
|
Pas d'explication là-dessus.... Ah si, il faut toujours ouvrir la session en début de code, comme ici.
Ensuite, on va commencer par la première condition : est-ce que l'utilisateur est un membre connecté et quelle action veut-il faire ?
Afficher la boîte de réception
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 | // Si la session est démarrée et si les variables $_GET['mp'] et$_GET['action'] n'existent pas, alors on affiche la page
if($_SESSION['logged'] == true AND !isset($_GET['mp']) AND !isset($_GET['action']))
{
// on compte le nombre de messages non lus et dont le destinataire est le membre actuellement connecté
$nbr_non_vus = mysql_query("SELECT COUNT(*) AS nbre FROM mp WHERE destinataire='".$_SESSION['pseudo']."' AND vu='0' AND (efface='0' OR efface='2')")or die(mysql_error());
// on en fait un array
$nbre_non_vus = mysql_fetch_assoc($nbr_non_vus);
// on récupère les données sur les messages adressés au membre connecté.
$retour = mysql_query("SELECT id, sujet, expediteur, timestamp, vu FROM mp WHERE destinataire='".$_SESSION['pseudo']."' AND (efface='0' OR efface='2') ORDER BY id DESC");
?>
<table class="table">
<caption class="caption">Boîte de réception</caption>
<thead>
<th class="th"><em>Lu</em>/<strong>Non lu (<?php echo $nbre_non_vus['nbre'];?>)</strong></th>
<th class="th">Sujet</th>
<th class="th">Auteur</th>
<th class="th">Date</th>
</thead>
<tfoot>
<th class="th"><em>Lu</em>/<strong>Non lu(<?php echo $nbre_non_vus['nbre'];?>)</strong></th>
<th class="th">Sujet</th>
<th class="th">Auteur</th>
<th class="th">Date</th>
</tfoot>
<tbody>
<?php
// on crée une boucle
while($donnees = mysql_fetch_assoc($retour))
{
// on enlève les slashs inutiles qui se seraient ajoutés
$sujet = stripslashes($donnees['sujet']);
$expediteur = stripslashes($donnees['expediteur']);
$date = $donnees['timestamp'];
// si le message n'est pas lu, on le montre et on marque son sujet en gras
if($donnees['vu'] == 0)
{
// on crée une ligne sur le tableau
echo'<tr><td class="td"><strong>Non lu</strong></td><td class="td"><strong><a href="mp.php?mp='.$donnees['id'].'&action=lire">'.$sujet.'</a></strong></td><td class="td">'.$expediteur.'</td><td class="td">Le' .date('d/m/Y \à H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&suppr=1&id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
}
// sinon, on marque que le sujet a été lu, et on met en italique
else
{
// on crée une nouvelle ligne sur le tableau
echo '<tr><td class="td"><em>Lu</em></td><td class="td"><em><a href="mp.php?mp='.$donnees['id'].'&action=lire">'.$sujet.'</a></em></td><td class="td">'.$expediteur.'</td><td class="td">Le' .date('d/m/Y \ê H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&suppr=1&id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
}
}
?>
</tbody>
</table>
<p><a href="mp.php?action=LireMpRecu">Voir les messages envoyés</a>
<a href="mp.php?action=ecrire">Ecrire un nouveau message</a></p>
<?php
// on ferme la condition
}
|
C'est la première condition : elle affiche la page de la boîte de réception si les variables
$_GET['mp'] et
$_GET['action'] n'existent pas. La variable
$_GET['action'] est la variable qui définit l'action à exécuter parce que ce code n'est que sur une seule page. Si vous travaillez sur plusieurs pages, cette variable ne vous sert à rien.
On va attaquer la suite de la condition qui est l'action de lire un message (faut bien pouvoir

).
Code pour lire un message
Le code :
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 | // sinon si la variable $_GET['mp'] existe, si l'utilisateur est connecté, si la variable $_GET['action'] existe et contient 'lire' alors...
elseif(isset($_GET['mp']) AND isset($_GET['action']) AND $_GET['action'] == 'lire' AND $_SESSION['logged'] == true)
{
$id_mp = $_GET['mp'];
// on récupère les données où l'id est égale à l'id envoyée par l'URL
$retour = mysql_query("SELECT destinataire, sujet, expediteur, timestamp, message FROM mp WHERE id='".$id_mp."'")or die(mysql_error());
$donnees = mysql_fetch_assoc($retour);
// vérification pour qu'une autre personne que le destinataire ne puisse voir le message
if($donnees['destinataire'] == $_SESSION['pseudo'])
{
?>
<table class="table">
<thead>
</thead>
<tfoot>
</tfoot>
<tbody>
<?php
// on enlève les slashs inutiles
$sujet = stripslashes($donnees['sujet']);
$expediteur = stripslashes($donnees['expediteur']);
// on met la date au format Jour/mois/année à heure h minutes
$date = date('d/m/Y \à H\hi', $donnees['timestamp']);
$mp = stripslashes($donnees['message']);
// on affiche le MP
echo '<tr><td class="td"><h1>'.$sujet.'</h1></td></tr><tr><td class="td">Le '.$date.'</td></tr><tr><td class="td">De : '.$expediteur.'</td></tr><tr><td class="td">Message :<br /><br/>'.$mp.'</td></tr><tr><td class="td"><a href="mp.php?action=ecrire&reponse='.$id_mp.'">Répondre</a> <a href="mp.php?action=ecrire">Nouveau</a> <a href="mp.php">Revenir au menu de la messagerie</a></td></tr>';
// on met que le message a été lu.
mysql_query("UPDATE mp SET vu='1' WHERE id='".$id_mp."'")or die(mysql_error());
?>
</tbody>
</table>
<?php
}
else
{
// on affiche un message d'erreur si on essaye de lire un message qui n'est pas adressé à soi-même.
echo 'Ceci est un message privé qui ne s\'adresse pas à vous mais à '.$donnees['destinataire'].'';
// on ferme la condition "secondaire"
}
// on ferme la condition "primaire"
}
|
Dans ce bout de code, on affiche le message indiqué dans la boîte de réception. Une fois que le message a été lu, on modifie la valeur de
vu dans la table, on la remplace par 1. Toutefois, pour que n'importe qui ne puisse pas lire les messages des autres, il y a une petite protection

: on ne peut lire le message que si le pseudo du destinataire du MP est le même que le pseudo de session du membre.
La suite de la condition, l'action d'envoyer un message, est très pratique aussi.
Formulaire d'envoi de messages
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 | // Sinon si l'URL indique qu'on veut envoyer un nouveau message ('ecrire'), on affiche un formulaire d'envoi.
elseif(isset($_GET['action']) AND $_GET['action'] == 'ecrire' AND $_SESSION['logged'] == true)
{
// si la variable $_GET['reponse'] n'existe pas, alors c'est un nouveau message
if(!isset($_GET['reponse']))
{
?>
<form action="mp.php?action=traitement" method="post">
<label>Sujet :<input type="text" name="sujet" /></label>
<label>Destinataire :<input type="text" name="destinataire" /></label>
<label>Message :<textarea name="message" rows="10" cols="40"></textarea></label>
<input type="submit" value="Envoyer le message" />
</form>
<?php
}
// sinon, c'est une réponse
else
{
// on récupère les données du mp dont l'id est égale à celui auquel on veut répondre
$retour_reponse = mysql_query("SELECT sujet, expediteur FROM mp WHERE id='".$_GET['reponse']."'");
$donnees_reponse = mysql_fetch_assoc($retour_reponse);
?>
<form action="mp.php?action=traitement" method="post">
<!-- on met RE : devant le sujet auquel on répond -->
<label>Sujet :<input type="text" name="sujet" value="RE : <?php echo $donnees_reponse['sujet'];?>"/></label>
<label>Destinataire :<input type="text" name="destinataire" value="<?php echo $donnees_reponse['expediteur']; ?>"/></label>
<label>Message :<textarea name="message" rows="10" cols="40"></textarea></label>
<input type="submit" value="Envoyer le message" />
</form>
<?php
}
}
|
Là, c'est un simple formulaire, à part que si l'on indique que c'est une réponse, on met
RE : devant le sujet d'origine (pour indiquer que c'est une réponse). À part ça, aucun problème

?
Traitement du formulaire d'envoi de message
On va voir le code qui traite les données envoyées par le formulaire ci-dessus et les enregistre dans la BDD.
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 | // sinon si la variable $_GET['action'] est égale à 'traitement', alors on traite les données envoyées par le fomulaire
elseif(isset($_GET['action']) AND $_GET['action'] == 'traitement' AND $_SESSION['logged'] == true)
{
// si les champs "message", "sujet" et "destinataire" ne sont pas vides
if(!empty($_POST['sujet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
{
// on regarde s'il existe une entrée avec le pseudo du destinataire
$nbr_entree = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='".$_POST['destinataire']."'")or die(mysql_error());
$nbr_entrees = mysql_fetch_assoc($nbr_entree);
// s'il existe
if($nbr_entrees['nbre_entrees'] == 1)
{
// on sécurise les valeurs envoyées
$sujet = addslashes(htmlentities($_POST['sujet']));
$destinataire = addslashes(htmlentities($_POST['destinataire']));
$message = addslashes(nl2br(htmlentities($_POST['message'])));
$expediteur = $_SESSION['pseudo'];
$timestamp = time();
// on récupère le dernier message envoyé au destinataire
$retour = mysql_query("SELECT destinataire, sujet, message FROM mp WHERE expediteur='$expediteur' ORDER BY id DESC LIMIT 0,1");
$donnees = mysql_fetch_assoc($retour);
// si c'est le même que celui qu'on veut envoyer
if($donnees['destinataire'] == $destinataire AND $donnees['sujet'] == $sujet AND $donnees['message'] == $message)
{
// on ne l'enregistre pas, et on affiche un message d'erreur
echo 'Vous ne pouvez pas poster le même message 2 fois d\'affilée';
}
// sinon ce n'est pas un double post
else
{
// alors on enregistre dans la base de données
mysql_query("INSERT INTO mp(sujet, expediteur, destinataire, message, timestamp, vu, efface) VALUES('" . $sujet . "', '" . $expediteur . "', '" . $destinataire . "', '" . $message . "', '" . $timestamp . "', '0', '0')")or die(mysql_error());
// on met un message
echo 'Votre message a bien été envoyé à '.$destinataire.'. Vous allez être redirigé vers votre boîte de réception dans une seconde.';
// et on redirige vers la boîte de réception
redirection('mp.php');
}
}
// sinon le membre n'est pas enregistré dans la table
else
{
// alors on affiche un message d'erreur
echo 'Le membre à qui vous souhaitez envoyer ce message n\'existe pas/plus. Vous allez être redirigé vers votre boîte de réception dans 2 secondes';
// et on redirige vers la boîte de réception
redirection('mp.php');
}
}
// sinon tous les champs ne sont pas remplis
else
{
// alors on affiche un message d'erreur et un lien
echo 'Vous devez remplir tout les champs. <a href="mp.php?action=ecrire">Recommencer</a>.';
}
}
|
Là, il y a plusieurs conditions :
- une qui vérifie si tous les champs ont été remplis ;
- une qui vérifie si le destinataire existe ;
- et une qui vérifie si ce n'est pas un double post.
Si ces trois conditions sont vérifiées, alors on enregistre le message dans la base de données. Sinon, on affiche des messages d'erreur.
Boîte d'envoi
Ici, on va mettre un code qui permet de voir les messages qu'on a envoyés.
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 | // sinon si la variable $_Get['action'] est égale à 'LireMpRecu', on affiche la boîte d'envoi
elseif($_GET['action'] == 'LireMpRecu' AND $_SESSION['logged'] == true AND !isset($_GET['mp']))
{
// on récupère les messages qu'on a envoyés et que l'on n'a pas supprimés
$retour = mysql_query("SELECT id, destinataire, sujet, timestamp FROM mp WHERE expediteur='".$_SESSION['pseudo']."' AND (efface='0' OR efface='1') ORDER BY id DESC")or die(mysql_error());
?>
<table class="table">
<caption class="caption">Messages envoyés</caption>
<thead>
<th class="th">Sujet</th>
<th class="th">Destinataire</th>
<th class="th">Date</th>
</thead>
<tfoot>
<th class="th">Sujet</th>
<th class="th">Destinataire</th>
<th class="th">Date</th>
</tfoot>
<tbody>
<?php
// on crée une boucle avec les entrées de la table
while($donnees = mysql_fetch_assoc($retour))
{
// on enlève les éventuels slashs superflus
$sujet = stripslashes($donnees['sujet']);
$destinataire = stripslashes($donnees['destinataire']);
$date = $donnees['timestamp'];
// on ajoute une ligne au tableau pour chaque message
echo'<tr><td class="td"><a href="mp.php?mp='.$donnees['id'].'&action=lire">'.$sujet.'</a></td><td class="td">'.$destinataire.'</td><td class="td">Le' .date('d/m/Y \à H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&suppr=2&id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
// on ferme la boucle
}
?>
</tbody>
</table>
<p><a href="mp.php">Boîte de réception</a>
<a href="mp.php?action=ecrire">Ecrire un nouveau message</a></p>
<?php
// on ferme la condition
}
|
Dans ce morceau de code, on affiche les messages que l'on a envoyés et qu'on n'a pas supprimés de la boîte d'envoi. On ajoute une ligne au tableau pour chaque message avec un lien pour lire le message. Il est assez simple à comprendre.
Suppression de message
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 | // si la variable $_GET['id'] qui contient l'id du message existe, si la variable $_GET['suppr'] qui indique qui a supprimé le message (destinataire ou expéditeur) existe et si le variable $_GET['action'] est égale à 'supprimer' qui indique la suppression d'un message, alors on le supprime.
elseif(isset($_GET['action']) AND isset($_GET['suppr']) AND isset($_GET['id']) AND $_GET['action'] == 'supprimer')
{
$id = $_GET['id'];
// si c'est l'expéditeur qui supprime le message
if($_GET['suppr'] == 2)
{
// alors on récupère les données où l'id du message à supprimer est égale à l'id d'un message
$retour = mysql_query("SELECT expediteur, efface FROM mp WHERE id='".$id."'")or die(mysql_error());
// on les met dans un array
$donnees = mysql_fetch_assoc($retour);
// si l'expéditeur est bien le membre qui veut supprimer le message
if($_SESSION['pseudo'] == $donnees['expediteur'])
{
// et si le message a déjà été supprimé par le destinataire
if($donnees['efface'] == 1)
{
// on supprime l'entrée correspondante de la table
mysql_query("DELETE FROM mp WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
redirection('mp.php');
}
// sinon si le message n'a pas été supprimé par le destinataire
elseif($donnees['efface'] == 0)
{
// alors on modifie le champ efface par 2 pour que le destinataire puisse encore voir le message
mysql_query("UPDATE mp SET efface='2' WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
redirection('mp.php');
}
// sinon
else
{
// on affiche un message d'erreur
echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultèrieurement.';
}
}
// sinon, le membre qui veut supprimer le message n'est pas l'expéditeur
else
{
// donc on affiche un message d'erreur
echo 'Vous ne pouvez pas supprimer un message que vous n\'avez pas envoyé vous-même.';
}
}
// sinon si c'est le destinataire qui veut supprimer un message
elseif($_GET['suppr'] == 1)
{
// on récupère les données sur le message que l'on veut supprimer
$retour = mysql_query("SELECT destinataire, efface FROM mp WHERE id='".$id."'")or die(mysql_error());
// on les met dans un array
$donnees = mysql_fetch_assoc($retour);
// si le destinataire du message est bien le membre qui veut supprimer le message
if($_SESSION['pseudo'] == $donnees['destinataire'])
{
// et si le message a été supprimé par l'expéditeur
if($donnees['efface'] == 2)
{
// alors on supprime l'entrée correspondante de la table
mysql_query("DELETE FROM mp WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
redirection('mp.php');
}
// sinon si le message n'a pas été supprimé par l'expéditeur
elseif($donnees['efface'] == 0)
{
// alors on modifie la valeur de efface par 1 pour que l'expéditeur puisse encore voir le message
mysql_query("UPDATE mp SET efface='1' WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
//et on redirige
redirection('mp.php');
}
// sinon
else
{
// on affiche un message d'erreur
echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultèrieurement.';
}
}
// sinon le membre qui veut supprimer le message n'est pas le destinataire de celui-ci
else
{
// donc on affiche un message d'erreur
echo 'Vous ne pouvez pas supprimer un message qui ne vous a pas été envoyé.';
}
}
|
Dans ce code, on a trois variables
$_GET[''] :
- $_GET['action'] qui définit l'action ;
- $_GET['suppr'] qui définit qui supprime le message (2 = expéditeur, 1 = destinataire) ;
- $_GET['id'] qui contient l'id du message à supprimer.
D'abord, on regarde si c'est l'expéditeur ou le destinataire qui veut supprimer le message ; ensuite, on vérifie si le message à supprimer a bien été reçu / envoyé par le membre qui demande sa suppression ; après, si le champ
efface de la table
mp n'est pas a zéro mais à 1 (si c'est l'expéditeur qui supprime le message) ou à 2 (si c'est le destinataire qui supprime le message), ça veut dire que le destinataire / expéditeur a déjà supprimé le message de son côté, on supprime donc l'entrée correspondante au message ; sinon, s'il est à zéro, on modifie par 2 ou 1 (2 = supprimé par l'expéditeur, 1 = supprimé par le destinataire). Enfin, on affiche des messages d'erreur si les conditions ne sont pas remplies.
Fin du code
Ouais, on y arrive : c'est le dernier petit bout de code

.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | // sinon l'action demandée n'existe pas($_GET['action'])
else
{
// alors on affiche un message d'erreur
echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultérieurement.';
}
}
// sinon on met un message d'erreur qui envoie un lien pour se connecter.
else
{
echo 'Vous n\'êtes pas connecté ou une erreur est survenue lors de votre demande ; veuillez recommencer ultérieurement.<a href="connexion.php">Se connecter</a>';
}
mysql_close();
?>
|
Là, on ferme tout simplement la condition qui cherche l'action demandée à travers
$_GET['action'] ; si elle n'existe pas, on met un message d'erreur. Ensuite, on ferme la condition qui vérifie si le membre est connecté : s'il ne l'est pas, alors on met un message d'erreur, on n'oublie surtout pas de fermer la connexion à mysql et on ferme PHP.
Et j'ai envie de dire que le code est terminé !
Je vais juste lister des améliorations qui me traversent l'esprit. Si vous en trouvez d'autres qui sont possibles, mettez les dans les commentaires et j'éditerais le tuto :
- Pouvoir voir le message d'origine et les réponses envoyées au message qu'on lit (comme sur le SDZ)
- Pouvoir avoir une conversation privé (à plusieurs)
- Un système pour rechercher les noms des membres dans la base de donnée (une petite fenêtre avec un formulaire de recherche)
- Parser un peu pour offrir de la mise en forme aux utilisateurs (comme le zCode)
- Et surtout optimiser ce script (je suis sûr que c'est possible
)
Et le tutorial est maintenant entièrement fini. Si vous avez lu jusque là et que vous avez tout compris bravo

.
Il n'y a pas de QCM parce que tous les codes qui sont utilisés dans ce tutorial sont expliqués dans les cours de M@teo21. Cependant, si jamais vous ne trouvez pas comment fonctionne une fonction, n'oubliez pas que la
documentation PHP est là pour vous

.