Page 1 sur 1

Question créer un forum

Posté : 14 avr. 2016, 15:05
par rononedex
Bonjour a tous,

Voila je suis sur la création de mon forum ! pour ce faire j'ai créer ces tables :
f_categories
=> id
=> f_cat_name

f_forums
=> id
=> f_forum_name
=> f_forum_description
=> f_categorie_id

f_topics
=> id
=> f_topic_name
=> f_topic_content
=> f_forum_id
=> f_user_id
=> f_topic_date
Le but est que les catégories et les forums ce créer dans l'administration, ensuite l'utilisateur va créer un topic dans un des forums qui a étais créer précédemment.

Jusque la tous ce passe bien ! je peut créer des topics les afficher etc... mai au niveau des réponse je dois créer une table séparé ou un ajouter un champ supplémentaire dan la BDD
f_topics
=> f_topic_reponse int(11)
Pour que f_topic_reponse indique une réponse a l'id du topic qu'un autre a créer.

Jusque la tous va bien même si je ne sais pas trop si j'ai fais les chose correctement c'est mon premier forum hormis quelque difficulté sur les boucle etc... tous ce passe bien.

Voila c'est tous ce que j'ai a demander pour le moment.

En vous remerciant :)

Re: Question créer un forum

Posté : 14 avr. 2016, 22:33
par moogli
Salut,

Si j'ai bien compris ta demande la réponse est bien une colonne te permettant une auto jointure sur la table (gestion de la parentés).

En clair tout les messages sont les mêmes. La seule chose qui différencie le 1er d'un autre c'est qu'il n'a pas de parent.

la table topic devient
f_topics
id
parent_id
f_topic_name
f_topic_content
f_forum_id
f_user_id
f_topic_date

pour avoir la liste des topic select * from f_topics where parent_id is null order by id f_topic_date desc

Il possible de voir la chose d'une façon différente afin d'ajouter, par exemple, un titre et une date de dernière réponse pour faire que la chose plus sexy a utiliser et faire remonter simplement les sujets dans la file ;)

ça devient un truc dans le genre
forums
id_forum PK
title_forum varchar
description

topics
topic_id
title_topic
creation_date_topic
user_create

messages
message_id
topic_id
content (clob)
message_date
user_id

lors de la création d'un message tu alimentes topics et messages
une réponse va dans message.

Pour afficher la liste des topics un simple select sur topic et l'info de dernière réponse et son auteur un subselect dans la requête.

Un truc du genre
select  topic_id,title_topic,creation_date_topic, user_create, msg.message_date , msg.usermsg
from topic t,
(select message_date , user_id as usermsg from message m user_id where m.topic_id =f.topic_id ) msg
order by message_date desc
c'est a test et adapter mais le principe est la.

Tu essais de nommer correctement tes colonnes je t'invite à e faire aussi pour les id histoire de n'avoir qu'une seule fois le même nom dans tout le modèle (histoire d'éviter que ce soit le foutoir ;) ).

le f_ n'est pas forcément utile ;)

@+

Re: Question créer un forum

Posté : 15 avr. 2016, 17:49
par rononedex
la table topic devient
f_topics
id
parent_id
f_topic_name
f_topic_content
f_forum_id
f_user_id
f_topic_date
Pourquoi parent_id ? en fait le f_forum_id correspond a l'id du forum dans lequel on post !

Mai ma question ce porter sur : je dois créer une table pour les réponse ou créer une id qui correspondra a la réponse, mai après j'ai réfléchis j'ai créer une table pour les réponses au topic sinon je me serai retrouver avec des colonne sans titre.

Donc la mon forum est presque fini reste a voir si je ne peut pas amélioré les requête car faire une requête pour afficher le topic et une pour les réponses + le titre du forum dans lequel le topic a étais créer.

exemple :

Code : Tout sélectionner

/******** * on recupere le premier topic *********/ function get_topics(){ global $db; if(!empty($_GET['id'])){ $id = intval($_GET['id']); $req = $db->query(" SELECT f_topics.id AS topicsid, f_topics.f_topic_content, f_topics.f_topic_name, f_topics.f_user_id, f_topics.f_topic_date, users.id AS usersid, users.username, users.email, users.slug, users.userurl FROM f_topics LEFT JOIN users ON users.id = f_topics.f_user_id WHERE f_topics.id = $id "); $f_topics = $req->fetch(); return $f_topics; } } /******** * on recupere les reponse *********/ function get_topicReponse(){ global $db; if(!empty($_GET['id'])){ $id = intval($_GET['id']); $req = $db->query(" SELECT f_topics_reponse.id AS topicsrep, f_topics_reponse.f_topic_reponse, f_topics_reponse.f_topic_id, f_topics_reponse.f_user_id, f_topics_reponse.f_topic_rep_date, users.id AS usersrep, users.username, users.email, users.slug, users.userurl FROM f_topics_reponse LEFT JOIN users ON users.id = f_topics_reponse.f_user_id WHERE f_topics_reponse.f_topic_id = $id GROUP BY f_topics_reponse.id "); $results = []; while($rows = $req->fetchObject()){ $results[] = $rows; } return $results; } } /********** * UPDATE view if isset id ***********/ if(isset($id)){ $vu = [$id]; $sql = $db->prepare("UPDATE f_topics SET f_topic_vu = f_topic_vu + 1 WHERE id = $id")->execute($vu); } //isset id or redirect $req = $db->query("SELECT * FROM f_topics WHERE id = $id"); $results = $req->fetch(); if(empty($_GET['id']) OR isset($_GET['id']) != $results->id){ setFlash('<strong>Ho ho !</strong> Problème <strong>Pas de forum avec cette id</strong>','warning'); redirectForum('forums'); } //get title forum $forumTitle = $db->query("SELECT * FROM f_forums WHERE f_forums.id = $results->f_forum_id"); $forumtitle = $forumTitle->fetch();
Ensuite faire la boucle pareil je ne suis pas sur que ce soit correctement coder car je dois faire un affichage pour le premier topic et un pour les réponses.

Code : Tout sélectionner

//first topic $topic = get_topics(); <div> premier topic </div> //réponse $rep_topic = get_topicReponse(); foreach($rep_topic as $reponses): <div> réponse </div> endforeach;

Mai en dehors de ça tous mon forum fonctionne bien le post, l'affichage compteur de vue et de réponse etc... mai comme je début je ne sais pas trop si les requêtes et les boucles sont correct.