MyBB.de Forum

Normale Version: Letztes Beitragsdatum eines Themas auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Huhu, ich versuche seit einiger Zeit auf http://sw-battlefront.de/fdg_v2/ die letzten Foreneinträge mit dem Datum und Uhrzeit vom letzten Beitrag zu versehen.

Ich nutze hierzu folgendes Script:

PHP-Code:
<?php

function echo_threads()
{
    
// Daten für Verbindung zur Datenbank / Nicht swbf-Datenbank!
        
$dbhost "xxx";
        
$dbuser "xxx";
        
$dbpassword "xxx";
        
$dbdatabase "xxx";

    
// Prefix
    // Standart: $prefix = "mybb_";
        
$prefix "mybb_";

    
// URL zum Forum
    // Zum automatischen beziehen der Adresse keine Adresse eintragen
    // Zum manuellen setzen der Forum URL bitte URL eintragen OHNE "/" AM ENDE!
    // Zum Beispiel: $url = "http://www.board.broatcast.de";
        
$url "http://www.fdg-clan.de/forum";

    
// UTF-8 Codierungsvariable
    // Zum aktivieren auf "on" stellen (nur aktivieren wenn fehlerhafte Codierungen ausgegeben werden).
    // Zum deaktivieren auf "off" stellen
    // Standart: $uft8_debug_function = "off";
        
$utf8_debug_function "off";

    
// Anzahl der angezeigten Themen
        
$limit "8";

    
// Datums Ausgabe Aktivieren
    // "on" zum aktivieren / "off" zum deaktivieren
        
$datum "off";

    
// Datums Format
    // 0: "23.01.09"
    // 1: "23.01.2009"
    // 2: "23-01-09"
    // 3: "23-01-2009"
    // 4: "18:56 23.01.09"
    // 5: "18:56 23.01.2009"
    // 6: "06:56 PM 23-01-09"
    // 7: "06:56 PM 23-01-2009"
    // 8: "Friday 23rd of January 2009 06:56:50 PM"
    // 9: "Friday the 23rd"
        
$datumf "0";

    
// Username anzeigen
    // "on" zum aktivieren / "off" zum deaktivieren
        
$user "off";

    
// Username als Link anzeigen
    // "on" zum aktivieren / "off" zum deaktivieren
        
$userl "off";

    
// Datum und/oder User in neuer Zeile anzeigen
    // "on" zum aktivieren / "off" zum deaktivieren
        
$datumuser "off";

    
// Ausschließen bestimmter Foren anhand deren ID's
    // einfach das Array mit den ID füllen zbs.: array('99', '20', '89')
        
$fid = array();
        
        


    
/*    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        !!AB HIER NICHTS MEHR ÄNDERN ES SEI DENN, SIE WISSEN WAS SIE TUN !!
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */


    // Initialisierung der Fehlermeldungen
        
error_reporting(0);
        
$error1 '<br /><strong>Fehler:</strong><br />Die Verbindung zum Datenbank Server 
                            ist fehlgeschlagen.<br /><br /><strong>Wie beheben Sie diesen Fehler:
                            </strong><br />1. Stellen Sie sicher das Sie die MySql Datenbank Verbindung
                            in den Zeilen 70-72 in der Datei new_thread.php eingetragen haben.<br />
                            2. Stellen Sie sicher das die eingetragnen Verbindungsdaten korrekt sind.
                            <br />3. Stellen Sie sicher das der Datenbankserver erreichbar ist.
                            <br /><br /><strong>Weitere Gr&uuml;nde:</strong><br />1. Auf den meisten
                            Freehostern ist es nicht gestattet Verbindungen mit externen 
                            Datenbankservern aufzunehmen.<br />2. Der Datenbankserver l&auml;uft nicht.'
;
        
$error2 '<br /><strong>Fehler:</strong><br />Auf die Datenbank konnte nicht 
                            zugegriffen werden.<br /><br /><strong>Wie beheben Sie diesen Fehler:
                            </strong><br />1. Stellen Sie sicher das Sie den Datenbanknamen in Zeile
                            73 der Datei new_thread.php eingetragen haben.<br />2. Stellen Sie sicher 
                            das der angegebene Datenbankname korrekt ist.<br />3. Stellen Sie sicher
                            das der Datenbankuser Zugriffsrechte auf die angegeben Datenbank hat.'
;
        
$error3 '<br /><strong>Fehler:</strong><br />Die Tabelle ist nicht erreichbar.<br />
                            <br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen Sie 
                            sicher das sie Das Datenbankprefix in Zeile 77 in der Datei new_thread.php 
                            richtig eingetragen haben.<br /><br /><strong>Info:</strong><br />1. Das 
                            Datenbankprefix haben Sie bei der Installation Ihres Boards/Forums 
                            angegeben.<br />2. Sollten Sie es nicht ge&auml;ndert haben so lautet es 
                            Standdartm&auml;&szlig;ig bei MyBBoard "mybb_".'
;
        
$error4 '<br /><strong>Fehler:</strong><br />Die Angabe Ihrer URL ist nicht korrekt.
                            <br /><br /><strong>Wie beheben sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie Eine URL in Zeile 83 der Datei new_thread.php eingetragen 
                            haben.<br />2. Stellen Sie sicher das Sie am Ende der URL kein "/" 
                            eingetragen haben.<br />3. Wahlweise k&ouml;nnen Sie diese Option auf 
                            frei lassen um die Adresse automatisch beziehen zu lassen.'
;
        
$error5 '<br /><strong>Fehler:</strong><br />Die Limit Einstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie ein Limit in der Zeile 92 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nicht "0" betr&auml;gt.'
;
        
$error6 '<br /><strong>Fehler:</strong><br />Die Datums Einstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die Datums Einstellung in der Zeile 96 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nur "on" oder "off" lautet.'
;
        
$error7 '<br /><strong>Fehler:</strong><br />Die Datumsformat Einstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die Datumsformat Einstellung in der Zeile 109 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            "9" nicht &uuml;berschreitet oder einen negativen Wert hat.'
;
        
$error8 '<br /><strong>Fehler:</strong><br />Die Datumszeilen Einstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die Datumszeilen Einstellung in der Zeile 121 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nur "on" oder "off" lautet.'
;
        
$error9 '<br /><strong>Fehler:</strong><br />Die Userseinstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die Userseinstellung in der Zeile 113 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nur "on" oder "off" lautet.'
;
        
$error10 '<br /><strong>Fehler:</strong><br />Die Userslinkeinstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die Userslinkeinstellung in der Zeile 117 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nur "on" oder "off" lautet.'
;
        
$error11 '<br /><strong>Fehler:</strong><br />Die Auszuschließenden ForenID\'s sind 
                            nicht richtig konfiguriert worden.<br /><br /><strong>Wie beheben Sie diesen 
                            Fehler:</strong><br />1. Stellen Sie sicher das Sie das Ausschlussarray 
                            in der Zeile 125 der Datei new_thread.php wie im Beispiel richtig ausgef&uuml;llt 
                            haben.<br />2. Stellen Sie sicher das die eingetragenen ForenID\'s auch 
                            existieren.'
;
        
$error12 '<br /><strong>Fehler:</strong><br />Die UTF-8 Codierungseinstellung ist nicht korrekt.
                            <br /><br /><strong>Wie beheben Sie diesen Fehler:</strong><br />1. Stellen 
                            Sie sicher das Sie die UTF-8 Codierungseinstellung in der Zeile 89 in der Datei new_thread.php 
                            eingetragen haben.<br />2. Stellen Sie sicher das der eingetragene Wert 
                            nur "on" oder "off" lautet.'
;
        
$error21 '<br /><strong>Fehler:</strong><br >Konnte kein charset einstellen!<br /><br />
                            <strong>Wie beheben Sie diesen Fehler:</strong><br />Stellen Sie sicher dass
                            die Datenbank in UTF-8 gespeichert ist.<br /> 2. Stellen Sie sicher dass Sie 
                            MYSQL in der Version 5.0.7 oder h&ouml;her nutzen.'


    
// Überprüfung der eigetragenen Domain
        
if (!empty($url)) 
        {
            if (
$url == "" OR (preg_match("~/$~"$url)))
            {
                return 
$error4;
                break;
            }
        }

    
// Überprüfung des eingestellten Limits
        
if (!is_numeric($limit) OR $limit <= "0")
        {
            return 
$error5;
            break;
        }

    
// Überprüfung der Datumseinstellung
        
if ($datum != "on" AND $datum != "off")
        {
            return 
$error6;
            break;
        }

    
// Überprüfen der Datumsformateinstellung
        
if (!is_numeric($datumf) OR $datumf "9" OR $datumf "0")
        {
            return 
$error7;
            break;
        }

    
// Überprüfen der Datumszeileneinsellung
        
if ($datumuser != "on" AND $datumuser != "off")
        {
            return 
$error8;
            break;
        }

    
// Überprüfung der Userseinstellung
        
if ($user != "on" AND $user != "off")
        {
            return 
$error9;
            break;
        }

    
// Überprüfung der Userlinkseinstellung
        
if ($userl != "on" AND $userl != "off")
        {
            return 
$error10;
            break;
        }

    
// Überprüfung der UTF-8 Codierungseinstellung
        
if ($utf8_debug_function != "on" AND $utf8_debug_function != "off")
        {
            return 
$error12;
            break;
        }

    
// Verbindung zur Datenbank aufnehmen
        
if(!$db mysql_connect($dbhost,$dbuser,$dbpassword)) return($error1);
        if(!
mysql_set_charset('utf8',$db)) return($error21);
        if(!
mysql_select_db($dbdatabase,$db)) return($error2); 

    
// Beziehen der Foren ID's
        
if (!empty($fid))
        {
            
$fids = Array();
            if(!
$querys mysql_query("SELECT fid FROM ".$prefix."forums")) return($error3);
            while(
$row mysql_fetch_assoc($querys))
            {
                
$fids[] = $row['fid'];
            }
        }

    
// Existenz der ForenID's überprüfen
        
if (!empty ($fid))
        {
            foreach(
$fid as $value)
            {
                if(!
in_array($value$fids)) return($error11);
            }
        }

    
// Beziehen der Forum Adresse
        
if (empty($url))
        {
            if(!
$querys mysql_query ("SELECT value FROM ".$prefix."settings WHERE name='bburl'")) return($error3);
            
$row mysql_fetch_assoc($querys);
            
$url $row['value'];
        }

    
// Beziehen der SEO Informationen
        
if(!$querys mysql_query ("SELECT value FROM ".$prefix."settings WHERE name='seourls'")) return($error3);
        
$row mysql_fetch_assoc($querys);
        
$seodata $row['value'];

    
// Festlegen der URL anhand der SEO Einstellungen
        
switch($seodata)
        {
            case 
"yes":
                
$seo "thread-";
                
$seoul "user-";
                
$seourl "1";
                break;
            case 
"auto":
                
$seo "showthread.php?tid=";
                
$seoul "member.php?action=profile&uid=";
                break;
            case 
"no":
                
$seo "showthread.php?tid=";
                
$seoul "member.php?action=profile&uid=";
                
$seourl "0";
                break;
            default:
                return 
"Die SEO Einstellungen konnten nicht bezogen werden.";
                
$seourl "0";
                break;
        }

        if (
$seourl == "1")
        {
            
$html ".html";
        }

    
// Datums Format beziehen
        
switch ($datumf)
        {
            case 
0:    $datef    =    "d.m.y"; break;
            case 
1:    $datef    =    "d.m.Y"; break;
            case 
2:    $datef    =    "d-m-y"; break;
            case 
3:    $datef    =    "d-m-Y"; break;
            case 
4:    $datef    =    "d.m.y H:i"; break;
            case 
5:    $datef    =    "H:i d.m.Y"; break;
            case 
6:    $datef    =    "h:i A d-m-y";    break;
            case 
7:    $datef    =    "h:i A d-m-Y";    break;
            case 
8:    $datef    =    "l dS \of F Y h:i:s A"; break;
            case 
9:    $datef    =    "l \\t\h\e jS"; break;
        }

        if (
$datumuser == "on")
        {
            
$break "<br />";
        }

    
// Foren ID's auslassen
        
if (!empty($fid))
        {
            
$fidout "AND fid not in(".implode(",",$fid).")";
        }

    
// Liste starten
        
echo '';

    
// Letzte Themen auslesen
        
$query_txt "SELECT tid, subject, uid, username, dateline, lastpost FROM `".$prefix."threads` WHERE visible=1 ".$fidout." AND `closed` NOT LIKE 'moved|%' ORDER BY lastpost DESC LIMIT 0,".$limit."";
        
$query mysql_query ($query_txt);
        

        while (
$newest_threads mysql_fetch_array($query))
        {
            
$i++;
            if (
$datum == "on")
            {
                
$date " - ".date($datef,$newest_threads['dateline'])." ";
            }
            if (
$user == "on")
            {
                if (
$userl == "off")
                {
                    
$users " von ".utf8_debug($newest_threads['username']);
                }
                else
                {
                    
$users " von  <a href=\"".$url."/".$seoul.$newest_threads['uid'].$html."\">".utf8_debug($newest_threads['username'])."</a>";
                }
            }
            
$output "<img src=\"img/jump.png\" title=\"Zum Beitrag ...\" width=\"15\" height=\"15\"><a href=\"";
            
$output .= $url."/".$seo.$newest_threads['tid']."&action=lastpost".$html."\">".utf8_debug($newest_threads['subject'])."</a><br />";
            
$output .= $break;
            
$output .= $date;
            
$output .= $users."";
            echo 
$output
            
        }

    
// Liste schließen
        
echo "";
}

