Aller au menu - Aller au contenu

Icône Forums et Topics

Avatar
Mise à jour : 30/11/2010
Difficulté : Facile Facile Creative Commons BY
4 145 visites depuis 7 jours, dont 192 sur ce chapitre classé 41/786
Dans ce chapitre, nous allons voir comment mettre en place les pages voirforum et voirtopic. Comme leur nom l'indique, elles vont permettre d'afficher le contenu d'un forum (donc, la liste des topics de ce forum) et celui d'un topic (donc, la liste des messages de ce topic).
Cette étape est presque la dernière de la partie membre du forum : une fois ces pages réalisées, il ne restera plus qu'à s'intéresser à la manière de poster, puis c'est gagné ! ;)

Allez, on y va. ^^
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Voir un forum

La page voirforum.php n'est pas très différente de notre page d'index. La seule différence, c'est qu'on va afficher la liste des topics au lieu de celle des forums. Mais finalement, les scripts restent assez similaires.

Ce qu'on va faire



Une requête dans la base de données pour retourner toutes les infos sur le forum en question
Un tableau qui va afficher les 25 derniers topics.

Comme vous avez pu le remarquer, dans la page d'index, l'url d'un forum est de la forme : voirforum.php?f=2.
On va donc récupérer la valeur de f qui correspond à l'id du forum qu'on va afficher.

Sans plus attendre, le début du code : :p

Page : voirforum.php

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?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);
?>


Voilà le début du code. On compte donc le nombre de messages afin de savoir combien de pages on va devoir créer. C'est exactement le même principe que dans le TP sur le Livre d'or (d'ailleurs, j'ai pris les mêmes noms de variables).

Je profite de cette requête pour récupérer les valeurs des champs auth_view et auth_topic : vous comprendrez plus tard pourquoi.

Maintenant, on va afficher le haut de la page, c'est-à-dire qu'on va écrire le nombre de pages et des informations sur le visiteur.

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
<?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.'&amp;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&amp;f='.$forum.'">
<img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
$query->CloseCursor();
?>


Vous remarquez au passage que l'url du lien vers le profil prend maintenant un sens :) .


Le tableau



Une fois qu'on est arrivés là, on va devoir faire une requête de fou furieux pour prendre en une seule fois tout ce que l'on veut sur les forums.

Attention : on y va.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?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.membre_pseudo AS membre_pseudo_createur, post_createur, post_time, Ma.membre_pseudo AS membre_pseudo_last_posteur, post_id FROM forum_topic 
LEFT JOIN forum_membres Mb ON Mb.membre_id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN forum_membres Ma ON Ma.membre_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();
?>


o_O

Bon bah, allons détailler : comme vous avez sûrement dû le remarquer, on fait une requête qui, grâce à des jointures, associe 4 tables. La première est forum_topic, ce qui est logique puisqu'on veut avant tout lister les différents topics du forum. On connaît l'id du membre qui a posté le premier message, et on associe alors la table forum_membres pour connaître son nom. Ensuite, on associe la table forum_post à forum_topic pour connaître tout ce que l'on veut sur le dernier message, et en l'occurrence, ce qui nous intéresse c'est qui l'a posté. On repart donc sur la table forum_membres ^^ , et on sort le nom du bonhomme qui a posté ce message.

Si vous avez en tête la structure du tableau listant les sujets de chaque forum du Site du Zér0, ou de la plupart des autres forums, vous comprendrez facilement pourquoi il nous faut toutes ces infos.

Euh... c'est quoi, ça ? LEFT JOIN forum_membres Ma ON Ma.membre_id = forum_post.post_createur


C'est un alias, comme on utilise deux fois la table forum_membre, ça permet de différencier la première jointure de la seconde. La première, on la renomme Mb, et la seconde Ma ; ensuite, grâce au mot clé AS, on re-renomme les champs, pour ne plus les confondre dans l'echo qui va suivre.

Traitement des annonces !



