• Aucun résultat trouvé

Traitement des mp

Dans le document Créer son forum de toutes pièces (Page 74-80)

Avant de poursuivre, il va falloir que vous ressortiez la page postok.php. Si vous regardez, vous allez vous rendre compte que tout est articulé autour d'un switch. Il va donc nous suffire d'ajouter 2 cas : 1 pour la réponse du mp, et l'autre pour les nouveaux mp.

Voilà comment on va faire : Code : PHP

<?php

case "repondremp": //Si on veut répondre //On récupère le titre et le message $message = $_POST['message'];

$titre = $_POST['titre'];

$temps = time();

//On récupère la valeur de l'id du destinataire $dest = (int) $_GET['dest'];

//Enfin on peut envoyer le message

$query=$db->prepare('INSERT INTO forum_mp

(mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES(:id, :dest, :titre, :txt, :tps, '0')');

$query->bindValue(':id',$id,PDO::PARAM_INT);

$query->bindValue(':dest',$dest,PDO::PARAM_INT);

$query->bindValue(':titre',$titre,PDO::PARAM_STR);

$query->bindValue(':txt',$message,PDO::PARAM_STR);

$query->bindValue(':tps',$temps,PDO::PARAM_INT);

$query->execute();

$query->CloseCursor();

echo'<p>Votre message a bien été envoyé!<br />

<br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />

<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner à la messagerie</p>';

break;

?>

C'est tout classiquement une page de traitement basique, on récupère les données, et on les insère dans la base de données.

Vous avez sûrement fait ça des dizaines de fois.

La partie suivante va demander un peu plus de vérification, parce qu'il faut s'assurer que le nom entré correspond bien à celui d'un utilisateur.

Code : PHP

<?php

case "nouveaump": //On envoie un nouveau mp //On récupère le titre et le message

$message = $_POST['message'];

$titre = $_POST['titre'];

$temps = time();

$dest = $_POST['to'];

//On récupère la valeur de l'id du destinataire //Il faut déja vérifier le nom

$query=$db->prepare('SELECT membre_id FROM forum_membres WHERE LOWER(membre_pseudo) = :dest');

$query->bindValue(':dest',strotolower($dest),PDO::PARAM_STR);

$query->execute();

if($data = $query->fetch()) {

$query=$db->prepare('INSERT INTO forum_mp

(mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu) VALUES(:id, :dest, :titre, :txt, :tps, :lu)');

$query->bindValue(':id',$id,PDO::PARAM_INT);

$query->bindValue(':dest',(int)

$data['membre_id'],PDO::PARAM_INT);

$query->bindValue(':titre',$titre,PDO::PARAM_STR);

$query->bindValue(':txt',$message,PDO::PARAM_STR);

$query->bindValue(':tps',$temps,PDO::PARAM_INT);

$query->bindValue(':lu','0',PDO::PARAM_STR);

$query->execute();

$query->CloseCursor();

echo'<p>Votre message a bien été envoyé!

<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du

forum<br />

<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner àla messagerie</p>';

}

//Sinon l'utilisateur n'existe pas ! else

{

echo'<p>Désolé ce membre n existe pas, veuillez vérifier et réessayez à nouveau.</p>';

} break;

?>

Voilà . La vérification se fait de la façon suivante : on lance la requête avec le nom donné par l'expéditeur. S'il n'y a aucun problème, on affiche la suite, sinon un message d'erreur, et on recommence.

A partir de maintenant, vous pouvez sans problème poster de nouveaux mp à n'importe qui. Il nous reste à voir comment supprimer un mp de sa boîte.

Suppression d'un mp

Ça doit sûrement vous paraître étrange d'aborder ceci dans cette partie, mais c'est le plus pratique, finalement.

Il s'agit donc simplement de supprimer un mp de sa boîte en cliquant sur un lien contenant l'id du mp, et également une variable appelée sur. Celle-ci va permettre de distinguer 2 cas : dans le premier, on a cliqué sur "supprimer", mais peut-être par erreur... Il serait un peu cruel de virer directement le message : donc, on redemande, puis enfin on exécute la suppression.

Code : PHP

<?php

case "supprimer":

//On récupère la valeur de l'id $id_mess = (int) $_GET['id'];

//Il faut vérifier que le membre est bien celui qui a reçu le message

$query=$db->prepare('SELECT mp_receveur FROM forum_mp WHERE mp_id = :id');

$query->bindValue(':id',$id_mess,PDO::PARAM_INT);

$query->execute();

$data = $query->fetch();

//Sinon la sanction est terrible :p

if ($id != $data['mp_receveur']) erreur(ERR_WRONG_USER);

$query->CloseCursor();

//2 cas pour cette partie : on est sûr de supprimer ou alors on

ne l'est pas

$sur = (int) $_GET['sur'];

//Pas encore certain if ($sur == 0)

{

echo'<p>Etes-vous certain de vouloir supprimer ce message ?<br />

$query=$db->prepare('DELETE from forum_mp WHERE mp_id = :id');

$query->bindValue(':id',$id_mess,PDO::PARAM_INT);

$query->execute();

$query->CloseCursor();

echo'<p>Le message a bien été supprimé.<br />

Cliquez <a href="./messagesprives.php">ici</a> pour revenir à la boite

de messagerie.</p>';

} break;

?>

On est arrivés au bout. Vous avez remarqué qu'il faut encore une fois vérifier que le membre qui demande la suppression est bien celui qui a reçu le mp. Dans le cas contraire, n'importe qui en modifiant simplement l'id du message pourrait s'en débarrasser.

La boîte de Mp

On arrive à la fin du switch : il va falloir définir ce qu'on affichera par défaut. Pour cela, j'ai décidé de mettre la boîte de

messagerie, mais après tout, vous pouvez aussi en faire une partie à elle seule. C'est vraiment comme vous le sentez . Quoi qu'il en soit, voilà ce que j'ai fait :

Code : PHP

<?php

//Si rien n'est demandé ou s'il y a une erreur dans l'url //On affiche la boite de mp.

default;

echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->

<a href="./messagesprives.php">Messagerie privée</a>';

echo '<h1>Messagerie Privée</h1><br /><br />';

$query=$db->prepare('SELECT mp_lu, mp_id, mp_expediteur, mp_titre, mp_time, membre_id, membre_pseudo

FROM forum_mp

LEFT JOIN forum_membres ON forum_mp.mp_expediteur = forum_membres.membre_id WHERE mp_receveur = :id ORDER BY mp_id DESC');

$query->bindValue(':id',$id,PDO::PARAM_INT);

$query->execute();

echo'<p><a href="./messagesprives.php?action=nouveau">

<img src="./images/nouveau.gif" alt="Nouveau" title="Nouveau message" />

</a></p>';

if ($query->rowCount()>0) {

?>

<table>

<tr>

<th></th>

<th class="mp_titre"><strong>Titre</strong></th>

<th class="mp_expediteur"><strong>Expéditeur</strong></th>

<th class="mp_time"><strong>Date</strong></th>

<th><strong>Action</strong></th>

echo'<td><img src="./images/message_non_lu.gif" alt="Non lu"

/></td>';

}

else //sinon une autre icone {

echo'<td><img src="./images/message.gif" alt="Déja lu" /></td>';

}

<td id="mp_time">'.date('H\hi \l\e d M Y',$data['mp_time']).'</td>

<td>

<a href="./index.php">ici</a> pour revenir à la page d index</p>';

}

Tout d'abord, on lance une requête qui récupère des infos sur les messages qu'on a reçus. Une simple jointure nous permet d'obtenir par la même occasion le nom de l'expéditeur.

Vous remarquez qu'ici on n'a pas besoin de vérifier que l'id du membre qui consulte la messagerie est bien la bonne : en effet, on utilise la variable $id pour savoir ce qui va s'afficher.

Par la suite, il s'agit d'une boucle, et d'un tableau qui se remplit le plus classiquement possible . C'est bon, le système de messagerie privée est entièrement mis en place.

Il reste toutefois une remarque à faire : sur le Site du Zér0, vous avez vu que les mp prennent la forme d'un topic où jusqu'à 6 personnes peuvent discuter (cela dit, vous pouvez en ajouter autant que vous voulez ). Si vous voulez faire la même chose, ce n'est pas très compliqué : il suffit pour cela de reprendre les méthodes utilisées pour les topics. Il va donc falloir reprendre un peu la structure de la base de données.

Ça fait un peu de boulot, mais le résultat en vaut vraiment la peine, et puis le script n'est pas très compliqué, il suffit d'avoir compris les jointures et c'est réglé.

On est arrivés par la même occasion au bout des pages membres, et il est temps à présent de s'attaquer aux pages d'administration !

Partie 2 : Les pages administration

On va voir maintenant les pages d'administration.

Dans le document Créer son forum de toutes pièces (Page 74-80)