Forum

Répondre
Jownathan
le 07/11/2013 à 22:15
Jownathan
Bonjour,

Je suis entièrement autodidacte (donc j'ai un vocabulaire très limité dans le domaine), j'ai créé un forum mais j'ai un soucis au niveau de l'affichage de certaines données.

Lorsque je poste un message, la date et l'heure du message apparaît bien mais il n'y a aucune information sur le membre qui l'a posté ! (Pas de pseudo, la date d’inscription est au 01/01/1970, le nombre de message posté n'apparaît pas)

Le forum s'articule avec 4 pages principales :

poster.php

postok.php

voirforum.php

voirtopic.php

Avez-vous déjà rencontré ce type de problème, si oui comment l'avez-vous résolu ?

Merci d'avance,
LupusMic
le 08/11/2013 à 11:26
LupusMic
Tu as un dépôt de source quelque part, qu'on puisse regarder ça ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Jownathan
le 08/11/2013 à 19:12
Jownathan
Poster.php

  1. <?php
  2. session_start();
  3. $titre="Poster";
  4. $balises = true;
  5. include("includes/identifiants.php");
  6. include("includes/debut.php");
  7. include("includes/menu.php");
  8. include("includes/auth-data_bd.php");

  9. ?>

  10. <?php
  11. //Qu'est ce qu'on veut faire ? poster, répondre ou éditer ?
  12. $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';

  13. connexion_bd();

  14. //Il faut être connecté pour poster !
  15. //on va chercher tout ce qui correspond à l'utilisateur
  16. $affiche = mysql_query("SELECT * FROM LOGIN WHERE pseudo='".mysql_real_escape_string(stripcslashes($_SESSION['pseudo']))."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."'");
  17. $result = mysql_fetch_assoc($affiche);
  18. //si le statut ne retourne pas 1,2 ou 3, ce n'est pas un membre..on éjecte l'utilisateur
  19. if(mysql_num_rows($affiche) == 0)
  20. {
  21. echo 'Il faut être connecté pour poster.<script type="text/javascript"> window.setTimeout("location=(\'index.php?dec=close\');",3000) </script>'; return false;
  22. }
  23. close_bd();

  24. //Si on veut poster un nouveau topic, la variable f se trouve dans l'url,
  25. //On récupère certaines valeurs
  26. if (isset($_GET['f']))
  27. {
  28. $forum = (int) $_GET['f'];
  29. $query= $db->prepare('SELECT forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
  30. FROM forum_forum WHERE forum_id =:forum');
  31. $query->bindValue(':forum',$forum,PDO::PARAM_INT);
  32. $query->execute();
  33. $data=$query->fetch();
  34. echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
  35. <a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
  36. --> Nouveau topic</p>';


  37. }

  38. //Sinon c'est un nouveau message, on a la variable t et
  39. //On récupère f grâce à une requête
  40. elseif (isset($_GET['t']))
  41. {
  42. $topic = (int) $_GET['t'];
  43. $query=$db->prepare('SELECT topic_titre, forum_topic.forum_id,
  44. forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
  45. FROM forum_topic
  46. LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
  47. WHERE topic_id =:topic');
  48. $query->bindValue(':topic',$topic,PDO::PARAM_INT);
  49. $query->execute();
  50. $data=$query->fetch();
  51. $forum = $data['forum_id'];

  52. echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
  53. <a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
  54. --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
  55. --> Répondre</p>';
  56. }

  57. //Enfin sinon c'est au sujet de la modération(on verra plus tard en détail)
  58. //On ne connait que le post, il faut chercher le reste
  59. elseif (isset ($_GET['p']))
  60. {
  61. $post = (int) $_GET['p'];
  62. $query=$db->prepare('SELECT post_createur, forum_post.topic_id, topic_titre, forum_topic.forum_id,
  63. forum_name, auth_view, auth_post, auth_topic, auth_annonce, auth_modo
  64. FROM forum_post
  65. LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id
  66. LEFT JOIN forum_forum ON forum_forum.forum_id = forum_topic.forum_id
  67. WHERE forum_post.post_id =:post');
  68. $query->bindValue(':post',$post,PDO::PARAM_INT);
  69. $query->execute();
  70. $data=$query->fetch();

  71. $topic = $data['topic_id'];
  72. $forum = $data['forum_id'];

  73. echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
  74. <a href="./voirforum.php?f='.$data['forum_id'].'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
  75. --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>
  76. --> Modérer un message</p>';
  77. }
  78. $query->CloseCursor();
  79. ?>

  80. <?php
  81. switch($action)
  82. {
  83. case "repondre": //Premier cas on souhaite répondre
  84. ?>
  85. <h1>Poster une réponse</h1>

  86. <form method="post" action="postok.php?action=repondre&amp;t=<?php echo $topic ?>" name="formulaire">

  87. <fieldset><legend>Mise en forme</legend>
  88. <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
  89. <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
  90. <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
  91. <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
  92. <br /><br />
  93. <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :D ');return(false)" />
  94. <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)" />
  95. <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(' :triste: ');return(false)" />
  96. <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(' :frime: ');return(false)" />
  97. <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies(' XD ');return(false)" />
  98. <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(' :s ');return(false)" />
  99. <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(' :o ');return(false)" />
  100. <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(' :interrogation: ');return(false)" />
  101. <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(' :exclamation: ');return(false)" />
  102. </fieldset>

  103. <fieldset><legend>Message</legend><textarea cols="80" rows="8" id="message" name="message"></textarea></fieldset>

  104. <input type="submit" name="submit" value="Envoyer" />
  105. <input type="reset" name = "Effacer" value = "Effacer"/>
  106. </p></form>
  107. <?php
  108. break;

  109. case "nouveautopic":
  110. ?>

  111. <h1>Nouveau topic</h1>

  112. <p>Auteur : <?php echo($pseudo); ?> </p>

  113. <form method="post" action="postok.php?action=nouveautopic&amp;f=<?php echo $forum ?>" name="formulaire">

  114. <fieldset><legend>Titre</legend>
  115. <input type="text" size="80" id="titre" name="titre" /></fieldset>

  116. <fieldset><legend>Mise en forme</legend>
  117. <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
  118. <input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
  119. <input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
  120. <input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
  121. <br /><br />
  122. <img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
  123. <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)" />
  124. <img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
  125. <img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
  126. <img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
  127. <img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
  128. <img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
  129. <img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
  130. <img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" /></fieldset>

  131. <fieldset><legend>Message</legend>
  132. <textarea cols="80" rows="8" id="message" name="message"></textarea>
  133. <label><input type="radio" name="mess" value="Annonce" />Annonce</label>
  134. <label><input type="radio" name="mess" value="Message" checked="checked" />Topic</label>
  135. </fieldset>
  136. <p>
  137. <input type="submit" name="submit" value="Envoyer" />
  138. <input type="reset" name = "Effacer" value = "Effacer" /></p>
  139. </form>
  140. <?php
  141. break;

  142. //D'autres cas viendront s'ajouter ici par la suite
  143. ?>

  144. <?php
  145. default: //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
  146. echo'<p>Cette action est impossible</p>';
  147. } //Fin du switch
  148. ?>
  149. </div>
  150. </body>
  151. </html>


postok.php

  1. <?php
  2. session_start();
  3. $titre="Poster";
  4. include("includes/identifiants.php");
  5. include("includes/debut.php");
  6. include("includes/menu.php");
  7. include("includes/auth-data_bd.php");

  8. //On récupère la valeur de la variable action
  9. $action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';

  10. // Si le membre n'est pas connecté, il est arrivé ici par erreur
  11. //on va chercher tout ce qui correspond à l'utilisateur
  12. connexion_bd();
  13. $affiche = mysql_query("SELECT * FROM LOGIN WHERE pseudo='".mysql_real_escape_string(stripcslashes($_SESSION['pseudo']))."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."'");
  14. $result = mysql_fetch_assoc($affiche);
  15. //si le statut ne retourne pas 2, ce n'est pas un admin..on éjecte l'utilisateur
  16. if(mysql_num_rows($affiche) == 0)
  17. {
  18. echo 'Il faut être connecté pour poster.<script type="text/javascript"> window.setTimeout("location=(\'index.php?dec=close\');",3000) </script>'; return false;
  19. }
  20. close_bd();

  21. switch($action)
  22. {
  23. //Premier cas : nouveau topic
  24. case "nouveautopic":
  25. //On passe le message dans une série de fonction
  26. $message = $_POST['message'];
  27. $mess = $_POST['mess'];

  28. //Pareil pour le titre
  29. $titre = $_POST['titre'];

  30. //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable f
  31. $forum = (int) $_GET['f'];
  32. $temps = time();

  33. if (empty($message) || empty($titre))
  34. {
  35. echo'<p>Votre message ou votre titre est vide,
  36. cliquez <a href="./poster.php?action=nouveautopic&amp;f='.$forum.'">ici</a> pour recommencer</p>';
  37. }
  38. else //Si jamais le message n'est pas vide
  39. {

  40. //On entre le topic dans la base de donnée en laissant
  41. //le champ topic_last_post à 0
  42. $query=$db->prepare('INSERT INTO forum_topic
  43. (forum_id, topic_titre, topic_createur, topic_vu, topic_time, topic_genre)
  44. VALUES(:forum, :titre, :id, 1, :temps, :mess)');
  45. $query->bindValue(':forum', $forum, PDO::PARAM_INT);
  46. $query->bindValue(':titre', $titre, PDO::PARAM_STR);
  47. $query->bindValue(':id', $id, PDO::PARAM_INT);
  48. $query->bindValue(':temps', $temps, PDO::PARAM_INT);
  49. $query->bindValue(':mess', $mess, PDO::PARAM_STR);
  50. $query->execute();


  51. $nouveautopic = $db->lastInsertId(); //Notre fameuse fonction !
  52. $query->CloseCursor();

  53. //Puis on entre le message
  54. $query=$db->prepare('INSERT INTO forum_post
  55. (post_createur, post_texte, post_time, topic_id, post_forum_id)
  56. VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
  57. $query->bindValue(':id', $id, PDO::PARAM_INT);
  58. $query->bindValue(':mess', $message, PDO::PARAM_STR);
  59. $query->bindValue(':temps', $temps,PDO::PARAM_INT);
  60. $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
  61. $query->bindValue(':forum', $forum, PDO::PARAM_INT);
  62. $query->execute();


  63. $nouveaupost = $db->lastInsertId(); //Encore notre fameuse fonction !
  64. $query->CloseCursor();


  65. //Ici on update comme prévu la valeur de topic_last_post et de topic_first_post
  66. $query=$db->prepare('UPDATE forum_topic
  67. SET topic_last_post = :nouveaupost,
  68. topic_first_post = :nouveaupost
  69. WHERE topic_id = :nouveautopic');
  70. $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
  71. $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
  72. $query->execute();
  73. $query->CloseCursor();

  74. //Enfin on met à jour les tables forum_forum et forum_membres
  75. $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 ,forum_topic = forum_topic + 1,
  76. forum_last_post_id = :nouveaupost
  77. WHERE forum_id = :forum');
  78. $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
  79. $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
  80. $query->execute();
  81. $query->CloseCursor();

  82. $query=$db->prepare('UPDATE LOGIN SET post = post + 1 WHERE id = :id');
  83. $query->bindValue(':id', $id, PDO::PARAM_INT);
  84. $query->execute();
  85. $query->CloseCursor();

  86. //Et un petit message
  87. echo'<p>Votre message a bien été ajouté!<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
  88. Cliquez <a href="./voirtopic.php?t='.$nouveautopic.'">ici</a> pour le voir</p>';
  89. }
  90. break; //Houra !

  91. //Deuxième cas : répondre
  92. case "repondre":
  93. $message = $_POST['message'];

  94. //ici seulement, maintenant qu'on est sur qu'elle existe, on récupère la valeur de la variable t
  95. $topic = (int) $_GET['t'];
  96. $temps = time();

  97. if (empty($message))
  98. {
  99. echo'<p>Votre message est vide, cliquez <a href="./poster.php?action=repondre&amp;t='.$topic.'">ici</a> pour recommencer</p>';
  100. }
  101. else //Sinon, si le message n'est pas vide
  102. {

  103. //On récupère l'id du forum
  104. $query=$db->prepare('SELECT forum_id, topic_post FROM forum_topic WHERE topic_id = :topic');
  105. $query->bindValue(':topic', $topic, PDO::PARAM_INT);
  106. $query->execute();
  107. $data=$query->fetch();
  108. $forum = $data['forum_id'];

  109. //Puis on entre le message
  110. $query=$db->prepare('INSERT INTO forum_post
  111. (post_createur, post_texte, post_time, topic_id, post_forum_id)
  112. VALUES(:id,:mess,:temps,:topic,:forum)');
  113. $query->bindValue(':id', $id, PDO::PARAM_INT);
  114. $query->bindValue(':mess', $message, PDO::PARAM_STR);
  115. $query->bindValue(':temps', $temps, PDO::PARAM_INT);
  116. $query->bindValue(':topic', $topic, PDO::PARAM_INT);
  117. $query->bindValue(':forum', $forum, PDO::PARAM_INT);
  118. $query->execute();

  119. $nouveaupost = $db->lastInsertId();
  120. $query->CloseCursor();

  121. //On change un peu la table forum_topic
  122. $query=$db->prepare('UPDATE forum_topic SET topic_post = topic_post + 1, topic_last_post = :nouveaupost WHERE topic_id =:topic');
  123. $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
  124. $query->bindValue(':topic', (int) $topic, PDO::PARAM_INT);
  125. $query->execute();
  126. $query->CloseCursor();

  127. //Puis même combat sur les 2 autres tables
  128. $query=$db->prepare('UPDATE forum_forum SET forum_post = forum_post + 1 , forum_last_post_id = :nouveaupost WHERE forum_id = :forum');
  129. $query->bindValue(':nouveaupost', (int) $nouveaupost, PDO::PARAM_INT);
  130. $query->bindValue(':forum', (int) $forum, PDO::PARAM_INT);
  131. $query->execute();
  132. $query->CloseCursor();

  133. $query=$db->prepare('UPDATE LOGIN SET post = post + 1 WHERE id = :id');
  134. $query->bindValue(':id', $id, PDO::PARAM_INT);
  135. $query->execute();
  136. $query->CloseCursor();


  137. //Et un petit message
  138. $nombreDeMessagesParPage = 15;
  139. $nbr_post = $data['topic_post']+1;
  140. $page = ceil($nbr_post / $nombreDeMessagesParPage);
  141. echo'<p>Votre message a bien été ajouté!<br /><br />
  142. Cliquez <a href="./index.php">ici</a> pour revenir à l index du forum<br />
  143. Cliquez <a href="./voirtopic.php?t='.$topic.'&amp;page='.$page.'#p_'.$nouveaupost.'">ici</a> pour le voir</p>';
  144. }//Fin du else
  145. break;
  146. default;
  147. echo'<p>Cette action est impossible</p>';
  148. } //Fin du Switch
  149. ?>
  150. </div>
  151. </body>
  152. </html>


voirforum.php

  1. <?php
  2. session_start();
  3. $titre="Voir un forum";
  4. include("includes/identifiants.php");
  5. include("includes/debut.php");
  6. include("includes/menu.php");

  7. //On récupère la valeur de f
  8. $forum = (int) $_GET['f'];

  9. //A partir d'ici, on va compter le nombre de messages
  10. //pour n'afficher que les 25 premiers
  11. $query=$db->prepare('SELECT forum_name, forum_topic, auth_view, auth_topic FROM forum_forum WHERE forum_id = :forum');
  12. $query->bindValue(':forum',$forum,PDO::PARAM_INT);
  13. $query->execute();
  14. $data=$query->fetch();

  15. $totalDesMessages = $data['forum_topic'] + 1;
  16. $nombreDeMessagesParPage = 25;
  17. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  18. ?>

  19. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  20. <html xmlns="http://www.w3.org/1999/xhtml">
  21. <head>
  22. <meta http-equiv="Content-Type" content="text/html; UTF-8" />
  23. <meta http-equiv="Content-Language" content="fr" />
  24. <title>Forum</title>
  25. <link type="text/css" href="design.css" rel="stylesheet"/>
  26. </head>

  27. <body>


  28. <?php
  29. echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
  30. <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>';

  31. //Nombre de pages


  32. $page = (isset($_GET['page']))?intval($_GET['page']):1;

  33. //On affiche les pages 1-2-3, etc.
  34. echo '<p>Page : ';
  35. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  36. {
  37. if ($i == $page) //On ne met pas de lien sur la page actuelle
  38. {
  39. echo $i;
  40. }
  41. else
  42. {
  43. echo '
  44. <a href="voirforum.php?f='.$forum.'&amp;page='.$i.'">'.$i.'</a>';
  45. }
  46. }
  47. echo '</p>';


  48. $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

  49. //Le titre du forum
  50. echo '<h1>'.stripslashes(htmlspecialchars($data['forum_name'])).'</h1><br /><br />';


  51. //Et le bouton pour poster
  52. echo'<a href="./poster.php?action=nouveautopic&amp;f='.$forum.'">
  53. <img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
  54. $query->CloseCursor();
  55. ?>

  56. <?php
  57. //On prend tout ce qu'on a sur les Annonces du forum


  58. $query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post,
  59. Mb.pseudo AS pseudo_createur, post_createur, post_time, Ma.pseudo AS pseudo_last_posteur, post_id FROM forum_topic
  60. LEFT JOIN LOGIN Mb ON Mb.id = forum_topic.topic_createur
  61. LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
  62. LEFT JOIN LOGIN Ma ON Ma.id = forum_post.post_createur
  63. WHERE topic_genre = "Annonce" AND forum_topic.forum_id = :forum
  64. ORDER BY topic_last_post DESC');
  65. $query->bindValue(':forum',$forum,PDO::PARAM_INT);
  66. $query->execute();
  67. ?>

  68. <?php
  69. //On lance notre tableau seulement s'il y a des requêtes !
  70. if ($query->rowCount()>0)
  71. {
  72. ?>
  73. <table>
  74. <tr>
  75. <th><img src="./images/annonce.gif" alt="Annonce" /></th>
  76. <th class="titre"><strong>Titre</strong></th>
  77. <th class="nombremessages"><strong>Réponses</strong></th>
  78. <th class="nombrevu"><strong>Vus</strong></th>
  79. <th class="auteur"><strong>Auteur</strong></th>
  80. <th class="derniermessage"><strong>Dernier message</strong></th>
  81. </tr>

  82. <?php
  83. //On commence la boucle
  84. while ($data=$query->fetch())
  85. {
  86. //Pour chaque topic :
  87. //Si le topic est une annonce on l'affiche en haut
  88. //mega echo de bourrain pour tout remplir

  89. echo'<tr><td><img src="./images/annonce.gif" alt="Annonce" /></td>

  90. <td id="titre"><strong>Annonce : </strong>
  91. <strong><a href="./voirtopic.php?t='.$data['topic_id'].'"
  92. title="Topic commencé à
  93. '.date('H\hi \l\e d M,y',$data['topic_time']).'">
  94. '.stripslashes(htmlspecialchars($data['topic_titre'])).'</a></strong></td>

  95. <td class="nombremessages">'.$data['topic_post'].'</td>

  96. <td class="nombrevu">'.$data['topic_vu'].'</td>

  97. <td><a href="./voirprofil.php?m='.$data['topic_createur'].'
  98. &amp;action=consulter">
  99. '.stripslashes(htmlspecialchars($data['pseudo_createur'])).'</a></td>';

  100. //Selection dernier message
  101. $nombreDeMessagesParPage = 15;
  102. $nbr_post = $data['topic_post'] +1;
  103. $page = ceil($nbr_post / $nombreDeMessagesParPage);

  104. echo '<td class="derniermessage">Par
  105. <a href="./voirprofil.php?m='.$data['post_createur'].'
  106. &amp;action=consulter">
  107. '.stripslashes(htmlspecialchars($data['pseudo_last_posteur'])).'</a><br />
  108. 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>';
  109. }
  110. ?>
  111. </table>
  112. <?php
  113. }
  114. $query->CloseCursor();
  115. ?>

  116. <?php
  117. //On prend tout ce qu'on a sur les topics normaux du forum


  118. $query=$db->prepare('SELECT forum_topic.topic_id, topic_titre, topic_createur, topic_vu, topic_post, topic_time, topic_last_post,
  119. Mb.pseudo AS pseudo_createur, post_id, post_createur, post_time, Ma.pseudo AS pseudo_last_posteur FROM forum_topic
  120. LEFT JOIN LOGIN Mb ON Mb.id = forum_topic.topic_createur
  121. LEFT JOIN forum_post ON forum_topic.topic_last_post = forum_post.post_id
  122. LEFT JOIN LOGIN Ma ON Ma.id = forum_post.post_createur
  123. WHERE topic_genre <> "Annonce" AND forum_topic.forum_id = :forum
  124. ORDER BY topic_last_post DESC
  125. LIMIT :premier ,:nombre');
  126. $query->bindValue(':forum',$forum,PDO::PARAM_INT);
  127. $query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
  128. $query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
  129. $query->execute();

  130. if ($query->rowCount()>0)
  131. {
  132. ?>
  133. <table>
  134. <tr>
  135. <th><img src="./images/message.gif" alt="Message" /></th>
  136. <th class="titre"><strong>Titre</strong></th>
  137. <th class="nombremessages"><strong>Réponses</strong></th>
  138. <th class="nombrevu"><strong>Vus</strong></th>
  139. <th class="auteur"><strong>Auteur</strong></th>
  140. <th class="derniermessage"><strong>Dernier message </strong></th>
  141. </tr>
  142. <?php
  143. //On lance la boucle

  144. while ($data = $query->fetch())
  145. {
  146. //Ah bah tiens... re vla l'echo de fou
  147. echo'<tr><td><img src="./images/message.gif" alt="Message" /></td>

  148. <td class="titre">
  149. <strong><a href="./voirtopic.php?t='.$data['topic_id'].'"
  150. title="Topic commencé à
  151. '.date('H\hi \l\e d M,y',$data['topic_time']).'">
  152. '.stripslashes(htmlspecialchars($data['topic_titre'])).'</a></strong></td>

  153. <td class="nombremessages">'.$data['topic_post'].'</td>

  154. <td class="nombrevu">'.$data['topic_vu'].'</td>

  155. <td><a href="./voirprofil.php?m='.$data['topic_createur'].'
  156. &amp;action=consulter">
  157. '.stripslashes(htmlspecialchars($data['pseudo_createur'])).'</a></td>';

  158. //Selection dernier message
  159. $nombreDeMessagesParPage = 15;
  160. $nbr_post = $data['topic_post'] +1;
  161. $page = ceil($nbr_post / $nombreDeMessagesParPage);

  162. echo '<td class="derniermessage">Par
  163. <a href="./voirprofil.php?m='.$data['post_createur'].'
  164. &amp;action=consulter">
  165. '.stripslashes(htmlspecialchars($data['pseudo_last_posteur'])).'</a><br />
  166. 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>';

  167. }
  168. ?>
  169. </table>
  170. <?php
  171. }
  172. else //S'il n'y a pas de message
  173. {
  174. echo'<p>Ce forum ne contient aucun sujet actuellement</p>';
  175. }
  176. $query->CloseCursor();

  177. ?>
  178. </div>
  179. </body></html>



voirtopic.php

  1. <?php
  2. session_start();
  3. $titre="Voir un sujet";
  4. include("includes/identifiants.php");
  5. include("includes/debut.php");
  6. include("includes/menu.php");
  7. include("includes/bbcode.php"); //On verra plus tard ce qu'est ce fichier

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

  10. //A partir d'ici, on va compter le nombre de messages pour n'afficher que les 15 premiers
  11. $query=$db->prepare('SELECT topic_titre, topic_post, forum_topic.forum_id, topic_last_post,
  12. forum_name, auth_view, auth_topic, auth_post
  13. FROM forum_topic
  14. LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
  15. WHERE topic_id = :topic') ;
  16. $query->bindValue(':topic',$topic,PDO::PARAM_INT);
  17. $query->execute();
  18. $data=$query->fetch();
  19. $forum=$data['forum_id'];
  20. $totalDesMessages = $data['topic_post'] + 1;
  21. $nombreDeMessagesParPage = 15;
  22. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  23. ?>

  24. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml">
  26. <head>
  27. <meta http-equiv="Content-Type" content="text/html />
  28. <meta http-equiv="Content-Language" content="fr" />
  29. <title>Forum</title>
  30. <link type="text/css" href="design.css" rel="stylesheet"/>
  31. </head>

  32. <body>

  33. <?php
  34. echo '<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> -->
  35. <a href="./voirforum.php?f='.$forum.'">'.stripslashes(htmlspecialchars($data['forum_name'])).'</a>
  36. --> <a href="./voirtopic.php?t='.$topic.'">'.stripslashes(htmlspecialchars($data['topic_titre'])).'</a>';
  37. echo '<h1>'.stripslashes(htmlspecialchars($data['topic_titre'])).'</h1><br /><br />';

  38. //Nombre de pages
  39. $page = (isset($_GET['page']))?intval($_GET['page']):1;

  40. //On affiche les pages 1-2-3 etc...
  41. echo '<p>Page : ';
  42. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  43. {
  44. if ($i == $page) //On affiche pas la page actuelle en lien
  45. {
  46. echo $i;
  47. }
  48. else
  49. {
  50. echo '<a href="voirtopic.php?t='.$topic.'&page='.$i.'">
  51. ' . $i . '</a> ';
  52. }
  53. }
  54. echo'</p>';

  55. $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;


  56. //On affiche l'image répondre
  57. echo'<a href="./poster.php?action=repondre&amp;t='.$topic.'">
  58. <img src="./images/repondre.gif" alt="Répondre" title="Répondre à ce topic" /></a>';

  59. //On affiche l'image nouveau topic
  60. echo'<a href="./poster.php?action=nouveautopic&amp;f='.$data['forum_id'].'">
  61. <img src="./images/nouveau.gif" alt="Nouveau topic" title="Poster un nouveau topic" /></a>';
  62. $query->CloseCursor();
  63. //Enfin on commence la boucle !
  64. ?>

  65. <?php
  66. $query=$db->prepare('SELECT post_id, post_createur, post_texte, post_time,
  67. id, pseudo, date, post
  68. FROM forum_post
  69. LEFT JOIN LOGIN ON LOGIN.id = forum_post.post_createur
  70. WHERE topic_id =:topic
  71. ORDER BY post_id
  72. LIMIT :premier, :nombre');
  73. $query->bindValue(':topic',$topic,PDO::PARAM_INT);
  74. $query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
  75. $query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
  76. $query->execute();

  77. //On vérifie que la requête a bien retourné des messages
  78. if ($query->rowCount()<1)
  79. {
  80. echo'<p>Il n y a aucun post sur ce topic, vérifiez l url et reessayez</p>';
  81. }
  82. else
  83. {
  84. //Si tout roule on affiche notre tableau puis on remplit avec une boucle
  85. ?><table>
  86. <tr>
  87. <th class="vt_auteur"><strong>Auteurs</strong></th>
  88. <th class="vt_mess"><strong>Messages</strong></th>
  89. </tr>
  90. <?php
  91. while ($data = $query->fetch())
  92. {
  93. //On commence à afficher le pseudo du créateur du message :
  94. //On vérifie les droits du membre
  95. //(partie du code commentée plus tard)
  96. echo'<tr><td><strong>
  97. <a href="./voirprofil.php?m='.$data['id'].'&amp;action=consulter">
  98. '.stripslashes(htmlspecialchars($data['pseudo'])).'</a></strong></td>';

  99. /* Si on est l'auteur du message, on affiche des liens pour
  100. Modérer celui-ci.
  101. Les modérateurs pourront aussi le faire, il faudra donc revenir sur
  102. ce code un peu plus tard ! */

  103. if ($id == $data['post_createur'])
  104. {
  105. echo'<td id=p_'.$data['post_id'].'>Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
  106. <a href="./poster.php?p='.$data['post_id'].'&amp;action=delete">
  107. <img src="./images/supprimer.gif" alt="Supprimer"
  108. title="Supprimer ce message" /></a>
  109. <a href="./poster.php?p='.$data['post_id'].'&amp;action=edit">
  110. <img src="./images/editer.gif" alt="Editer"
  111. title="Editer ce message" /></a></td></tr>';
  112. }
  113. else
  114. {
  115. echo'<td>
  116. Posté à '.date('H\hi \l\e d M y',$data['post_time']).'
  117. </td></tr>';
  118. }

  119. //Détails sur le membre qui a posté
  120. echo'<tr><td>
  121. <img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
  122. <br />Membre inscrit le '.date('d/m/Y',$data['date']).'
  123. <br />Messages : '.$data['post'].'<br /></td>';

  124. //Message
  125. echo'<td>'.code(nl2br(stripslashes(htmlspecialchars($data['post_texte'])))).'
  126. <br /><hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'</td></tr>';
  127. } //Fin de la boucle ! \o/
  128. $query->CloseCursor();

  129. ?>
  130. </table>
  131. <?php
  132. echo '<p>Page : ';
  133. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  134. {
  135. if ($i == $page) //On affiche pas la page actuelle en lien
  136. {
  137. echo $i;
  138. }
  139. else
  140. {
  141. echo '<a href="voirtopic.php?t='.$topic.'&amp;page='.$i.'">
  142. ' . $i . '</a> ';
  143. }
  144. }
  145. echo'</p>';

  146. //On ajoute 1 au nombre de visites de ce topic
  147. $query=$db->prepare('UPDATE forum_topic
  148. SET topic_vu = topic_vu + 1 WHERE topic_id = :topic');
  149. $query->bindValue(':topic',$topic,PDO::PARAM_INT);
  150. $query->execute();
  151. $query->CloseCursor();

  152. } //Fin du if qui vérifiait si le topic contenait au moins un message
  153. ?>
  154. </body>
  155. </html>
LupusMic
le 09/11/2013 à 05:03
LupusMic
Je pense que ton problème est là :
  1. <?php
  2. //Puis on entre le message
  3. $query=$db->prepare('INSERT INTO forum_post
  4. (post_createur, post_texte, post_time, topic_id, post_forum_id)
  5. VALUES (:id, :mess, :temps, :nouveautopic, :forum)');
  6. $query->bindValue(':id', $id, PDO::PARAM_INT);
  7. $query->bindValue(':mess', $message, PDO::PARAM_STR);
  8. $query->bindValue(':temps', $temps,PDO::PARAM_INT);
  9. $query->bindValue(':nouveautopic', (int) $nouveautopic, PDO::PARAM_INT);
  10. $query->bindValue(':forum', $forum, PDO::PARAM_INT);
  11. $query->execute();


Je pense que tu as une confusion avec_post.id, mais sans les schémas de la table, c'est difficile à dire.

Tu devrais monitorer ton lo MySQL pour voir quelles sont les requêtes exécutées.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Jownathan
le 09/11/2013 à 16:02
Jownathan
Merci de t'être penché sur le problème !


Comment dois-je faire pour montrer ma bdd ? :/
LupusMic
le 11/11/2013 à 10:16
LupusMic
  1. show create table forum_post;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Jownathan
le 12/11/2013 à 18:31
Jownathan
Dans quelle page et à quel endroit ? Désolé je suis débutant, j'ai du mal ..
Merci de m'aider.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours