[erledigt] Aktuelle Themen per SQL holen und einbinden

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

[erledigt] Aktuelle Themen per SQL holen und einbinden

Beitrag 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
Zuletzt geändert von Dude23 am 20.08.2007 12:15, insgesamt 3-mal geändert.
Benutzeravatar
DerVorstand
Mitglied
Beiträge: 10
Registriert: 15.08.2007 10:43

Beitrag 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
Wenn einem die Scheiße bis zum Hals steht, sollte man den Kopf nicht hängen lassen.
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

Beitrag von Dude23 »

Super! Genau sowas habe ich gesucht, hier lässt sich weiterarbeiten. Herzlichen Dank!
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

Beitrag 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.
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

Beitrag 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 ;-)
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
homoerectus
Mitglied
Beiträge: 252
Registriert: 10.11.2005 12:30

Beitrag 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
phpBB.de: link:Suche || link:doku || link:FAQ || link:KB || KB-Übersicht
außerdem:
Google || Wikipedia || SelfHTML
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

Beitrag 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.

Code: Alles auswählen

while ($row = mysql_fetch_assoc($erg))
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)
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

mei du machst sachen :D

jetzt sehe ich erst, dass du alles bunt gemischt hast :lol:

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ß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Dude23
Mitglied
Beiträge: 34
Registriert: 30.10.2005 15:10
Wohnort: Regensburg

Beitrag 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=#
Antworten

Zurück zu „Coding & Technik“