En fait, on va faire deux tableaux : un pour les annonces et un pour les topics normaux (c'est la raison du Where topic_genre = "Annonce"). C'est la méthode la plus simple que j'ai trouvée pour avoir les annonces toujours en haut, et les sujets à la suite.

Évidemment on peut toujours économiser une requête en ajoutant des conditions pour afficher la bonne image... On peut toujours arriver à supprimer une requête par-ci par là, cependant dans le tuto j'ai choisi de garder des méthodes simples, à vous de changer ça si vous voulez gagner un peu plus de performance.


Revenons au 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?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'].'
                &amp;action=consulter">
                '.stripslashes(htmlspecialchars($data['membre_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'].'
                &amp;action=consulter">
                '.stripslashes(htmlspecialchars($data['membre_pseudo_last_posteur'])).'</a><br />
                A <a href="./voirtopic.php?t='.$data['topic_id'].'&amp;page='.$page.'#p_'.$data['post_id'].'">'.date('H\hi \l\e d M y',$data['post_time']).'</a></td></tr>';
        }
        ?>
        </table>
        <?php
}
$query->CloseCursor();
?>


Voilà : on arrive au bout de la première boucle. Il n'y a pas grand-chose de compliqué à comprendre : on fait un tableau qu'on remplit avec le contenu de la requête. :-° Remarquez qu'on n'affiche pas un tableau vide... Enfin on pourrait, mais c'est très moche. Du coup, je vérifie avant que la requête renvoie bien au moins 1 donnée.

Sans plus attendre, les topics !



Ici encore, on va faire une requête de tarés et mettre son contenu dans un tableau. Toutefois, il faut encore vérifier que le forum contient au moins 1 topic. C'est comme pour la page d'index, il est possible que ce soit la première fois que vous mettiez les pieds sur cette page ; si ça se produit, on affiche un message et non pas le tableau.

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
<?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.membre_pseudo AS membre_pseudo_createur, post_id, post_createur, post_time, Ma.membre_pseudo AS membre_pseudo_last_posteur FROM forum_topic
LEFT JOIN forum_membres Mb ON Mb.membre_id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN forum_membres Ma ON Ma.membre_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'].'
                &amp;action=consulter">
                '.stripslashes(htmlspecialchars($data['membre_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'].'
                &amp;action=consulter">
                '.stripslashes(htmlspecialchars($data['membre_pseudo_last_posteur'])).'</a><br />
                A <a href="./voirtopic.php?t='.$data['topic_id'].'&amp;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();


On est arrivés en bas de notre page : voyons plus en détail ce code. La requête que l'on fait est très voisine de celle que l'on a utilisée pour lister les annonces, sauf qu'on limite le nombre de retours à un certain nombre. Ensuite, on remplit le nouveau tableau, et comme on liste d'abord les annonces, elles resteront toujours en haut ! Pour sélectionner les topics "normaux", il faut prendre ceux qui ne sont pas des annonces ; le signe <> signifie "différent de".

On termine



Elle est pas belle, la vie ? Vous avez maintenant une page qui liste les topics de chaque forum. Enfin je dis avez... il reste encore à terminer en fermant les balises.

Code : PHP
1
2
3
?>
</div>
</body></html>


Et voilà. ^^

Voir un topic

La page voirtopic.php se construit comme le script de news présenté dans le TP. A savoir qu'on va afficher chaque message du plus ancien au plus récent, la seule différence, c'est qu'à la gauche de ces messages, on montrera l'avatar du membre qui a posté.

Le css



Tout ceci nécessite un petit tour par notre fichier CSS. Voici comment j'ai fait, libre à vous de modifier chaque ligne pour les adapter à votre design.

Code : CSS
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
.vt_auteur
{
width:20%;
background-color : rgb(244,238,250);
}
.vt_mess
{
width:75%;
background-color : rgb(244,238,250);
}


On va donc faire un tableau à deux colonnes, la première affichera les infos sur le membre qui a posté (son avatar, son nom, etc.), et la seconde son message ^^ .

On passe au php



Comme pour la page voirforum.php, on doit d'abord compter le nombre de messages pour compter le nombre de pages nécessaires, afin d'en afficher que 15 par page.

Page : voirtopic.php

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
<?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);
?>


Vous remarquez que le code est exactement pareil, sauf qu'on récupère t la place de f. Par ailleurs, puisqu'il nous faut aussi des infos sur le forum auquel appartient le sujet, il faut faire une jointure.

Et si j'ai envie d'afficher 10 messages ? Je dois changer le script ?


