Je vous propose de voir comment créer un système très basique de messagerie privée qui sera bien sûr à améliorer à votre guise ! Si vous voulez un tuto plus poussé sur l'envoie de messages privés en PHP n'hésitez pas à me le demander dans les commentaires et je ferai une deuxième vidéo là-dessus ;-)
Code du tuto:
- envoi.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
if(isset($_POST['envoi_message'])) {
if(isset($_POST['destinataire'],$_POST['message']) AND !empty($_POST['destinataire']) AND !empty($_POST['message'])) {
$destinataire = htmlspecialchars($_POST['destinataire']);
$message = htmlspecialchars($_POST['message']);
$id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
$id_destinataire->execute(array($destinataire));
$dest_exist = $id_destinataire->rowCount();
if($dest_exist == 1) {
$id_destinataire = $id_destinataire->fetch();
$id_destinataire = $id_destinataire['id'];
$ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
$ins->execute(array($_SESSION['id'],$id_destinataire,$message));
$error = "Votre message a bien été envoyé !";
} else {
$error = "Cet utilisateur n'existe pas...";
}
} else {
$error = "Veuillez compléter tous les champs";
}
}
$destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
?>
<!DOCTYPE html>
<html>
<head>
<title>Envoi de message</title>
<meta charset="utf-8" />
</head>
<body>
<form method="POST">
<label>Destinataire:</label>
<!-- <select name="destinataire">
<?php while($d = $destinataires->fetch()) { ?>
<option><?= $d['pseudo'] ?></option>
<?php } ?>
</select> -->
<input type="text" name="destinataire" />
<br /><br />
<textarea placeholder="Votre message" name="message"></textarea>
<br /><br />
<input type="submit" value="Envoyer" name="envoi_message" />
<br /><br />
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } ?>
</form>
<br />
<a href="reception.php">Boîte de réception</a>
</body>
</html>
<?php
}
?>
- reception.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
$msg = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire = ?');
$msg->execute(array($_SESSION['id']));
$msg_nbr = $msg->rowCount();
?>
<!DOCTYPE html>
<html>
<head>
<title>Boîte de réception</title>
<meta charset="utf-8" />
</head>
<body>
<a href="envoi.php">Nouveau message</a><br /><br /><br />
<h3>Votre boîte de réception:</h3>
<?php
if($msg_nbr == 0) { echo "Vous n'avez aucun message..."; }
while($m = $msg->fetch()) {
$p_exp = $bdd->prepare('SELECT pseudo FROM membres WHERE id = ?');
$p_exp->execute(array($m['id_expediteur']));
$p_exp = $p_exp->fetch();
$p_exp = $p_exp['pseudo'];
?>
<b><?= $p_exp ?></b> vous a envoyé: <br />
<?= nl2br($m['message']) ?><br />
-------------------------------------<br/>
<?php } ?>
</body>
</html>
<?php } ?>
Quelques idées pour aller plus loin:
- Création d'une page de lecture pour lire chaque message individuellement
- Ajout de l'heure et date d'envoi du message, d'un objet, d'un système de pièces jointes,...
- Possibilité de répondre directement à un message
- Possibilité d'envoyer un message privé à plusieurs personnes en même temps
- Faire une distinction entre les messages lus et non lus (exemple: ajout d'un champ "lu" dans la table "messages", lorsque l'on clique sur un message, la valeur "lu" de ce message passe à "1", et celui-ci est donc considéré comme ayant été lu)
- Je vous laisse proposer d'autres améliorations dans les commentaires 😛
Pour ceux qui ont envie d'approfondir un peu dans les messages privés, j'ai fais cette vidéo sur les messages privés avancés histoire d'ajouter quelques fonctionnalités :-)
Votre commentaire