Poster.php
<?php
session_start();
$titre="Poster";
$balises = true;
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
include("includes/auth-data_bd.php");
?>
<?php
//Qu'est ce qu'on veut faire ? poster, répondre ou éditer ?
$action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
connexion_bd();
//Il faut être connecté pour poster !
//on va chercher tout ce qui correspond à l'utilisateur
$affiche = mysql_query("SELECT * FROM LOGIN WHERE pseudo='".mysql_real_escape_string(stripcslashes($_SESSION['pseudo']))."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."'");
$result = mysql_fetch_assoc($affiche);
//si le statut ne retourne pas 1,2 ou 3, ce n'est pas un membre..on éjecte l'utilisateur
if(mysql_num_rows($affiche) == 0)
{
echo 'Il faut être connecté pour poster.<script type="text/javascript"> window.setTimeout("location=(\'index.php?dec=close\');",3000) </script>'; return false;
}
close_bd();
//Si on veut poster un nouveau topic, la variable f se trouve dans l'url,
//On récupère certaines valeurs
if (isset($_GET['f']))
{
$forum = (int) $_GET['f'];
$query= $db->prepare('SELECT forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
FROM forum_forum WHERE forum_id =:forum');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
<a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
--> Nouveau topic</p>';
}
//Sinon c'est un nouveau message, on a la variable t et
//On récupère f grâce à une requête
elseif (isset($_GET['t']))
{
$topic = (int) $_GET['t'];
$query=$db->prepare('SELECT topic_titre, forum_topic.forum_id,
forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
FROM forum_topic
LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
WHERE topic_id =:topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$forum = $data['forum_id'];
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
<a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
--> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
--> Répondre</p>';
}
//Enfin sinon c'est au sujet de la modération(on verra plus tard en détail)
//On ne connait que le post, il faut chercher le reste
elseif (isset ($_GET['p']))
{
$post = (int) $_GET['p'];
$query=$db->prepare('SELECT post_createur, forum_post.topic_id, topic_titre, forum_topic.forum_id,
forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
FROM forum_post
LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
WHERE forum_post.post_id =:post');
$query->bindValue(':post',$post,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$topic = $data['topic_id'];
$forum = $data['forum_id'];
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
<a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
--> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
--> Modérer un message</p>';
}
$query->CloseCursor();
?>
<?php
switch($action)
{
case "repondre": //Premier cas on souhaite répondre
?>
<h1>Poster une réponse</h1>
<form method="post" action="postok.php?action=repondre&t=<?php echo $topic ?>" name="formulaire">
<fieldset><legend>Mise en forme</legend>
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(' <img src="https://static.lephpfacile.com/img/smiley/icon_lol.gif" alt="smiley" class="smiley" /> ');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" />
</fieldset>
<fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset>
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer"/>
</p></form>
<?php
break;
case "nouveautopic":
?>
<h1>Nouveau topic</h1>
<p>Auteur : <?php echo($pseudo); ?> </p>
<form method="post" action="postok.php?action=nouveautopic&f=<?php echo $forum ?>" name="formulaire">
<fieldset><legend>Titre</legend>
<input type="text" size="80" id="titre" name="titre" /></fieldset>
<fieldset><legend>Mise en forme</legend>
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies('<img src="https://static.lephpfacile.com/img/smiley/icon_lol.gif" alt="smiley" class="smiley" />');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset>
<fieldset><legend>Message</legend>
<textarea cols="80" rows="8" id="message" name="message"></textarea>
<label><input type="radio" name="mess" value="Annonce" />Annonce</label>
<label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label>
</fieldset>
<p>
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer" /></p>
</form>
<?php
break;
//D'autres cas viendront s'ajouter ici par la suite
?>
<?php
default: //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
echo'<p>Cette action est impossible</p>';
} //Fin du switch
?>
</div>
</body>
</html>
postok.php
<?php
session_start();
$titre="Poster";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
include("includes/auth-data_bd.php");
//On récupère la valeur de la variable action
$action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';
// Si le membre n'est pas connecté, il est arrivé ici par erreur
//on va chercher tout ce qui correspond à l'utilisateur
connexion_bd();
$affiche = mysql_query("SELECT * FROM LOGIN WHERE pseudo='".mysql_real_escape_string(stripcslashes($_SESSION['pseudo']))."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."'");
$result = mysql_fetch_assoc($affiche);
//si le statut ne retourne pas 2, ce n'est pas un admin..on éjecte l'utilisateur
if(mysql_num_rows($affiche) == 0)
{
echo 'Il faut être connecté pour poster.<script type="text/javascript"> window.setTimeout("location=(\'index.php?dec=close\');",3000) </script>'; return false;
}
close_bd();
switch($action)
{
//Premier cas : nouveau topic
case "nouveautopic":
//On passe le message dans une série de fonction
$message = $_POST['message'];
$mess = $_POST['mess'];
//Pareil pour le titre
$titre = $_POST['titre'];
//ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f
$forum = (int) $_GET['f'];
$temps = time();
if (empty($message) || empty($titre))
{
echo'<p>Votre message ou votre titre est vide,
cliquez <a href="./poster.php?action=nouveautopic&f='.$forum.'">ici</a> pour recommencer</p>';
}
else //Si jamais le message n'est pas vide
{
//On entre le topic dans la base de donnée en laissant
//le champ topic_last_post à 0
$query=$db->prepare('INSERT INTO forum_topic
(forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre)
VALUES(:forum, :titre, :id, 1, :temps, :mess)');
$query->bindValue(':forum', $forum, PDO::PARAM_INT);
$query->bindValue(':titre', $titre, PDO::PARAM_STR);
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->bindValue(':temps', $temps, PDO::PARAM_INT);
$query->bindValue(':mess', $mess, PDO::PARAM_STR);
$query->execute();
$nouveautopic = $db->lastInsertId(); //Notre fameuse fonction !
$query->CloseCursor();
//Puis on entre le message
$query=$db->prepare('INSERT INTO forum_post
(post_createur, post_texte, post_time, topic_id, post_forum_id)
VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->bindValue(':mess', $message, PDO::PARAM_STR);
$query->bindValue(':temps', $temps,PDO::PARAM_INT);
$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
$query->bindValue(':forum', $forum, PDO::PARAM_INT);
$query->execute();
$nouveaupost = $db->lastInsertId(); //Encore notre fameuse fonction !
$query->CloseCursor();
//Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
$query=$db->prepare('UPDATE forum_topic
SET topic_last_post = :nouveaupost,
topic_first_post = :nouveaupost
WHERE topic_id = :nouveautopic');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
$query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Enfin on met à jour les tables forum_forum et forum_membres
$query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1,
forum_last_post_id = :nouveaupost
WHERE forum_id = :forum');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
$query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
$query=$db->prepare('UPDATE LOGIN SET post = post + 1 WHERE id = :id');
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Et un petit message
echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
}
break; //Houra !
//Deuxième cas : répondre
case "repondre":
$message = $_POST['message'];
//ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable t
$topic = (int) $_GET['t'];
$temps = time();
if (empty($message))
{
echo'<p>Votre message est vide, cliquez <a href="./poster.php?action=repondre&t='.$topic.'">ici</a> pour recommencer</p>';
}
else //Sinon, si le message n'est pas vide
{
//On récupère l'id du forum
$query=$db->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic');
$query->bindValue(':topic', $topic, PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$forum = $data['forum_id'];
//Puis on entre le message
$query=$db->prepare('INSERT INTO forum_post
(post_createur, post_texte, post_time, topic_id, post_forum_id)
VALUES(:id,:mess,:temps,:topic,:forum)');
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->bindValue(':mess', $message, PDO::PARAM_STR);
$query->bindValue(':temps', $temps, PDO::PARAM_INT);
$query->bindValue(':topic', $topic, PDO::PARAM_INT);
$query->bindValue(':forum', $forum, PDO::PARAM_INT);
$query->execute();
$nouveaupost = $db->lastInsertId();
$query->CloseCursor();
//On change un peu la table forum_topic
$query=$db->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
$query->bindValue(':topic', (int) $topic, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Puis même combat sur les 2 autres tables
$query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 , forum_last_post_id = :nouveaupost WHERE forum_id = :forum');
$query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
$query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
$query=$db->prepare('UPDATE LOGIN SET post = post + 1 WHERE id = :id');
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Et un petit message
$nombreDeMessagesParPage = 15;
$nbr_post = $data['topic_post']+1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo'<p>Votre message a bien été ajouté!<br /><br />
Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
Cliquez <a href="./voirtopic.php?t='.$topic.'&page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
}//Fin du else
break;
default;
echo'<p>Cette action est impossible</p>';
} //Fin du Switch
?>
</div>
</body>
</html>
voirforum.php
<?php
session_start();
$titre="Voir un forum";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
//On récupère la valeur de f
$forum = (int) $_GET['f'];
//A partir d'ici, on va compter le nombre de messages
//pour n'afficher que les 25 premiers
$query=$db->prepare('SELECT forum_name, forum_topic, auth_view, auth_topic FROM forum_forum WHERE forum_id = :forum');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$totalDesMessages = $data['forum_topic'] + 1;
$nombreDeMessagesParPage = 25;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8" />
<meta http-equiv="Content-Language" content="fr" />
<title>Forum</title>
<link type="text/css" href="design.css" rel="stylesheet"/>
</head>
<body>
<?php
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
<a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>';
//Nombre de pages
$page = (isset($_GET['page']))?intval($_GET['page']):1;
//On affiche les pages 1-2-3, etc.
echo '<p>Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
if ($i == $page) //On ne met pas de lien sur la page actuelle
{
echo $i;
}
else
{
echo '
<a href="voirforum.php?f='.$forum.'&page='.$i.'">'.$i.'</a>';
}
}
echo '</p>';
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
//Le titre du forum
echo '<h1>'.stripslashes(htmlspecialchars($data['forum_name'])).'</h1><br /><br />';
//Et le bouton pour poster
echo'<a href="./poster.php?action=nouveautopic&f='.$forum.'">
<img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
$query->CloseCursor();
?>
<?php
//On prend tout ce qu'on a sur les Annonces du forum
$query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post,
Mb.pseudo AS pseudo_createur, post_createur, post_time, Ma.pseudo AS pseudo_last_posteur, post_id FROM forum_topic
LEFT JOIN LOGIN Mb ON Mb.id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN LOGIN Ma ON Ma.id = forum_post.post_createur
WHERE topic_genre = "Annonce" AND forum_topic.forum_id = :forum
ORDER BY topic_last_post DESC');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
?>
<?php
//On lance notre tableau seulement s'il y a des requêtes !
if ($query->rowCount()>0)
{
?>
<table>
<tr>
<th><img src="./images/annonce.gif" alt="Annonce" /></th>
<th class="titre"><strong>Titre</strong></th>
<th class="nombremessages"><strong>Réponses</strong></th>
<th class="nombrevu"><strong>Vus</strong></th>
<th class="auteur"><strong>Auteur</strong></th>
<th class="derniermessage"><strong>Dernier message</strong></th>
</tr>
<?php
//On commence la boucle
while ($data=$query->fetch())
{
//Pour chaque topic :
//Si le topic est une annonce on l'affiche en haut
//mega echo de bourrain pour tout remplir
echo'<tr><td><img src="./images/annonce.gif" alt="Annonce" /></td>
<td id="titre"><strong>Annonce : </strong>
<strong><a href="./voirtopic.php?t='.$data['topic_id'].'"
title="Topic commencé à
'.date('H\hi \l\e d M,y',$data['topic_time']).'">
'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a></strong></td>
<td class="nombremessages">'.$data['topic_post'].'</td>
<td class="nombrevu">'.$data['topic_vu'].'</td>
<td><a href="./voirprofil.php?m='.$data['topic_createur'].'
&action=consulter">
'.stripslashes(htmlspecialchars($data['pseudo_createur'])).'</a></td>';
//Selection dernier message
$nombreDeMessagesParPage = 15;
$nbr_post = $data['topic_post'] +1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo '<td class="derniermessage">Par
<a href="./voirprofil.php?m='.$data['post_createur'].'
&action=consulter">
'.stripslashes(htmlspecialchars($data['pseudo_last_posteur'])).'</a><br />
A <a href="./voirtopic.php?t='.$data['topic_id'].'&page='.$page.'#p_'.$data['post_id'].'">'.date('H\hi \l\e d M y',$data['post_time']).'</a></td></tr>';
}
?>
</table>
<?php
}
$query->CloseCursor();
?>
<?php
//On prend tout ce qu'on a sur les topics normaux du forum
$query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post,
Mb.pseudo AS pseudo_createur, post_id, post_createur, post_time, Ma.pseudo AS pseudo_last_posteur FROM forum_topic
LEFT JOIN LOGIN Mb ON Mb.id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN LOGIN Ma ON Ma.id = forum_post.post_createur
WHERE topic_genre <> "Annonce" AND forum_topic.forum_id = :forum
ORDER BY topic_last_post DESC
LIMIT :premier ,:nombre');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
$query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
$query->execute();
if ($query->rowCount()>0)
{
?>
<table>
<tr>
<th><img src="./images/message.gif" alt="Message" /></th>
<th class="titre"><strong>Titre</strong></th>
<th class="nombremessages"><strong>Réponses</strong></th>
<th class="nombrevu"><strong>Vus</strong></th>
<th class="auteur"><strong>Auteur</strong></th>
<th class="derniermessage"><strong>Dernier message </strong></th>
</tr>
<?php
//On lance la boucle
while ($data = $query->fetch())
{
//Ah bah tiens... re vla l'echo de fou
echo'<tr><td><img src="./images/message.gif" alt="Message" /></td>
<td class="titre">
<strong><a href="./voirtopic.php?t='.$data['topic_id'].'"
title="Topic commencé à
'.date('H\hi \l\e d M,y',$data['topic_time']).'">
'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a></strong></td>
<td class="nombremessages">'.$data['topic_post'].'</td>
<td class="nombrevu">'.$data['topic_vu'].'</td>
<td><a href="./voirprofil.php?m='.$data['topic_createur'].'
&action=consulter">
'.stripslashes(htmlspecialchars($data['pseudo_createur'])).'</a></td>';
//Selection dernier message
$nombreDeMessagesParPage = 15;
$nbr_post = $data['topic_post'] +1;
$page = ceil($nbr_post / $nombreDeMessagesParPage);
echo '<td class="derniermessage">Par
<a href="./voirprofil.php?m='.$data['post_createur'].'
&action=consulter">
'.stripslashes(htmlspecialchars($data['pseudo_last_posteur'])).'</a><br />
A <a href="./voirtopic.php?t='.$data['topic_id'].'&page='.$page.'#p_'.$data['post_id'].'">'.date('H\hi \l\e d M y',$data['post_time']).'</a></td></tr>';
}
?>
</table>
<?php
}
else //S'il n'y a pas de message
{
echo'<p>Ce forum ne contient aucun sujet actuellement</p>';
}
$query->CloseCursor();
?>
</div>
</body></html>
voirtopic.php
<?php
session_start();
$titre="Voir un sujet";
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/menu.php");
include("includes/bbcode.php"); //On verra plus tard ce qu'est ce fichier
//On récupère la valeur de t
$topic = (int) $_GET['t'];
//A partir d'ici, on va compter le nombre de messages pour n'afficher que les 15 premiers
$query=$db->prepare('SELECT topic_titre, topic_post, forum_topic.forum_id, topic_last_post,
forum_name, auth_view, auth_topic, auth_post
FROM forum_topic
LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
WHERE topic_id = :topic') ;
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$forum=$data['forum_id'];
$totalDesMessages = $data['topic_post'] + 1;
$nombreDeMessagesParPage = 15;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html />
<meta http-equiv="Content-Language" content="fr" />
<title>Forum</title>
<link type="text/css" href="design.css" rel="stylesheet"/>
</head>
<body>
<?php
echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
<a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
--> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>';
echo '<h1>'.stripslashes(htmlspecialchars($data['topic_titre'])).'</h1><br /><br />';
//Nombre de pages
$page = (isset($_GET['page']))?intval($_GET['page']):1;
//On affiche les pages 1-2-3 etc...
echo '<p>Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
if ($i == $page) //On affiche pas la page actuelle en lien
{
echo $i;
}
else
{
echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">
' . $i . '</a> ';
}
}
echo'</p>';
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
//On affiche l'image répondre
echo'<a href="./poster.php?action=repondre&t='.$topic.'">
<img src="./images/repondre.gif" alt="Répondre" title="Répondre à ce topic" /></a>';
//On affiche l'image nouveau topic
echo'<a href="./poster.php?action=nouveautopic&f='.$data['forum_id'].'">
<img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
$query->CloseCursor();
//Enfin on commence la boucle !
?>
<?php
$query=$db->prepare('SELECT post_id, post_createur, post_texte, post_time,
id, pseudo, date, post
FROM forum_post
LEFT JOIN LOGIN ON LOGIN.id = forum_post.post_createur
WHERE topic_id =:topic
ORDER BY post_id
LIMIT :premier, :nombre');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
$query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
$query->execute();
//On vérifie que la requête a bien retourné des messages
if ($query->rowCount()<1)
{
echo'<p>Il n y a aucun post sur ce topic, vérifiez l url et reessayez</p>';
}
else
{
//Si tout roule on affiche notre tableau puis on remplit avec une boucle
?><table>
<tr>
<th class="vt_auteur"><strong>Auteurs</strong></th>
<th class="vt_mess"><strong>Messages</strong></th>
</tr>
<?php
while ($data = $query->fetch())
{
//On commence à afficher le pseudo du créateur du message :
//On vérifie les droits du membre
//(partie du code commentée plus tard)
echo'<tr><td><strong>
<a href="./voirprofil.php?m='.$data['id'].'&action=consulter">
'.stripslashes(htmlspecialchars($data['pseudo'])).'</a></strong></td>';
/* Si on est l'auteur du message, on affiche des liens pour
Modérer celui-ci.
Les modérateurs pourront aussi le faire, il faudra donc revenir sur
ce code un peu plus tard ! */
if ($id == $data['post_createur'])
{
echo'<td id=p_'.$data['post_id'].'>Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
<a href="./poster.php?p='.$data['post_id'].'&action=delete">
<img src="./images/supprimer.gif" alt="Supprimer"
title="Supprimer ce message" /></a>
<a href="./poster.php?p='.$data['post_id'].'&action=edit">
<img src="./images/editer.gif" alt="Editer"
title="Editer ce message" /></a></td></tr>';
}
else
{
echo'<td>
Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
</td></tr>';
}
//Détails sur le membre qui a posté
echo'<tr><td>
<img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
<br />Membre inscrit le '.date('d/m/Y',$data['date']).'
<br />Messages : '.$data['post'].'<br /></td>';
//Message
echo'<td>'.code(nl2br(stripslashes(htmlspecialchars($data['post_texte'])))).'
<br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'</td></tr>';
} //Fin de la boucle ! \o/
$query->CloseCursor();
?>
</table>
<?php
echo '<p>Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
if ($i == $page) //On affiche pas la page actuelle en lien
{
echo $i;
}
else
{
echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">
' . $i . '</a> ';
}
}
echo'</p>';
//On ajoute 1 au nombre de visites de ce topic
$query=$db->prepare('UPDATE forum_topic
SET topic_vu = topic_vu + 1 WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
} //Fin du if qui vérifiait si le topic contenait au moins un message
?>
</body>
</html>