En fait, le script qu'on est en train de réaliser est temporaire ; dans la seconde partie de ce tuto consacrée à la partie administration, on aura à le modifier légèrement. Ainsi, vous pourrez changer le nombre de messages par page facilement. :)

Maintenant qu'on a le haut de notre page, on va afficher le titre et l'éternel fil d'Ariane.

Code : PHP
1
2
3
4
5
6
<?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 />';
?>




Enfin, on compte le nombre de pages, et on commence notre boucle pour afficher tous les messages. Vous allez voir que finalement ce script est l'un des plus simples.

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
<?php
//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&amp;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&amp;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 !
?>


Je m'arrête une minute avant d'afficher la requête (je vous rassure, elle n'est pas trop longue ^^ ). En fait, vous devriez être capables de la faire tout seuls comme des grands pendant que je pars siroter un café si vous avez bien compris les jointures. On doit prendre, à partir de l'id du créateur de chaque post, toutes les infos possibles sur ce membre.

Voilà comment faire :

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
<?php
$query=$db->prepare('SELECT post_id , post_createur , post_texte , post_time ,
membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature
FROM forum_post
LEFT JOIN forum_membres ON forum_membres.membre_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())
        {


Vous avez vu qu'une fois encore je vérifie si la requête retourne au moins un message. En général, ça sera le cas puisque lors de la création d'un topic, on y adjoint un premier post. Mais comment on ne sait jamais, il vaut mieux vérifier ^^ .
Sinon, on lance notre beau tableau, et on va voir de suite quoi mettre dedans.

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
<?php
//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['membre_id'].'&amp;action=consulter">
         '.stripslashes(htmlspecialchars($data['membre_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'].'&amp;action=delete">
         <img src="./images/supprimer.gif" alt="Supprimer"
         title="Supprimer ce message" /></a>   
         <a href="./poster.php?p='.$data['post_id'].'&amp;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['membre_inscrit']).'
         <br />Messages : '.$data['membre_post'].'<br />
         Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'</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>


C'est quoi, la fonction code ?


C'est une fonction que l'on va se dépêcher de créer dans le prochain chapitre du cours. Dans un forum, on donne la possibilité de mettre en forme son texte (gras, italique, souligné...). Mais on ne peut pas laisser le membre utiliser les balises html, car ça serait trop dangereux ; c'est pourquoi on utilise des balises qu'on convertit ensuite en html grâce à la fonction code. Pensez par exemple au Zcode ^^ .
Bon, bah on a terminé notre boucle, on a fermé notre tableau, il reste à terminer la page :

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
<?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.'&amp;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
?>           
</div>
</body>
</html>


Héhé... on a terminé :soleil: . C'était peut-être un peu long, mais à présent, les posts sont listés, tout comme les topics !
C'est maintenant à vous de voir comment vous voulez organiser votre page : dans l'exemple, j'ai fait apparaitre pour chaque message le pseudo du membre, son avatar, le nombre de messages qu'il a postés et sa localisation. Mais personne ne vous interdit de mettre autre chose :) .
Voilà : on est arrivés au bout. Ces deux scripts sont assez longs, et j'avoue que j'ai pas mal hésité à les placer dans le même chapitre. Mais si vous lisez ces lignes, c'est que vous y êtes arrivés :p .

Prochain chapitre : comment poster un message. Allez, on y va. ;)
Chapitre précédent Sommaire Chapitre suivant

Partager

52 commentaires pour "Forums et Topics"
Note moyenne : 3.61 / 4 (349 votes)
Pseudo Commentaire
Hors ligne totalgaara # Posté le 20/05/2010 à 20:46:53
Actucraft.fr.nf !
Avatar
Flux RSS

Ville : Dottignies
Pays : Belgique

Hello ! dite vous pouvez m'aider ? j'ai un problème , quand je veut voir un topic sa affiche pas le message...

Image utilisateur

Voici le code de la page :
voirtopic.php
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
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<?php
//Cette fonction doit être appelée avant tout code html
session_start();
 
//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Voir un topic";
include("includes/bbcode.php"); //On verra plus tard ce qu'est ce fichier
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
//Maintenant on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
 
//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
$requete1 = mysql_query("
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."'") or die (mysql_error());
$data1 = mysql_fetch_assoc($requete1);
 
$totalDesMessages = $data1['topic_post'] + 1;
$nombreDeMessagesParPage = 15;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<div id="corps_forum">
<a href ="./index.php">Index du forum</a> /
<a href="./voirforum.php?f=<?php echo $data1['forum_id'] ?>"><?php echo stripslashes(htmlspecialchars($data1['forum_name'])); ?></a> /
<a href="./voirtopic.php?t=<?php echo $topic ?>"><?php echo stripslashes(htmlspecialchars($data1['topic_titre'])); ?></a>
 
<?php
 
// A partir d'ici, comme d'habitude, on affiche des options pour le visiteur
 
if (isset($_SESSION['pseudo'])) // Si le membre est connecté
{
       
        //Voici les options
        echo'<p>Vous êtes connecté en tant que
        <a href="./voirprofil.php?m='.intval($_SESSION['id']).'&action=consulter">
        '.stripslashes(htmlspecialchars($_SESSION['pseudo'])).'</a><br />
        <a href="./voirprofil.php?action=modifier">Modifier mon profil</a><br />
        <a href="./messagesprives.php">Consulter mes messages privés</a><br />
        <a href ="./deconnexion.php">Se déconnecter</a><br /></p>';
 
}
// Sinon, on propose de se connecter ou de s'enregistrer
else
{
        echo'<p>Vous n êtes pas connecté <br />
        <a href="./connexion.php">Se connecter</a><br />
        <a href="./register.php">Pas encore inscrit ?</a><br /></p>';
}

//Nombre de pages
 
if (isset($_GET['page']))
{
$page = intval($_GET['page']);
}
else
{
$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 le titre :
echo '<h1>'.stripslashes(htmlspecialchars($data1['topic_titre'])).'</h1>';
 
 
//On affiche l'image répondre
echo'<a href="./poster.php?action=repondre&amp;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&amp;f='.$data1['forum_id'].'">
<img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
 
//Enfin on commence la boucle !
?>
<?php
$requete2 = mysql_query('
SELECT post_id , post_createur , post_texte , post_time ,
membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature
FROM forum_post
LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur
WHERE topic_id ="'.$topic.'"
ORDER BY post_id
LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage . '')
or die(mysql_error());
 
//On vérifie que la requête a bien retourné des messages
if (mysql_num_rows($requete2) < 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 ($data2 = mysql_fetch_assoc($requete2))
        {

//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='.$data2['membre_id'].'&amp;action=consulter">
         '.stripslashes(htmlspecialchars($data2['membre_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 (intval($_SESSION['id']) == $data2['post_createur'])
         {
         echo'<td id=p_'.$data2['post_id'].'>Posté à '.date('H\hi \l\e d M y',$data2['post_time']).'
         <a href="./poster.php?p='.$data2['post_id'].'&amp;action=delete">
         <img src="./images/supprimer.gif" alt="Supprimer"
         title="Supprimer ce message" /></a>   
         <a href="./poster.php?p='.$data2['post_id'].'&amp;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',$data2['post_time']).'
         </td></tr>';
         }
       
         //Détails sur le membre qui a posté
         echo'<tr><td>
         <img src="./images/avatars/'.$data2['membre_avatar'].'" alt="" />
         <br />Membre inscrit le '.date('d/m/Y',$data2['membre_inscrit']).'
         <br />Messages : '.$data2['membre_post'].'<br />
         Localisation : '.stripslashes(htmlspecialchars($data2['membre_localisation'])).'</td>';
               
         //Message
         echo'<td>'.code(nl2br(stripslashes(htmlspecialchars($data2['post_texte'])))).'
         <br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data2['membre_signature'])))).'</td></tr>';
         } //Fin de la boucle ! \o/
         ?>
</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
        mysql_query('UPDATE forum_topic
        SET topic_vu = topic_vu + 1 WHERE topic_id = '.$topic.'');
 
} //Fin du if qui vérifiait si le topic contenait au moins un message
         
mysql_close();
?>           
</div>
</body>
</html>


Pouvez-vous corriger le code pour moi ? car je trouve vraiment pas . Merci :)

Image utilisateur
 
Hors ligne sonicvi # Posté le 27/05/2010 à 09:20:03
Avatar

Ville : Fresnes
Pays : France métropolitaine

il faut que tu mette le fichier bbcode.php dans le dossier includes

Image utilisateur
 
