Afficher quelques phrases des dix dernier sujet sur ma page

WRInaute discret
Bonjours a tous...
voila, j'ai trouvé sur ce site les requetes qu'il me falais pour afficher les 10 derniers sujet de mon forum, sa fonctionne bien...

Mais j'aimerais que sa affiche également quelques phrase du premier message.

voici mon code :
Code:
<?php
require_once($dbhost . "config.php");
$dbh = mysql_connect($dbhost, $dbuser, $dbpasswd);
$db_name = mysql_select_db($dbname);

$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time`
   FROM `phpbb3_topics`
   WHERE forum_id='1' AND forum_id != '8'
   ORDER BY `topic_id` DESC
   LIMIT 0,10";

$r_topics = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_topics)) {
$id = $aff_forums['topic_id'];
$f_id = $aff_forums['forum_id'];
$title = $aff_forums['topic_title'];
$time = $aff_forums['topic_time'];
$time = date("d/m/y", $time);
echo "
<TR>
<TD><center class=Style1 >" . $time . "</center></TD>
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/viewtopic.php?t=" . $id . "\">" . $title . "</a><br /></div></center></TD>
</TR>";
}
mysql_close($dbh);

Je précise que je suis sous phpbb3

Et donc pour mieux expliquer, j'aimerais que sa affiche en dessous du lien un apperçus du premier message du sujet.

Pouriez-vous m'aider ?

Je précise que je suis nule en php :)

Grand merci d'avance, wythi.

Ma page d'accueil ici.

Merci.
 
WRInaute passionné
si tu affiches les dix derniers en triant les enregistrements en DESCendant, tu peux afficher le premier en triant en ASCendant :
Code:
$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time`
   FROM `phpbb3_topics`
   WHERE forum_id='1' AND forum_id != '8'
   ORDER BY `topic_id` ASC
   LIMIT 0,1";
 
WRInaute discret
Je pence qu'on ne sais pas compris

en faite avec ces requetes, sa m'affiche juste le titre du sujet sous forme de lien, comme si on entre dans le forum, et qu'on a la liste des sujets mais j'aimerais que sa affiche par exemple :

"ici le titre du sujet sous forme de lien"
"et ici, le premier message de ce même sujet"

Histoir que sur ma page d'accueil, il y ai un apperçus du sujet afficher fin je ne sais pas si je m'explique bien.

wythi.
 
WRInaute impliqué
bonjour, tu fais une requete de ce style

Code:
$rq="SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";

pour récupérer le texte du premier sujet du topic

Après si tu ne veux afficher que le début du texte, il te suffit de limiter le champ avec quelque chose dans ce style :

$text = substr ("$text", 0,200); >> pour avoir seulement les 200 premiers caractères par exemple
 
WRInaute discret
Re bonjours,

j'ai une erreur, voici mon code :

Code:
require_once($dbhost . "config.php");
$dbh = mysql_connect($dbhost, $dbuser, $dbpasswd);
$db_name = mysql_select_db($dbname);

$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time`
   FROM `phpbb3_topics`
   WHERE forum_id='21' AND forum_id != '8'
   ORDER BY `topic_id` DESC
   LIMIT 0,5";

$sql = "SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";

$r_topics = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_topics)) {
$id = $aff_forums['topic_id'];
$f_id = $aff_forums['forum_id'];
$title = $aff_forums['topic_title'];
$time = $aff_forums['topic_time'];
$time = date("d/m/y", $time);

$r_post = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_post)) {
$text = aff_forums['posts_text'];
$text = substr ("$text", 0,200);
echo "
<TR>
<TD><center class=Style1 >" . $time . "</center></TD>
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/viewtopic.php?t=" . $id . "\">" . $title . "</a><br /></div></center></TD>
<td>" . $text . "</td>
</TR>";
}
}
mysql_close($dbh);

Voici l'erreur que sa m'affiche :
Parse error: syntax error, unexpected '[' in /home/www/wythi82/www/index.php on line 129

Je vous l'ai dis :lol: je suis null en "php" :)

Pouvez-vous m'expliquer ou est mon erreur ?
Merci.
 
WRInaute impliqué
Déja y'a un truc que je ne comprends pas dans ton code.
Code:
$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time`
   FROM `phpbb3_topics`
   WHERE forum_id='21' AND forum_id != '8'
   ORDER BY `topic_id` DESC
   LIMIT 0,5";

$sql = "SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";
Tu enchaines les 2 directement donc ta variable ne prendra que la 2eme valeur et tes requettes ne travaillerons que sur ta table phpbb3_posts.
Renommes tes variables differement ($sql_topic et $sql_post) par exemple.
 
WRInaute discret
Oui en faite, j'ai recopier le code de plus haut car je n'y connais rien, je t'ai fais le code de ma page en .txt
ici

Je vais esseyer comme tu me dis pour voir :)
 
WRInaute impliqué
C'est normal :

Ce que tu veux c'est :
- afficher les titres des derniers topics de ton forum
- afficher les textes du premier sujet de chaque topic

>> sachant que les topics et les posts sont dans 2 tables différentes, tu dois effectuer 2 requetes différentes, et la deuxième doit figurer dans la boucle de la première
Or actuellement, tu ne récupères rien du tout pour les textes, car ta requete n'est pas dans la boucle... En effet, tu fais une requete en demanadant de sélectionner le texte des posts dont le numéro de topic est égal à la valeur de "$id", valeur que tu ne connais pas encore car tu n'as pas récupéré les résultats.

Bref, en modifiant ton code comme cela, ça devrait marcher :


require_once($dbhost . "config.php");
$dbh = mysql_connect($dbhost, $dbuser, $dbpasswd);
$db_name = mysql_select_db($dbname);

$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time`
FROM `phpbb3_topics`
WHERE forum_id='21' AND forum_id != '8'
ORDER BY `topic_id` DESC
LIMIT 0,5";


$r_topics = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_topics)) {
$id = $aff_forums['topic_id'];
$f_id = $aff_forums['forum_id'];
$title = $aff_forums['topic_title'];
$time = $aff_forums['topic_time'];
$time = date("d/m/y", $time);

$sql_2 = "SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";

$r_post = mysql_query($sql_2) or die(mysql_error());
while ($aff_posts = mysql_fetch_array($r_post)) {
$text = $aff_posts['posts_text'];
$text = substr ("$text", 0,200);
} //on ferme la boucle qui récupère le texte du post
echo "
<TR>
<TD><center class=Style1 >" . $time . "</center></TD>
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/viewtopic.php?t=" . $id . "\">" . $title . "</a><br /></div></center></TD>
<td>" . $text . "</td>
</TR>";
}//On ferme la boucle qui récupère le topic
mysql_close($dbh);

edit : tu fais aussi des erreurs en appelant tes requetes de la même façon... chaque requete différente doit porter un nom différent
 
WRInaute impliqué
je viens d'éditer car je n'avais pas vu en plus que tu avais appelé tes requetes de la meme façon pour les topics et pour les posts ce qui ne peut pas marcher
 
WRInaute discret
code a dit:
je viens d'éditer car je n'avais pas vu en plus que tu avais appelé tes requetes de la meme façon pour les topics et pour les posts ce qui ne peut pas marcher

Re, je suis désolé vraiment, je dois être une trufe, mais sa ne vas pas.

J'ai retirer le premier blog d'affichage, pour qu'il y en i qu'un, vaut mieux que je m'y retrouve avec un, puis je verais pour l'autre.

ici, sa ne m'affiche toujours que les titre sous forme de lien

je ne comprend pas, car j'appel bien le $text dans la balise <td></td>,
les variable on l'air bonne, bref je m'y retrouve pas :)

je me demande si c'est pas par ce qu'il faut stipuler l'id du topic au quel ce racroche le $text ... en fin c'est juste une suggestion :)

edit : j'ai mis a jours le fichier .txt de ma page histoir que vous voyer le code actuel de la page :)
 
WRInaute discret
Re bonjour,
et bien dans l'url, quand je vais dans mon forum, que je clique sur le topic, dans l'url sa m'écrit "f21" donc pour les titre des topic, il me semble que c'est bon. maintenant pour le message, sa je ne sais pas comment vérifier si c'est bon :)
 
WRInaute impliqué
Pour ça il faut que tu ailles verifier directement dans ta bdd si les posts du topic f21 ont bien pour topic_id f21.
Si dans ta requete tu demandes de sortir un topic_id inexistant ça ne sert a rien ;)
 
WRInaute impliqué
Effectivement...
le champ de la table des posts qui récupère le text s'appelle post_text et nom posts_text avec un "s"

Donc pour récupérer le text, c'est plutôt
$text = $aff_posts['post_text'];
 
WRInaute impliqué
wythi a dit:
je me demande si c'est pas par ce qu'il faut stipuler l'id du topic au quel ce racroche le $text ... en fin c'est juste une suggestion :)

c'est bien ce qui est fait dans la requete qui récupère le texte dans la boucle
 
WRInaute impliqué
code a dit:
Effectivement...
le champ de la table des posts qui récupère le text s'appelle post_text et nom posts_text avec un "s"

Donc pour récupérer le text, c'est plutôt
$text = $aff_posts['post_text'];

arff bien vu Code, ça fait une heure que je cherche une erreur dans le genre
dans le code et je suis passé au travers ;)
 
WRInaute discret
A ok désolé :)

Donc en gros que dois-je faire ? je vous avoue que je suis totalement perdue :)

la je suis dans ma bdd, j'ai afficher la table phpbb3_post
puis j'ai cliquer sur topic_id

mais la, c'est du chinois :)

y a bien les messages, avec des numéros, des IP, etc... mais bon ici je suis non voyants, je travaille donc avec un programes qui est un lecteur d'écran, et dans la bdd, c'est sous forme de tableau, et moi je lie en mode linéaire :) donc de haut en bas, alors c'est vraiment du chinois mdr :)
 
WRInaute impliqué
modifie ta requete comme je te l'ai indiqué et ne touche pas a ta base de données malheureux.

$text = $aff_posts['post_text'];



Ensuite, il y a un autre probleme. tu utilises l'url rewriting sur ton forum, et pas sur le module de ta page d'accueil. Mais là c'est une autre histoire
 
WRInaute impliqué
Apres verification avec la bdd, ce code la devrai etre bon:
Code:
require_once($dbhost . "config.php");
$dbh = mysql_connect($dbhost, $dbuser, $dbpasswd);
$db_name = mysql_select_db($dbname);

$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time` FROM `phpbb3_topics` WHERE forum_id='21' AND forum_id != '8' ORDER BY `topic_id` DESC LIMIT 0,5";


$r_topics = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_topics)) {
$id = $aff_forums['topic_id'];
$f_id = $aff_forums['forum_id'];
$title = $aff_forums['topic_title'];
$time = $aff_forums['topic_time'];
$time = date("d/m/y", $time);

$sql_2 = "SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";

$r_post = mysql_query($sql_2) or die(mysql_error());
while ($aff_posts = mysql_fetch_array($r_post)) {
$text = $aff_posts['post_text'];
$text = substr ("$text", 0,200);
} //on ferme la boucle qui récupère le texte du post
echo "
<TR>
<TD><center class=Style1 >" . $time . "</center></TD>
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/viewtopic.php?t=" . $id . "\">" . $title . "</a><br /></div></center></TD>
<td>" . $text . "</td>
</TR>";
}//On ferme la boucle qui récupère le topic
mysql_close($dbh);

Encore une fois bien vu Code, tu avais vu juste.
 
WRInaute discret
code a dit:
modifie ta requete comme je te l'ai indiqué et ne touche pas a ta base de données malheureux.

$text = $aff_posts['post_text'];



Ensuite, il y a un autre probleme. tu utilises l'url rewriting sur ton forum, et pas sur le module de ta page d'accueil. Mais là c'est une autre histoire

Non non, j'ai juste afficher les données, je n'ai rien modifier ne te tracasse pas ;)

pour l'url rewriting, sa devrais aller, siil affiche déja les titre sous forme de lien, que le .htaccess réécrit bien les url, et que le zero dup est la non ?
 
WRInaute impliqué
Non tu as effectivement un probleme de diplicate content avec ton lien. Il faut que tu recupere le titre du topic dans ta premiere requete pour l'inserer dans le lien afin de correspondre avec tes url ré écrites.
 
WRInaute impliqué
essayes ça

Code:
require_once($dbhost . "config.php");
$dbh = mysql_connect($dbhost, $dbuser, $dbpasswd);
$db_name = mysql_select_db($dbname);

$sql = "SELECT `topic_id`, `topic_title`,`forum_id`,`topic_time` FROM `phpbb3_topics` WHERE forum_id='21' AND forum_id != '8' ORDER BY `topic_id` DESC LIMIT 0,5";


