Seite 1 von 2
[erledigt] Aktuelle Themen per SQL holen und einbinden
Verfasst: 15.08.2007 13:18
von Dude23
Hallo,
ich möchte gerne auf meiner Webseite die letzten 5 Themen des phpBB anzeigen, in denen etwas geschrieben wurde - die Anzeige soll erfolgen als Thementitel, als Link und wenn möglich noch die Zeit des letzten Beitrags. Ich hab jetz ne Weile herumprobiert, hab aber das Gefühl, dass ich das ganze falsch angehe.
Vor ein paar Wochen habe ich schonmal etwas "gebaut", womit ein Thema eines bestimmten Unterforums dargestellt wird.
Das sieht so aus:
Code: Alles auswählen
<?
$verbindung = @mysql_connect("localhost","---","---");
$db_selected = mysql_select_db('usr_web57_4', $verbindung);
if (!$db_selected) {
die ('Kann DB nicht benutzen : ' . mysql_error());
}
$abfrage = "SELECT * FROM phpbb_topics WHERE forum_id=1";
$ergebnis = mysql_query($abfrage)
or die(mysql_error().'<hr />'.'$abfrage'.'<hr />');
while($row = mysql_fetch_object($ergebnis))
{
echo '<b>"';
echo $row->topic_title;
echo '"</b>';
}
mysql_close($verbindung);
?>
Ich dachte zunächst, ich müsste diesen Code nur erweitern und ausbauen. Allerdings ist mir die Sache etwas über den Kopf gewachsen ^^
Die Grundidee ist z.B. auf
www.eisbaeren-regensburg.de (rechts) zu sehen.
Hat vielleicht jemand eine Ahnung, wie man sowas am besten realisieren kann?
Vielen Dank im Voraus,
Dude
Verfasst: 15.08.2007 13:36
von DerVorstand
Also Ich hab das so gelöst:
Code: Alles auswählen
// aktuellsten Beitrag aus Forum holen
if ($result = mysql_query("SELECT * FROM `phpbb_posts` order by post_id desc limit 1")){
//Datum des letzten Beitrags holen
$row = mysql_fetch_object($result);
$frmDatum = date("d.m.Y",$row->post_time);
$frmZeit = date("H:i:s",$row->post_time);
$post = $row->post_id;
if ($result = mysql_query("SELECT topic_title FROM `phpbb_topics` where topic_id = $row->topic_id limit 1")){
//Topic des letzten Beitrags holen
$row = mysql_fetch_object($result);
echo'<tr><td nowrap class="tickertxt"><a href="http://forum.ffw-bechtsrieth.de/viewtopic.php?p='.$post.'#'.$post.'">
Letzte Beitrag im Forum am <b>'.$frmDatum.' um '.$frmZeit.' Uhr</b><br>
Im Bereich: '.$row->topic_title.'</a><hr></td></tr>';
}
} else {echo'keine Verbindung zum Forum';}
Das liefert allerdings nur den letzten Beitrag. Das liese sich aber sicherlich ausbauen
Verfasst: 15.08.2007 14:20
von Dude23
Super! Genau sowas habe ich gesucht, hier lässt sich weiterarbeiten. Herzlichen Dank!
Verfasst: 16.08.2007 00:30
von Dude23
Ach Gott, hab mich natürlich selbst überschätzt. Ich bringe es nicht auf die Reihe. Es werden mir zwar jetzt die letzten 5 benutzten Topics angezeigt, der Link und die Zeit bleiben aber immer gleich (also bei allen 5 Topics ist derselbe Link und dieselbe Zeit). Da ich bei PHP und SQL blutiger Anfänger bin, habe ich jetzt natürlich nicht nur die Übersicht verloren, sondern weiß eigentlich auch gar nicht mehr, was ich da gemacht hab.
Momentan schaut das ganze, das wohl sehr sehr falsch ist, so aus:
Code: Alles auswählen
$host="localhost";
$username="---";
$password="---";
$database="usr_web57_1";
//Verbindung zur Datenbank
mysql_connect($host, $username, $password);
//Datenbankauswahl
mysql_select_db($database);
$abf = 'SELECT * FROM phpbb_topics ORDER BY topic_time DESC LIMIT 0,5';
$erg = mysql_query($abf);
if ($result = mysql_query("SELECT * FROM phpbb_posts ORDER BY post_id DESC LIMIT 0,5")){
//Datum des letzten Beitrags holen
$row = mysql_fetch_object($result);
$frmDatum = date("d.m.Y",$row->post_time);
$frmZeit = date("H:i:s",$row->post_time);
$post = $row->post_id;
}
while ($row = mysql_fetch_assoc($erg)) {
echo "<font color=black size=2><a href=../phpBB/phpBB2/viewtopic.php?p=$post#$post><font color=black size=2>".$row['topic_title']."</a><br>$frmDatum $frmZeit<br></br>";
}
mysql_close();
Wie gesagt, ich blick nicht mehr durch und hab keine Ahnung, was ich da gemacht hab ^^
Vielleicht kann mir noch jemand helfen, wäre toll.
MfG
Dude
//edit: Ich merke gerade auch, dass die Darstellung nicht sortiert wird. Also die Auflistung der letzten 5 Topcis bleibt gleich (auch wenn in ein anderes Topic geschrieben wurde), ändern tun sich nur der Link und die Zeit.
Verfasst: 16.08.2007 19:36
von Dude23
Weiß keiner was? Es is kein Thema, das auf 2 Minuten beantwortet wird, ich weiß. Aber wenn jemand gerade Zeit und Lust hat