Hors ligne HighTam # Posté le 01/08/2010 à 04:43:17
Sleep(FOR_EVER);
Avatar

Ville : Sfax
Pays : Tunisie

Petite erreur :
Page : voirforum.php

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
<?php
session_start();

$titre = "Voir un forum";
include("includes/debut.php");
?>
<body>
<div id="banniere"></div>
<?php
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);

$forum = (int) $_GET['f'];

$requete1 = mysql_query("SELECT forum_name, forum_topic, auth_view, auth_topic FROM forum_forum WHERE forum_id = '".$forum."'") or die (mysql_error());
$data1 = mysql_fetch_assoc($requete1);

$totalDesMessages = $data1['forum_topic'] + 1;
$nombreDeMessagesParPage = 25;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<div id="corps_forum">

Pourquoi <?php $data1['forum_topic'] + 1 ?> ? Il s'agit du nombre des topics dans un forum et non du nombre des messages dans un topic.
C'est quoi la différence ?
Pour le nombre des messages dans un topic, on est obligé d'ajouter 1 à <?php $data['topic_post'] ?> , parce que, si le sujet ne contient que le premier message de son auteur, le champ topic_post dans la base de données contient 0, donc pour obtenir le nombre total des messages dans ce topic (premier message inclus), on fait : <?php $data['topic_post'] + 1 ?> .
Au contraire, pour compter le nombre total des topics dans un forum, rien de plus simple, il faut juste faire <?php $data['forum_topic'] ?> .

Autre erreur :
Dans le même fichier, deux variables de même nom :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$nombreDeMessagesParPage = 25;
/* ... */
if (mysql_num_rows($requete3) > 0)
{
    /* ... */
    $nombreDeMessagesParPage = 15;
    /* ... */
}

$requete3 = mysql_query('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post,
Mb.membre_pseudo AS membre_pseudo_createur, post_createur, post_time, Ma.membre_pseudo AS membre_pseudo_last_posteur FROM forum_topic
LEFT JOIN forum_membres Mb ON Mb.membre_id = forum_topic.topic_createur
LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
LEFT JOIN forum_membres Ma ON Ma.membre_id = forum_post.post_createur   
WHERE topic_genre <> "Annonce" AND forum_topic.forum_id = "'.$forum.'"
ORDER BY topic_last_post DESC
LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage .'')

/* Utilisation de la variable $nombreDeMessagesParPage : source d'erreur  */
?>


Remplacer le nom de la première variable <?php $nombreDeMessagesParPage ?> par <?php $nombreDeTopicsParPage ?> , c'est correct !

Autre erreur :
Pour mieux voir cette erreur on va supposer que le nombre de topics par page est 4 ( <?php $nombreDeTopicsParPage = 4; ?> ) et qu'on a dans un forum quelconque 5 annonces et 7 autres topics normaux.
On fait :

Code : PHP
1
2
3
4
5
6
<?php
/* En même temps correction des noms des variables et suppression du + 1 */
$totalDesTopics = $data1['forum_topic']; 
$nombreDeTopicsParPage = 4;
$nombreDePages = ceil($totalDesTopics / $nombreDeTopicsParPage);
?>

Ce qui donne :

Code : PHP
1
2
3
4
5
<?php
$totalDesTopics = 12; // nombre d'annonces : 5 + nombre de sujets normaux : 7
$nombreDeTopicsParPage = 4;
$nombreDePages = 3; // ceil(12 / 4)
?>


Au final, on aura 3 pages ! Ce qui est incorrect !
Explication : Avec le système proposé dans ce tutoriel, les annonces s'afficheront sur toutes les pages (Il n'y a pas une restriction, la seule condition c'est :
Code : PHP
1
2
3
<?php
if (mysql_num_rows($requete3) > 0)
?>
)
C'est à dire : "Si on a d'annonces". Ça ne dépend pas de la page ! Donc, les annonces s'afficheront sur toutes les pages.
C'est bien, donc elles n'ont pas besoin d'une page spécialement pour elles pour pouvoir s'afficher, ces annonces.
Puisqu'on a 3 pages, les annonces vont s'afficher sur la 1ère page, la 2ème et la 3ème.
Rappelez vous on a 7 topics normaux, les premiers 4 topics vont s'afficher sur la 1ère page, les 3 restants vont s'afficher sur la 2ème page. Alors que contient la 3ème ? Elle ne contient que les annonces qui se sont déjà affichées dans la 1ère et la 2ème page, donc c'est inutile qu'elles s'affichent sur la 3ème.

