Système de news avec un forum phpbb

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 03:11

Je regarde moi aussi et je me demande: La concaténation des variables est-elle nécessaire? Et la réponse que je trouve : non.

Car, si ta variable contient un nombre, quelqu'il soit, tu dois l'écrire intact, sans guillemets et encore moins de concaténation. Si ta variable contient une chaîne de caractères, tu dois à ce moment l'écrire entre guillemets, sans points de concaténation. Et ça revient à ce que j'ai soulevé plus haut: Une erreur dans ta requête.

Bien sûr, fab, il peut tester dans phpmyadmin par contre il nous dira que ça fonctionne super car il aura remplacé les variables par leur valeurs et ne verra pas son problème de concaténation.

Au fait, qu'est-ce que le ORDER BY blablab ASC?
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 03:37

tu as testé cette requete dans phpmyadmin ? si oui est-ce qu'elle affiche ce que tu veux ?
Ben a vrai dire ça m'affiche pas mal de trucs ouais ^^ Que je ne comprend pas mais ouais....
Je regarde moi aussi et je me demande: La concaténation des variables est-elle nécessaire? Et la réponse que je trouve : non.
Heu... la concaténation ? C'est les points ? ". $get_news['topic_id'] ." et ". $get_news['topic_poster'] ."

Ben je ne sais pas, si tu dis que non, je te crois ^^. A vrai dire je n'en connais pas encore assez !! Mais ça va rentrer :). J'y travaille en ce moment, et puis la nuit n'est pas encore finie :P
ImageQue la force soit en FireFox ^^.

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 03:42

Ben a vrai dire ça m'affiche pas mal de trucs ouais ^^ Que je ne comprend pas mais ouais....
Ça t'affiche "Erreur" :lol:

Sérieusement, remplace les trucs " . $variable . " par "$variable" dans ta requête
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 03:48

lol ^^. Non ça ne m'affiche pas "erreur" ! Mais en fait comme je ne sais pas ce qu'il faut que je vois.... ben je ne vois rien... d'anormal oO.
Ok, je vais supprimer les concaténations !! Mais ça va changer quoi en fait ?


Edit:J'ai changé les ".$variables." par "$variables", j'ai donc
SELECT *
                    FROM     phpbb_posts,
                        phpbb_posts_text
                    WHERE
                        phpbb_posts.topic_id = "$get_news['topic_id']" // la ligne 55 c'est celle-ci
                    AND
                        phpbb_posts.poster_id = "$get_news['topic_poster']"
                    AND
                        phpbb_posts_text.post_id = phpbb_posts.post_id
                    ORDER BY
                        phpbb_posts.topic_id ASC LIMIT 1");
Mais maintenant j'ai une erreur dès la première variable : "$get_news['topic_id']"

Parse error: parse error, unexpected T_VARIABLE in /var/www/free.fr/b/1/home/forum/news.php on line 55
Modifié en dernier par Obiwan-sensei le 26 déc. 2005, 03:54, modifié 1 fois.
ImageQue la force soit en FireFox ^^.

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 03:49

Tu as toujours un mysql_fetch_array supplied arguement is not a valid result ressource?

Normalement non...
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 03:56

Ben non ! C'est bien pire ^^ ! Enfin en tout cas il y a toujours de belles erreurs ;)
Je me suis gourré dans la syntaxe ? Et moi qui trouvais le français difficile :lol: :roll:
ImageQue la force soit en FireFox ^^.

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 04:00

Oui bon... regarde, j'ai corrigé le bout de code qui cloche dans la requête de la fin:
<?
$mysql_host = ""; //Le host du serveur
        $mysql_login = ""; //le login ou l'username du serveur
        $mysql_pass = ""; //le mot de pass du serveur
        $db_name = ""; //Le nom de votre base de donnée
           
        $db_link = @mysql_connect($mysql_host,$mysql_login,$mysql_pass);
        if(!$db_link) {
                 echo "Connexion impossible à la base de données";
            }

        $db_selected = mysql_select_db($db_name,$db_link);
        if (!$db_selected) {
                         die ('Impossible d\'utiliser la base : ' . mysql_error()); }





        // 1. mov_topics -> regarde dans la base de donnée, car avec phpbb on peu utilise ce qu'on souhaitecomme prefix, donc il est fort probable qu'il y ai ecrit phpbb_topics (standart si je me souvien bien)