Verfasst: 17.08.2007 14:23
von mgutt
dieser Teil gehört in den while-Bereich:
Code: Alles auswählen
$frmDatum = date("d.m.Y",$row->post_time);
$frmZeit = date("H:i:s",$row->post_time);
$post = $row->post_id;
In deinem Fall füllst Du die Variablen nämlich nur einmal. Aber bei jedem Schleifendurchgang muss die Variable ja neu gefüllt werden. Am besten direkt nach der ersten geschweiften Klammer nach dem while positionieren.
Verfasst: 17.08.2007 14:27
von homoerectus
Hallo,
vielleicht hilft dir das weiter:
Recent Posts on Index
This hack displays the 5 most recently active topics on your index page.
Schöne Grüße, andi
Verfasst: 17.08.2007 16:19
von Dude23
@homoerecuts
Danke für die Mühe, aber das Problem ist, dass ich das ganze auf der Homepage selbst angezeigt haben möchte und nicht im Forum.
@mgutt
Ok, das hab ich soweit verstanden. Das Problem ist aber, dass im while-Bereich nur diese Abfrage
Code: Alles auswählen
$abf = 'SELECT * FROM phpbb_topics ORDER BY topic_time DESC LIMIT 0,5';
$erg = mysql_query($abf);
genommen wird.
D.h. ich müsste noch eine zweite Abfrage einbauen und die mit in diesen while-Bereich übernehmen?
Beziehungsweise:
Code: Alles auswählen
if ($result = mysql_query("SELECT * FROM phpbb_posts ORDER BY post_id DESC LIMIT 0,5"))
$result nehmen?
Wenn ich das so mache, wie du schreibst gibt es zwei Änderungen:
- Datum ist 01.01.1970 01:00:00 (anstatt dem jeweiligen Datum des letztes Posts im jeweiligen Thread)
- Link ist viewtopic.php?p=# (statt z.B. viewtopic.php?p=2300#2300)
Verfasst: 17.08.2007 20:07
von mgutt
mei du machst sachen
jetzt sehe ich erst, dass du alles bunt gemischt hast
probier mal so:
Code: Alles auswählen
$sql = 'SELECT * FROM phpbb_topics ORDER BY topic_time DESC LIMIT 0,5';
// wenn Abfrage möglich...
if ( $result = mysql_query($sql) )
{
// dann Schleife solange ein Ergebnis ausgelesen werden kann...
while ( $row = mysql_fetch_assoc($result) )
{
// mysql_fetch_assoc() füllt $row wie ein array() im Format: array('post_time' => 12345678)
$frmDatum = date("d.m.Y", $row['post_time']);
$frmZeit = date("H:i:s", $row['post_time']);
$post = $row['post_id'];
echo "<font color=black size=2><a href=../phpBB/phpBB2/viewtopic.php?p=$post#$post><font color=black size=2>".$row['topic_title']."</a><br>$frmDatum $frmZeit<br></br>";
}
}
habe auch ein paar kommentare dazu geschrieben. übrigens kannst du das mit dem datum auch in eine variable schreiben. "d.m.Y H:is" macht das gleiche, als wenn du beides separat in Variablen schreibst.
Gruß
Verfasst: 17.08.2007 23:22
von Dude23
Tut mir ja leid
Ich mag schon gar keine Fragen mehr posten, weil ich mir so dumm vorkomm^^
Ich probier das gleich mal aus.
//edit: Schade, Ergebnis ist leider das selbe wie oben.
Datum ist 01.01.1970 01:00:00, Link ist viewtopic.php?p=#