$r_topics = mysql_query($sql) or die(mysql_error());
while ($aff_forums = mysql_fetch_array($r_topics)) {
$id = $aff_forums['topic_id'];
$f_id = $aff_forums['forum_id'];
$title = $aff_forums['topic_title'];
$title2 = str_replace("-", " ", $title);
$time = $aff_forums['topic_time'];
$time = date("d/m/y", $time);

$sql_2 = "SELECT post_text FROM phpbb3_posts WHERE topic_id = '$id' ORDER BY post_id ASC LIMIT 0,1";

$r_post = mysql_query($sql_2) or die(mysql_error());
while ($aff_posts = mysql_fetch_array($r_post)) {
$text = $aff_posts['post_text'];
$text = substr ("$text", 0,200);
} //on ferme la boucle qui récupère le texte du post
echo "
<TR>
<TD><center class=Style1 >" . $time . "</center></TD>
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/".$title2."t" . $id . ".html\">" . $title . "</a><br /></div></center></TD>
<td>" . $text . "</td>
</TR>";
}//On ferme la boucle qui récupère le topic
mysql_close($dbh);
 
WRInaute discret
Sa fonctionne bien,
mais il me reste un problème, pour les bb codes du forum sur l'index, ils ne s'affiche pas bien, logique.
Comment faire pour qu'il utilise les bb codes du forum ? c'est possible vous croyez ? je sais, j'exagère mdr
 
WRInaute impliqué
J'ai fait une petite erreur sur la recuperation du titre pour le lien, remplace ça
$title2 = str_replace("-", " ", $title);

par

$title2 = str_replace(" ", "-", $title);

Par contre pour le BBcode, je t'avoue que je seche.
 
WRInaute impliqué
Encore une petite correction pour tes liens et ça devrait être bon. Remplace
<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/".$title2."t" . $id . ".html\">" . $title . "</a><br /></div></center></TD>

par

<TD><center class=Style1 ><div align=left><a href=\"http://www.psychologie-entre-aide.com/forum/".$title2."-t" . $id . ".html\">" . $title . "</a><br /></div></center></TD>
 
WRInaute discret
Djoule_logo a dit:
J'ai fait une petite erreur sur la recuperation du titre pour le lien, remplace ça
$title2 = str_replace("-", " ", $title);

par

$title2 = str_replace(" ", "-", $title);

Par contre pour le BBcode, je t'avoue que je seche.

Ok sa n'est pas grave, merci pour toute l'aide ;)

Je comprend mieux comment faire pour la prochaine foi ;)

wythi.
 
WRInaute discret
A re, tout conte fais, il y a une erreur, quand on clique sur un lien de la page d'accueil, il y a une erreur 404 :)

Dou cela pour t-il venire ?
wythi.
 
WRInaute impliqué
ouh la la pour l'url rewriting attention, c'est bien plus complexe. Il faut aussi traiter les accents, les mots courts etc... remplacer les espaces par un tiret n'est pas suffisant.

Je pense que tu utilise le mod seo d'url rewriting. Il faut donc appeler les fonctions du mod seo pour réécrire correctement les urls, et surtout les réécrire exactement de la même façon que le mod, car si tu fais une réécriture différente, autant laisser les url non réécrites
 
WRInaute discret
Je l'ai fais, je vais le refaire pour voir si je n'ai pas fais une erreur mais si j'observe le code source, si par exemple tu prend les topic du forum, dans l'url, il y a l'id sous cette forme: f21.html ore dans le code source, j'ai l'impression qu'il ne l'affiche pas sous cette forme

edit :
voici l'url du forum : http://www.psychologie-entre-aide.com/f ... -t122.html

et voici l'url du code source :
http://www.psychologie-entre-aide.com/f ... eries-privé-du-Forumt122.html

Il manque donc le (-) juste avent le "t122.html" je pence qu'il y aussis un problème avec les majuscules et les accens dans les url de la page d'accueil, mais la, sa devien vraiment trop technique :)
 
WRInaute discret
Voila, pour le "-txxx.html", j'ai règler le problème il me semble. mais pour les majuscules et les accens, la j'ai besoin d'aide :)
 
WRInaute impliqué
Personnellement, je ferai autrement.

l'url rewriting de ton forum utilise les titres pour générer des url. Mais ils nettoie ces titres pour enlever les accents, remplacer les espaces par un tiret, et supprimer les mots de moins de 2 lettres et mettre les majuscules en minuscule.