function 
utf8_debug($message)
{
    if (
$utf8_debug_function == "on")
    {
        
$find = array(
                        
"ö",
                        
"ä",
                        
"ü",
                        
"Ö",
                        
"Ä",
                        
"Ü"
                    
);

        
$replace = array(
                            
"&ouml;",
                            
"&auml;",
                            
"&uuml;",
                            
"&Ouml;",
                            
"&Auml;",
                            
"&Uuml;"
                        
);

        
$message str_replace($find$replace$message);
        
    }
    
    if (
strlen($message) > 28) {
        
$message substr($message025) . '...';
    }

    return 
$message;


     
// Aufrufen der Funktion
   
echo(echo_threads());
?>

Ich möchte nicht das Datum der Themenerstellung auslesen, sondern das Datum des letzten Beitrags inklusive Uhrzeit. Wie lässt sich das bewerkstelligen? Danke schonmal für die Hilfe. Smile
Moin,

das Datum wird bereits aus der Datenbank geholt und steckt in $newest_threads['lastpost'].

Noch ein Hinweis: Du scheinst Username, Betreff, etc. vor der Ausgabe nicht zu escapen. Das kann ein Sicherheitsrisiko sein, da User darüber Code in deine Seite bringen können.
Du änderst in Zeile #311 einfach:
PHP-Code:
$date " - ".date($datef,$newest_threads['dateline'])." "

zu:
PHP-Code:
$date " - ".date($datef,$newest_threads['lastpost'])." "
Ich danke euch beiden. Smile

Escapen? Ich hab mal danach gegooglet. Meinst du, es besteht die Gefahr einer sql-injection?

Wo müsste ich denn escapen damit das Script sicher ist?
Alle Benutzereingaben – und damit fast alles, was aus der Datenbank geholt wird – sollte escaped werden, z.B. mit htmlspecialchars().

Weiterführende Informationen:
https://de.wikipedia.org/wiki/Cross-Site-Scripting
http://www.php-kurs.com/cross-site-scrip...binden.htm