// 2. le forum_id c'est le id du salon ... il faudra donc changer celui la du salon que tu souhaite afficher les topics                    
$sql_get_news = mysql_query("SELECT * FROM phpbb_topics WHERE forum_id = 2 ORDER BY topic_time DESC LIMIT 1");
$get_news = mysql_fetch_array($sql_get_news));

   // changer le prefix et le id du salon
      $sql_get_news_next = mysql_query("SELECT * FROM phpbb_topics WHERE forum_id = 2 ORDER BY topic_time DESC LIMIT 1");
?>

<div style="font-size: 12px; font-weight: bolder; font-family: Verdana;">    
<?
                           
   while ($get_news_next = mysql_fetch_array($sql_get_news_next))
   {
     echo $get_news_next['topic_title']."<br />";
   }
?>
</div>

<?
                         
// Ici il suffit juste de changer le mov_topics pour ton prefix comme si dessus
$sql_get_replies = mysql_query("SELECT topic_replies FROM phpbb_topics WHERE topic_id = ".$get_news['topic_id']);
$get_replies = mysql_fetch_array($sql_get_replies);

                         
// Pareil ici, changer le prefix
$sql_get_poster = mysql_query("SELECT username FROM phpbb_users WHERE ". $get_news['topic_poster'] ." = user_id");
$get_poster = mysql_fetch_array($sql_get_poster);
                         
// toujours pareil changer les prefix
$sql_get_body = mysql_query("SELECT *
                    FROM     phpbb_posts,
                        phpbb_posts_text
                    WHERE
                        phpbb_posts.topic_id = "$get_news['topic_id']"
                    AND
                        phpbb_posts.poster_id = "$get_news['topic_poster']"
                    AND
                        phpbb_posts_text.post_id = phpbb_posts.post_id
                    ORDER BY
                        phpbb_posts.topic_id DESC LIMIT 10");
while ($get_body = mysql_fetch_array($sql_get_body))
{
echo $get_body['post_text']; }
?>
Maintenant, je vais aller jeter un oeil aux tables phpbb question d'y voir plus clair...

EDIT: Au fait, ce script, c'est pour récupérer la news ou les commentaires?
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 04:09

J'ai essayé avec ton code, et ça rend :
Parse error: parse error, unexpected ')' in /var/www/free.fr/b/1/home/forum/news.php on line 23
Soit =>$get_news = mysql_fetch_array($sql_get_news));<= est faux
:( J'ai enfin compris à quoi servait le ASC à la fin de la requête : à rien :D, puisque c'est dans l'ordre décroissant, c'est bien ça ?
Umm... pour les tables il y en a tellement sur les forums phpbb que ça me fait un peu peur moi, s'triste :cry:
Merci de veiller pour moi :D

Edit: Bah en fait, je veux le premier post affiché, et après le nombre de commentaires dans une parenthese au dessous !, avec un lien direction le forum, pour pouvoir voir et ajouter des coms !
ImageQue la force soit en FireFox ^^.

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 04:39

$get_news = mysql_fetch_array($sql_get_news));

C'est cette ligne qui cloche, tu l'avais sans doute corrigé mais j'ai pris ton dernier code posté. Remplace par:

$get_news = mysql_fetch_array($sql_get_news);

Ne serait-il pas 100 fois plus simple de faire ainsi:

Chaque fois que tu postes une news, ça insère à la fois dans la table correspondante de phpbb et à la fois dans une table news.

Ce qui selon moi, rendrait les choses vraiment plus simple.

Au fait, pour faire cela, il faudrait davantage se pencher sur l'insertion dans la base que sur l'affichage car il en sera grandement facilité :wink: Tu es intéressé par cette solution?
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 04:56