Correction : On enlève le nombre d'annonces au nombre total des topics :

Code : PHP
1
2
3
4
5
6
7
<?php
$nombreAnnonces = mysql_result(mysql_query('SELECT COUNT(*) FROM forum_topic WHERE topic_genre = "Annonce" AND forum_topic.forum_id = "' . $forum . '"'), 0);

$totalDesTopics = $data1['forum_topic'] - $nombreAnnonces; 
$nombreDeTopicsParPage = 4;
$nombreDePages = ceil($totalDesTopics / $nombreDeTopicsParPage);
?>

Vérification :
Code : PHP
1
2
3
4
5
<?php
$totalDesTopics = 7; /* 12 - 5 */
$nombreDeTopicsParPage = 4;
$nombreDePages = 2; /* ceil(7 / 4) */
?>

On va avoir 2 pages : la première affichera 5 annonces, 4 topics normaux, la deuxième affichera les 5 mêmes annonces, et les 3 topics normaux restants.

Image utilisateur

Image utilisateur
« L'enfer c'est les autres » Jean-Paul Sartre
Une mère a 21 ans de plus que son fils. Dans 6 ans, elle aura 5 fois l'âge de son fils. Où est le père ?
 
Hors ligne Diablo_Dany # Posté le 02/09/2010 à 21:38:34

Moi j'ai cette erreur dans voirtopic.php
Fatal error: Call to undefined function code() in /home/a9989305/public_html/voirtopic.php on line 140
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
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
//Fonction premier a inclure avant tout code html
session_start();

//On donne ensuite un titre a notre page, puis en appelle notre fichier debut.php
$titre="Index du forum";
include("includes/debut.php");
?>
<body>
<div id="header"><div align="center"><a href="http://www.imagup.com/pics/1282222718.html"><img src="http://ups.imagup.com/ano1/1282222717.gif"alt="logo" /></a></div>
<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);

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

//A partir d'ici, on va compter le nombre de message pour n'afficher que les 15 premiers
$requete1 = mysql_query("SELECT topic_post FROM forum_topic WHERE topic_id = '".$topic."'") or die (mysql_error());
$totalDesMessages = mysql_num_rows($requete1);
$nombreDeMessagesParPage = 15;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<div id="corps_haut">
<?php
if (isset($_SESSION['pseudo'])) // Si le membre est connecté
{
       
        //Voici les options
        echo'<p><a href="./voirprofil.php?action=modifier">Modifier profil</a>
        <a href="./messagesprives.php">messages privés</a>
        <a href="amis.php">Mes amis</a>
        <a href="membrelist.php">Membre</a>
        <a href ="./deconnexion.php">Se déconnecter</a>
        <a href="./voirprofil.php?m='.intval($_SESSION['id']).'&amp;action=consulter">'.stripslashes(htmlspecialchars($_SESSION['pseudo'])).'</a></p>';
}


// Sinon on propose de se connecter ou de s'enregistrer
else
{
        echo'<h2>Vous n\'êtes pas connecté <br />
        <a href="./connexion.php">Se connecter</a><br />
        <a href="./register.php">Pas encore inscrit ?</a><br /></h2>';
}
?>
</div>
<div id="corps_forum">



<?php

$data1 = mysql_fetch_assoc($requete1);

echo'<a href ="./index.php">Index du forum</a> / <a href ="./voirforum.php?f='.$data1['forum_id'].'">Retour au forum</a>';


             
//Nombre de page

echo '<br /><br />Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
        echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">' . $i . '</a> ';
}
if (isset($_GET['page']))
{
        $page = intval($_GET['page']);
}
else
{
        $page = 1;
}
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

//On affiche le titre :
echo '<h1>'.$data1['topic_titre'].'</h1><br /><br />';

//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>';


//Enfin on commence la boucle !

$requete2 = mysql_query('SELECT `post_id` , `post_createur` , `post_texte` , `post_time` , membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation
FROM forum_post LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur WHERE topic_id ="'.$topic.'"  ORDER BY post_id LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage . '') or die(mysql_error());

