MyBB.de Forum

Normale Version: Prüfen auf neue Beiträge
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich möchte ein kleines Zusatzscript schreiben, mit dem geprüft werden kann, ob neue/ungelesene Beiträge im Forum sind.
Wie komme ich am besten an diese Information?

Wer sich fragt, wofür das gut sein soll:
Das Script gibt einfach ein Bild aus, welches anzeigt, ob neue Beiträge da sind. Dieses Script kann man dann als Icon auf einer Website einfügen (in meinem spezielle Fall geht es um ein Spiel, wo die Spieler üer neue Beiträge informiert werden sollen).
Ja, ich habs mitlerweile aus der search.php zusammengefrickelt. Das Problem dabei ist aber, dass erst nach einem klick auf "Alle Foren als gelesen markieren" keine neuen Beiträge mehr angezeigt werden, auch wenn auf der Übersichtseite keine neuen Beiträge mer angezeigt werden.
Das Problem liegt im System selbst, die automatische Funktion zum Markieren von Themen als gelesen funktioniert derzeit nur bedingt. Auch per Suche werden nur dann keine neuen Themen angezeigt, wenn diese manuell als gelesen markiert wurden. Eine Lösung kann ich leider nicht anbieten.
Das hat jetzt soweit alles funktioniert aber ich bin damit noch nicht ganz glücklich. Ich werde das jetzt nochmal eine andere Methode ausprobieren:
Ich prüfe einfach, welche Beiträge neuer sind als "lastvisit" des Benutzers. Dann wären da zwar nicht unbedingt ungelesene Beiträge dabei aber das wäre dann das selbe Verhalten, wie beim internen Spiel-Forum.

Allerdings habe ich dazu zwei Fragen:
- Wenn ich die globals.php einbinde, wird "lastvisit" dann automatisch hoch gesetzt? Das wäre bei mir ja nicht so günstig.
- Was hat es mit dem "loginkey" auf sich? Wenn ich die member.php richtig deute, ist "password" ein verschlüsselter MD5-Hash. Wie kann ich denn prüfen, ob Logindaten korrekt sind, wenn das kein MD5-Hash ist?

EDIT:
Nochmal zur Erklärung: Wie ich Nutzer und Passwort prüfe, steht ja in der member.php. Der Nutzer soll aber nicht sein Passwort mit schicken, sondern den MD5-Hash, damit damit erstmal niemand sonst was anfangen kann. Und ich will nun prüfen, ob der MD5-Hash seines Passworts stimmt aber so wie ich das sehe, ist das wohl nicht möglich!?
poncho schrieb:Wenn ich die globals.php einbinde, wird "lastvisit" dann automatisch hoch gesetzt? Das wäre bei mir ja nicht so günstig.
lastvisit wird dann aktualisiert, wenn sich der Benutzer ausloggt. lastactive wird bei jedem Seitenaufruf aktualisiert.
poncho schrieb:Was hat es mit dem "loginkey" auf sich? Wenn ich die member.php richtig deute, ist "password" ein verschlüsselter MD5-Hash. Wie kann ich denn prüfen, ob Logindaten korrekt sind, wenn das kein MD5-Hash ist?
Der Loginkey wird im Cookie gespeichert und dient so der Überprüfung, ob der Benutzer angemeldet ist. password beinhaltet einen md5 Hash des Passworts kombiniert mit dem Salt des Benutzers: md5(md5("passwort").md5("salt")).
Funktionen zum Überprüfen des Passworts findest du in der Datei inc/functions_user.php.
poncho schrieb:Nochmal zur Erklärung: Wie ich Nutzer und Passwort prüfe, steht ja in der member.php. Der Nutzer soll aber nicht sein Passwort mit schicken, sondern den MD5-Hash, damit damit erstmal niemand sonst was anfangen kann. Und ich will nun prüfen, ob der MD5-Hash seines Passworts stimmt aber so wie ich das sehe, ist das wohl nicht möglich!?
Damit der md5-Hash geschickt werden kann, müsste dieser ja auf der Benutzerseite vorhanden sein. Da er das nicht ist, solltest du es vielleicht über den Loginkey versuchen, der im Cookie gespeichert ist.
Es geht ja darum, dass der USer die Wahl haben soll: Entweder ganz normal per Cookie oder eben durch die Übergabe von Benutzernamen und Passwort-Hash (bla.php?user=abc&pass=XYZ)
Das habe ich jetzt auch so hinbekommen.

Allerdings bekomme ich keine neuen Beiträge angezeigt :/
Das ist mein Code bisher:

PHP-Code:
require './global.php';
require 
'./inc/functions_user.php';


if(isset(
$_GET['user']) and isset($_GET['pass']))
{
    
$r_user $db->query('
        SELECT uid, password, salt, usergroup, lastvisit
        FROM '
.TABLE_PREFIX.'users
        WHERE username = "'
.addslashes($_GET['user']).'"
    '
);
    if(
$user $db->fetch_array($r_user) and $user['password'] == salt_password(md5($_GET['pass']), $user['salt']))
    {
        
$uid $user['uid'];
        
$gid $user['usergroup'];
        
$lastvisit $user['lastvisit'];
    } else {
        
error($lang->error_invalidpassword);
    }
} elseif(
$mybb->user['uid'] > 0) {
    
$uid $mybb->user['uid'];
    
$gid $mybb->user['usergroup'];
    
$lastvisit $mybb->user['lastvisit'];
} else {
    
error($lang->error_nopermission_guest_1);
}
$r_perm $db->query('
    SELECT fid
    FROM '
.TABLE_PREFIX.'forumpermissions
    WHERE gid = '
.$gid.' AND canview = "yes"
'
);
if(!(
$db->num_rows($r_perm) > 0))
{
    
error($lang->error_nopermission_user_1);
}
$perms = array();
while(
$perm $db->fetch_array($r_perm))
{
    
$perms[] = $perm['fid'];
}
$r_posts $db->query('
    SELECT COUNT(pid) AS counter
    FROM '
.TABLE_PREFIX.'posts
    WHERE dateline > '
.$lastvisit.' AND fid IN('.implode(','$perms).')
'
);
if(!(
$posts $db->fetch_array($r_posts)))
{
    
error($lang->error);
}
#header('Last-Modified: '.date('r'));
header('Expires: '.date('r'time() + 300));
header('Cache-Control: max-age=300');
header('Content-Type: image/gif');
if(
$posts['counter'] > 0)
{
    
$im imagecreatefromgif('iconon.gif');
#   $col_text = imagecolorallocate($im, 128, 64, 64);
    
$col_text imagecolorallocate($im255255255);
    
$box imagettfbbox(80'arialbd.ttf'$posts['counter']);
    
imagettftext($im80$box[2] / 212$col_text'arialbd.ttf'$posts['counter']);
    
ob_start();
    
imagegif($im);
    
$output ob_get_contents();
    
$filesize ob_get_length();
    
ob_end_clean();
    
header('Content-Length: '.$filesize);
    print 
$output;
} else {
    
header('Content-Length: '.filesize('iconoff.gif'));
    
readfile('iconoff.gif');


OK, es liegt daran, dass die Foren die Einstellung der übergeordneten Foren/Kategorien übernehmen.
Mal schaun, wie ich das nun wieder umsetze :/