Je vous ai montré comment créer un système de messagerie privée interne à votre site dans un précédent tuto... Je vous propose donc une suite à cette vidéo histoire d'y ajouter quelques fonctionnalité :-)
Code du tuto:
- 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 = ? ORDER BY id DESC');
$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="profil.php?id=<?= $_SESSION['id'] ?>">Profil</a> <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'];
?>
<a href="lecture.php?id=<?= $m['id'] ?>"<?php if($m['lu'] == 1) { ?><span style="color:grey"><?php } ?><b><?= $p_exp ?></b> vous a envoyé un message<br />
<b>Objet:</b> <?= $m['objet'] ?><?php if($m['lu'] == 1) { ?></span><?php } ?></a><br />
-------------------------------------<br/>
<?php } ?>
</body>
</html>
<?php } ?>
- 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'],$_POST['objet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']) AND !empty($_POST['objet'])) {
$destinataire = htmlspecialchars($_POST['destinataire']);
$message = htmlspecialchars($_POST['message']);
$objet = htmlspecialchars($_POST['objet']);
$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,objet) VALUES (?,?,?,?)');
$ins->execute(array($_SESSION['id'],$id_destinataire,$message,$objet));
$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');
if(isset($_GET['r']) AND !empty($_GET['r'])) {
$r = htmlspecialchars($_GET['r']);
}
if(isset($_GET['o']) AND !empty($_GET['o'])) {
$o = urldecode($_GET['o']);
$o = htmlspecialchars($_GET['o']);
if(substr($o,0,3) != 'RE:') {
$o = "RE:".$o;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Envoi de message</title>
<meta charset="utf-8" />
</head>
<body>
<form method="POST">
<!-- <select name="destinataire">
<?php while($d = $destinataires->fetch()) { ?>
<option><?= $d['pseudo'] ?></option>
<?php } ?>
</select> -->
<label>Destinataire:</label>
<input type="text" name="destinataire" <?php if(isset($r)) { echo 'value="'.$r.'"'; } ?> />
<br /><br />
<label>Objet:</label>
<input type="text" name="objet" <?php if(isset($o)) { echo 'value="'.$o.'"'; } ?> />
<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
}
?>
- lecture.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($_GET['id']) AND !empty($_GET['id'])) {
$id_message = intval($_GET['id']);
$msg = $bdd->prepare('SELECT * FROM messages WHERE id = ? AND id_destinataire = ?');
$msg->execute(array($_GET['id'],$_SESSION['id']));
$msg_nbr = $msg->rowCount();
$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'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Lecture du message #<?= $id_message ?></title>
<meta charset="utf-8" />
</head>
<body>
<a href="reception.php">Boîte de réception</a> <a href="envoi.php?r=<?= $p_exp ?>&o=<?= urlencode($m['objet']) ?>">Répondre</a> <a href="supprimer.php?id=<?= $m['id'] ?>">Supprimer</a><br /><br /><br />
<h3 align="center">Lecture du message #<?= $id_message ?></h3>
<div align="center">
<?php if($msg_nbr == 0) { echo "Erreur"; } else { ?>
<b><?= $p_exp ?></b> vous a envoyé: <br /><br />
<b>Objet:</b> <?= $m['objet'] ?>
<br /><br />
<?= nl2br($m['message']) ?><br />
<?php } ?>
</div>
</body>
</html>
<?php
$lu = $bdd->prepare('UPDATE messages SET lu = 1 WHERE id = ?');
$lu->execute(array($m['id']));
}
}
?>
- supprimer.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($_GET['id']) AND !empty($_GET['id'])) {
$id_message = intval($_GET['id']);
$msg = $bdd->prepare('DELETE FROM messages WHERE id = ? AND id_destinataire = ?');
$msg->execute(array($_GET['id'],$_SESSION['id']));
header('Location:reception.php');
}
}
?>
Pour aller plus loin:
- Création d'une page "messages envoyés"
- Ajouter la date et l'heure d'envoie du message
- Possibilité d'envoyer un message privé à plusieurs personnes en même temps
- Possibilité d'ajouter une pièce jointe à un message
Bien sûr il reste encore beaucoup d'autres fonctionnalités et améliorations possibles, je vous laisse proposer les votre en commentaire 😛
Votre commentaire