//On vérifie que la requête a bien retourné des messages
if (mysql_num_rows($requete2) < 1)
{
        echo'<h2>Il n y a aucun post sur ce topic, vérifiez l url et reessayez</h2>';
}
else
{
        //Si tout roule on affiche notre tableau puis on remplit avec une boucle
        ?>
        <h2><table>
        <tr>       
        <thead>
        <th id="vt_auteur"><strong>Auteurs</strong></th>             
        <th id="vt_mess"><strong>Messages</strong></th>       
        </tr></thead><tbody>
        <?php
        while ($data2 = mysql_fetch_assoc($requete2))
        {
               

                //On commence à afficher le pseudo du créateur du message :
                ?>
                <tr>
                <td>
                <?php
                // On vérifie les droits du membre (partie du code commentée plus tard)
                echo'<strong><a href="./voirprofil.php?m='.$data2['membre_id'].'&action=consulter">'.$data2['membre_pseudo'].'</a></strong></td>';
                if ($_SESSION['id'] == $data2['post_createur'] || $_SESSION['level'] = "admin" || $_SESSION['level'] = "moderateur")
                {
                        echo'<td>Posté à '.date('H\hi \l\e d M y',$data2['post_time']).'  <align "right"> <a href="./poster.php?p='.$data2['post_id'].'&action=delete"><img src="./images/supprimer.gif" alt="Supprimer" title="Supprimer ce message"></a>   <a href="./poster.php?p='.$data2['post_id'].'&action=edit"><img src="./images/editer.gif" alt="Editer" title="Editer ce message"></a></align></td>';
                                }
                                else
                                {
echo'<td>Posté à '.date('H\hi \l\e d M y',$data2['post_time']).'</td>';
                                }
                ?>
                               
                               
        </tr>
        <td>
        <?php
        //Détails sur le membre qui a posté
        echo'<img src="./images/avatars/'.$data2['membre_avatar'].'"><br />Membre inscrit le '.date('d/m/Y',$data2['membre_inscrit']).'<br />Messages : '.$data2['membre_post'].'<br /> Localisation : '.$data2['membre_localisation'].'</h2>';
        ?>
        </td><td>
        <?php
       
        //Message
        echo''.code($data2['post_texte']).'<br /><hr>'.code($data2['membre_signature']).'';
        ?>
        </td></tr>
        <?php
        }//Fin de la boucle ! \o/
        ?>
        </tbody></table>
               
               
       
        <?php
        echo '<h3><br /><br /><br /><br />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'</h3>';
       
        //On ajoutte 1 au nombre de visites de ce topic
        mysql_query('UPDATE forum_topic SET topic_vu = topic_vu + 1 WHERE topic_id = '.$topic.'');

} //Fin du if qui vérifiait si le topic contenait au moins un message
?>           
</div>
</body>
</html>

Je ne voit pas se que sa peut être.
Merci de vos réponse.
Hors ligne Diablo_Dany # Posté le 07/09/2010 à 17:21:28

J'ai trouver la solution enfete il falais juste insérer le bbcode voir 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
 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
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
//Fonction premier a inclure avant tout code html
session_start();

//On donne ensuite un titre a notre page, puis en appelle notre fichier debut.php
$titre="Index du forum";
include("includes/bbcode.php");
include("includes/debut.php");
?>
<body>
<div id="header"><div align="center"><a href="http://www.imagup.com/pics/1282222718.html"><img src="http://ups.imagup.com/ano1/1282222717.gif"alt="logo" /></a></div>
<?php
//Maintenant, on se connecte à la base de données
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);

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

//A partir d'ici, on va compter le nombre de message pour n'afficher que les 15 premiers
$requete1 = mysql_query("SELECT topic_post FROM forum_topic WHERE topic_id = '".$topic."'") or die (mysql_error());
$totalDesMessages = mysql_num_rows($requete1);
$nombreDeMessagesParPage = 15;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<div id="corps_haut">
<?php
if (isset($_SESSION['pseudo'])) // Si le membre est connecté
{
       
        //Voici les options
        echo'<p><a href="./voirprofil.php?action=modifier">Modifier profil</a>
        <a href="./messagesprives.php">messages privés</a>
        <a href="amis.php">Mes amis</a>
        <a href="membrelist.php">Membre</a>
        <a href ="./deconnexion.php">Se déconnecter</a>
        <a href="./voirprofil.php?m='.intval($_SESSION['id']).'&amp;action=consulter">'.stripslashes(htmlspecialchars($_SESSION['pseudo'])).'</a></p>';
}