Pour ma part, je trouve que d'utiliser les titres dans les urls n'est pas une bonne solution. en effet, que se passe-t-il si plusieurs messages ont exactement le meme titre :lol: et gérer un forum avec beaucoup de topics devient vite un casse tête (difficle de etrouver facilement un topic dans la base quand tu n'as pas le numéro du topic...)

Sur notre site, qui comporte un forum phpbb3, j'ai donc procédé autrement. Les urls des topics sont réécrites plus simplement comme sur WRI d'ailleurs, soit de la forme -ttp://www.ceriseclub.com/forums/topic1.html
en modifiant le mod SEO, et en ne laissant les titres que pour les catégories

cette solution est beaucoup plus souple, permet de retrouver facilement un topic, de générer facilement l'affichage des topics à divers endroits et même dans les newsletter, alors qu'en utilisant les titres, c'est tout de suite plus lourd et bien plus compliqué à utiliser sur d'autres pages de ton site, car tu dois à chaque fois être très rigoureux dans le traitement de l'url rewriting

En outre, je ne connais pas ton référencement, mais si tu encore peu de sujets sur ton forum, je te conseille de modifier l'url rewriting sur cette forme.
Par ailleurs, une bonne optimisation de titres des pages est plus efficace et tu auras des urls plus propres, faciles à gérer, avec un identifiant unique correspondant au numéro du topic, et tu évites par ailleurs des urls à rallonge qui ne sont pas forcément un plus pour le référencement (MSN par exemple s'arrête à un certain nombre de tirets dans les url pour indexer les pages)
 
WRInaute discret
A ok, merci de ton explication.

donc ici moi j'utilise le mode avancé, et il vaudrais mieux que j'utilise l'intermédiaire sur le forum donc c'est bien sa ?
 
WRInaute discret
code a dit:
Personnellement, je ferai autrement.

l'url rewriting de ton forum utilise les titres pour générer des url. Mais ils nettoie ces titres pour enlever les accents, remplacer les espaces par un tiret, et supprimer les mots de moins de 2 lettres et mettre les majuscules en minuscule.

Pour ma part, je trouve que d'utiliser les titres dans les urls n'est pas une bonne solution. en effet, que se passe-t-il si plusieurs messages ont exactement le meme titre :lol: et gérer un forum avec beaucoup de topics devient vite un casse tête (difficle de etrouver facilement un topic dans la base quand tu n'as pas le numéro du topic...)

Sur notre site, qui comporte un forum phpbb3, j'ai donc procédé autrement. Les urls des topics sont réécrites plus simplement comme sur WRI d'ailleurs, soit de la forme -ttp://www.ceriseclub.com/forums/topic1.html
en modifiant le mod SEO, et en ne laissant les titres que pour les catégories

cette solution est beaucoup plus souple, permet de retrouver facilement un topic, de générer facilement l'affichage des topics à divers endroits et même dans les newsletter, alors qu'en utilisant les titres, c'est tout de suite plus lourd et bien plus compliqué à utiliser sur d'autres pages de ton site, car tu dois à chaque fois être très rigoureux dans le traitement de l'url rewriting

En outre, je ne connais pas ton référencement, mais si tu encore peu de sujets sur ton forum, je te conseille de modifier l'url rewriting sur cette forme.
Par ailleurs, une bonne optimisation de titres des pages est plus efficace et tu auras des urls plus propres, faciles à gérer, avec un identifiant unique correspondant au numéro du topic, et tu évites par ailleurs des urls à rallonge qui ne sont pas forcément un plus pour le référencement (MSN par exemple s'arrête à un certain nombre de tirets dans les url pour indexer les pages)

Voila, je vien de faire comme tu m'a expliquer, et la, je comprend bien ton chois, il est vrais que les manipulations sont beaucoup plus simple, et que c'est plus propre en fin sa m'a été tout simple de faire la modif, alors que avec l'autre technique de réécriture, j'y comprenais rien :)

et donc pour le référencement, sa ne risque rien ? bon la moi j'ai 900 messages plus ou moin sur le forum, donc pour sa sa vas :)
puis comme j'ai changé mon forum de dossier a un moment, j'attend que google face le netoyage avec le robots.txt.

En fin, voila un peut. je pence qu'on a fais le toure.

Mais avec l'obtimisation des titres, j'ai pas bien compris : mes titre ne sont pas bien injecter dans mes page ? ou ils sont trop long, ou pas dans un ordre adéquoit ? tu peut m'expliquer stp ? merci.
wythi.
 
Discussions similaires
Haut