Ouais, c'est pas con du tout ! Je n'y avais pas pensé, mais... ça pourra fonctionner pareil ? Et ça pourra fonctionner tout court ? C'est possible d'insérer dans deux tables ? Tu fais un insert into *** suivi de la même chose sur une autre table ? C'est ça ?

Ouais, c'est vrai qu'il faudrait que j'en apprenne un peu plus sur les BDD :roll:

Umm.... Même avec la correction $get_news = mysql_fetch_array($sql_get_news); ça ne fonctionne pas pour les variables où on a elevé les concaténations phpbb_posts.topic_id = "$get_news['topic_id']" ... :cry:

Peut être bien que ce serait plus simple de faire avec deux tables, mais il faut tout refaire :o :(. Et surtout il faut modifier le code de phpbb, et ça sa dépace encore plus mon niveau de nouveau jeune petit débuttant ^^ ! Umm... Dur !! Ce serait quand même bien que ça puisse fonctionner ce code là :P !
ImageQue la force soit en FireFox ^^.

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 05:27

Nous allons pour simplifier les choses faire deux INSERT INTO.

D'abord, crée ta table news, je te montre la structure que j'utilise:

Code : Tout sélectionner

CREATE TABLE `news` ( `date` varchar(255) NOT NULL, `titre` varchar(255) NOT NULL, `nouvelle` longtext NOT NULL, `par` varchar(255) NOT NULL );
Tu peux exécuter directement dans phpmyadmin.

Là, par contre, il y a 4 tables dans lesquelles il faut insérer pour phpbb et 1 autre pour les news (celle que je t'ai fait créé).

Seulement, la structure est un peu difficile à comprendre... C'est pourquoi, avec la superbe tendance que j'ai à faire mes propres scripts (parce que je comprends que les miens :lol: ), je vais te recommander de faire ton propre système de commentaires.

Tu as maintenant ta propre table news.

Tu vas maintenant créé une table commentaires, avec cette structure:

Code : Tout sélectionner

CREATE TABLE `commentaires` ( `date` varchar(255) NOT NULL, `nouvelle` varchar(255) NOT NULL, `par` longtext NOT NULL, `commentaire` varchar(255) NOT NULL );
Maintenant que tu as tes deux tables, tu peux insérer dans les deux lorsque tu postes, avec deux INSERT INTO, si tu as des questions, pose les, je suis plutôt pressé, je vais revenir demain.
Image

Eléphanteau du PHP | 14 Messages

26 déc. 2005, 05:41

Umm ! Je ne comprend pas pourquoi pourquoi tu créés deux tables ? Parce que en fait les commentaires sont les messages suivants le premier ! je veux dire, le premier message du dernier topic créé dans un certain forum, est considéré comme la "news", donc le message qu'il faut afficher, et les messages en réponse à ce premier message dans le topic sont considérés comme "commentaires". Donc je pensais qu'il suffirait de copier dans une nouvelle table seulement les messages et topic du forum "news", du coup on aurait pû les récupérer dans cette table ! Mais là j'avoue ne pas trop comprendre ! Parce que là en fait tu fais un système à part entière, complétement indépendante du forum ? Non ? Umm.. oO !

Ouais, merci @ demain, moi aussi je vais quitter ce lieu pour visiter mon pieux ^^, disons qu'il est un peu 04:41 h du matin quoi :). Merci, je vais réfléchir pendant ce reste de nuit... peut être je vais rêver mon code :P ! Merci ! @ ++
ImageQue la force soit en FireFox ^^.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 déc. 2005, 15:28

Franchement là je comprend rien a ce que tu as voulu faire ( a part des erreurs :wink: )
Ben a vrai dire ça m'affiche pas mal de trucs ouais ^^ Que je ne comprend pas mais ouais....
Ça t'affiche "Erreur" :lol:

Sérieusement, remplace les trucs " . $variable . " par "$variable" dans ta requête
j'ai corrigé le bout de code qui cloche dans la requête de la fin:
$sql_get_body = mysql_query("SELECT *
                    FROM     phpbb_posts,
                        phpbb_posts_text
                    WHERE
                        phpbb_posts.topic_id = "$get_news['topic_id']"
                    AND
                        phpbb_posts.poster_id = "$get_news['topic_poster']"
                    AND
                        phpbb_posts_text.post_id = phpbb_posts.post_id
                    ORDER BY
                        phpbb_posts.topic_id DESC LIMIT 10");


Dans une chaine de caractères il est toujours recommandé de séparer les variables du reste donc concaténations. donc la syntaxe initiale était correcte niveau structure!!

aurais-je loupé un chapitre ?! :roll:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 649 Messages

26 déc. 2005, 17:53

Dans une chaine de caractères il est toujours recommandé de séparer les variables du reste donc concaténations. donc la syntaxe initiale était correcte niveau structure!!
Oui mais avec la concaténation, ça revient à écrire la valeur de la variable en clair, pas entouré de guillemets ni d'apostrophes, ce qui est une erreur. Ce qu'il aurait pu faire: '" . $variable . "'.
Image

Eléphanteau du PHP | 14 Messages

31 déc. 2005, 20:20

Salut à tous,
J'ai réussi à faire un code potable:
<?
include($_SERVER["DOCUMENT_ROOT"]."basededonneeconnexion.php");

	$dbconn		= @mysql_connect($host,$user,$pass);
	if(!$dbconn){die('La Connexion au Serveur MySQL a échoué. ('.mysql_error().')');};
	$dbsele		= @mysql_select_db($bdd,$dbconn);
	if(!$dbsele){die('La Connexion à la Base a échoué. ('.mysql_error().')');};
	$query		= "SELECT topic_id, 
						  topic_title As title,
						  topic_time As date, 
						  topic_replies As commentaires,
						  topic_poster As poster,
						  username As poster_name,
						  post_text As post						  
						  FROM `phpbb_topics`, `phpbb_users`, `phpbb_posts_text`
						  WHERE forum_id = 1 AND post_id = topic_first_post_id
						  ORDER BY topic_id  
						  DESC LIMIT 0,5";
						  
						  
	$result		= @mysql_query($query);
	if(!$result){die('La Requête sur la Base a échoué. ('.mysql_error().')');};

	while($post = @mysql_fetch_array($result)){
?>
<div class="news">
	
  <div class="title"> &nbsp;<strong>&bull; 
    <?=$post["title"]?>
    </strong> 
  </div>
	<div class="post">
		<?=$post["post"]?>
	</div>
	<div class="comments">
		[ <?=date("d/m/y H:i",$post["date"])?> ] - [ Par <a href="/forum/profile.php?mode=viewprofile&u=<?=$post["poster"]?>"><?=$post["poster_name"]?></a> ] - [ <a href="/forum/viewtopic.php?t=<?=$post["topic_id"]?>">Commentaires</a> (<a href="/forum/viewtopic.php?t=<?=$post["topic_id"]?>"><?=$post["commentaires"]?></a>) ]
	</div>
</div>
<?
	}
?>
Ce qui me donne ça
• du nouveau
alors ca fonctionne maintenant
[ 31/12/05 19:04 ] - [ Par Anonymous ] - [ Commentaires (1) ]
• du nouveau
alors ca fonctionne maintenant
[ 31/12/05 19:04 ] - [ Par admin] - [ Commentaires (1) ]
• qq nouvelles
c tt
[ 31/12/05 18:24 ] - [ Par Anonymous ] - [ Commentaires (0) ]
• qq nouvelles
c tt
[ 31/12/05 18:24 ] - [ Par admin] - [ Commentaires (0) ]
• Le site
Voici donc le forum de TP. C'est ici que vous pourrez discutter et échanger ce que vous voudrez ...
[ 21/10/00 02:01 ] - [ Par Anonymous ] - [ Commentaires (1) ]
Mais comme vous pouvez voir, j'ai deux fois la même news qui s'affiche, et ça pour chacune, alors que je n'ai besoin que d'une seule ^^. Voilà donc, savez vous pourquoi ça se passe comme ça ? Merci
ImageQue la force soit en FireFox ^^.