// Sinon on propose de se connecter ou de s'enregistrer
else
{
        echo'<h2>Vous n\'êtes pas connecté <br />
        <a href="./connexion.php">Se connecter</a><br />
        <a href="./register.php">Pas encore inscrit ?</a><br /></h2>';
}
?>
</div>
<div id="corps_forum">



<?php

$data1 = mysql_fetch_assoc($requete1);

echo'<a href ="./index.php">Index du forum</a> / <a href ="./voirforum.php?f='.$data1['forum_id'].'">Retour au forum</a>';


             
//Nombre de page

echo '<br /><br />Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
        echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">' . $i . '</a> ';
}
if (isset($_GET['page']))
{
        $page = intval($_GET['page']);
}
else
{
        $page = 1;
}
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

//On affiche le titre :
echo '<h1>'.$data1['topic_titre'].'</h1><br /><br />';

//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>';


//Enfin on commence la boucle !

$requete2 = mysql_query('SELECT `post_id` , `post_createur` , `post_texte` , `post_time` , membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation
FROM forum_post LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur WHERE topic_id ="'.$topic.'"  ORDER BY post_id LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage . '') or die(mysql_error());

//On vérifie que la requête a bien retourné des messages
if (mysql_num_rows($requete2) < 1)
{
        echo'<h2>Il n y a aucun post sur ce topic, vérifiez l url et reessayez</h2>';
}
else
{
        //Si tout roule on affiche notre tableau puis on remplit avec une boucle
        ?>
        <h2><table>
        <tr>       
        <thead>
        <th id="vt_auteur"><strong>Auteurs</strong></th>             
        <th id="vt_mess"><strong>Messages</strong></th>       
        </tr></thead><tbody>
        <?php
        while ($data2 = mysql_fetch_assoc($requete2))
        {
               

                //On commence à afficher le pseudo du créateur du message :
                ?>
                <tr>
                <td>
                <?php
                // On vérifie les droits du membre (partie du code commentée plus tard)
                echo'<strong><a href="./voirprofil.php?m='.$data2['membre_id'].'&action=consulter">'.$data2['membre_pseudo'].'</a></strong></td>';
                if ($_SESSION['id'] == $data2['post_createur'] || $_SESSION['level'] = "admin" || $_SESSION['level'] = "moderateur")
                {
                        echo'<td>Posté à '.date('H\hi \l\e d M y',$data2['post_time']).'  <align "right"> <a href="./poster.php?p='.$data2['post_id'].'&action=delete"><img src="./images/supprimer.gif" alt="Supprimer" title="Supprimer ce message"></a>   <a href="./poster.php?p='.$data2['post_id'].'&action=edit"><img src="./images/editer.gif" alt="Editer" title="Editer ce message"></a></align></td>';
                                }
                                else
                                {
echo'<td>Posté à '.date('H\hi \l\e d M y',$data2['post_time']).'</td>';
                                }
                ?>
                               
                               
        </tr>
        <td>
        <?php
        //Détails sur le membre qui a posté
        echo'<img src="./images/avatars/'.$data2['membre_avatar'].'"><br />Membre inscrit le '.date('d/m/Y',$data2['membre_inscrit']).'<br />Messages : '.$data2['membre_post'].'<br /> Localisation : '.$data2['membre_localisation'].'</h2>';
        ?>
        </td><td>
        <?php
       
        //Message
        echo''.code($data2['post_texte']).'<br /><hr>'.code($data2['membre_signature']).'';
        ?>
        </td></tr>
        <?php
        }//Fin de la boucle ! \o/
        ?>
        </tbody></table>
               
               
       
        <?php
        echo '<h3><br /><br /><br /><br />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'</h3>';
       
        //On ajoutte 1 au nombre de visites de ce topic
        mysql_query('UPDATE forum_topic SET topic_vu = topic_vu + 1 WHERE topic_id = '.$topic.'');

} //Fin du if qui vérifiait si le topic contenait au moins un message
?>           
</div>
</body>
</html>

Voir tous les commentaires