Als Eingeloggter User noch nicht gelesene Forumeinträge Markiert anzeigen

dAk0Ta

Mitglied
Hallo. Ich bin ein recht frischer Neuling in sachen PHP hab aber schon einige Scripts Programmiert unteranderem auch ein Forum, zwar noch nicht ausgereift aber es Funktioniert :rolleyes:
Nun möchte ich dem User noch eine weitere Funktion anbieten die ich denke mal jeder von euch kennt. Unzwar möchte ich es das der User sich einloggt ins Forum geht und dann soll die Möglichkeit bestehen zu sehen welche Einträge er schon gelesen hat oder welche noch nicht. Und da weiß ich jetzt absolut nicht wie ich das am besten anfange. Ich habe zwar eine Idee die wie folgt aussieht:
Es wird ja registriert wann der User das letzte mal sich eingeloggt hat da hab ich mir gedacht das ich einfach dieses Datum und Zeit nehme und mit den Forumeinträgen kontrolliere und alle Einträge die nach dieser Zeit sind, werden als "Noch nicht gelesen" markiert. Doch der Haken an dieser sache is ja, dass wenn der User sich einloggt bissl rumguckt nicht einmal im Forum gewesen ist und sich dann wieder ausloggt das die Einträge ja dann auch als "Gelesen" markiert sind obwohl er sie ja nicht gelesen hat. Kann mir jemand vielleicht nen Ruck geben wie ich das am besten realisiere?

Vielen Dank im vorraus, über jede Antwort bin ich sehr dankbar...

mfG dAk0Ta :rolleyes:
 
pass auf....

du gehst hin, machst 2 eilen mehr zu deiner user-tabelle#
login_time und last_login_time.

in login_time kommt der Timestamp rein, der vom letzen login ist.
und in last_login_time kommt der inhalt rein, der vor der änderung von login_time war.

Beispiel:

login_time = 20
last_login_time = 19

der user loggt sich ein. jetz steht da

login_time = 21
last_login_time = 20

verstehst du

und dann speicherst du den timestamp des psts,, wann der gemacht wurde.
Und dann kontrollierst du einfach nur...
Wenn ein Post nach deinem letzten login gemacht wurde, dann ist es ein neuer Post.
Sprich du kannst due neuen Posts anzeigen. verstehst du, was ich meine
 
Ich glaub ich raffs nicht :(
Also ich soll einmal die loginzeit speichern und einmal soll ich dann die letzte sozusagen in eine last_login kopieren. Oder versteh ich das jetzt falsch? Und dann Kontrolliere ich die Postszeit mit der Loginzeit und Lastloginzeit. Ok da seh ich ja dann zwar welche Posts im Moment neu sind aber wenn ich diese noch NICHT gelesen habe mich auslogge und dann wieder einlogge, dann dürften diese Posts doch nicht mehr als Ungelesen da stehen oder?

Hmm keiner einer ne andere Idee? oder vielleicht mir des mit der Zietfunktion genauer erklären? Bitte bitte. :(
 
Zuletzt bearbeitet:
Ich habs noch nicht rausgefunden :(
Könnt mir es vielleicht nochmal jemand ganauer erklären Bitte Bitte. Ich bin hier am verzweifeln...
 
Also... du hast eine login Datei...
du brauchst:
eine Zeile in deiner User-Tabelle die last_login_time heißt,
eine Zeile in deiner User-Tabelle, die login_time heißt,
eine Zeile in deiner Post-Tabelle, die post_time heißt.

in der Post-Zeile (post_time) muss der Aktuelle Timestamp (hier mit $show_timestamp ausgebbar) gespeichert werden !

immer wenn sich jemand einloggt, wird folgendes gespeichert:
Code:
### Iniziieren ###
$show_timestamp = time();
### Abfrage ###
$send_ID =            // Variable, mit der die ID übergeben wird
$sql_UPD_user = "UPDATE `user` SET login_time = '$show_timestamp', last_login_time = (login_time) WHERE ID = '".$send_ID."'";
$erg_UPD_user = mysql_query($sql_UPD_user) or die ("Kann die Zeit nicht ändern.");

dann ließt du ALLE daten, die du über den User hast, in einer Datei aus...
Beispielhaft so:
Code:
### iniziieren ###
$send_ID =            // Variable, mit der die ID übergeben wird
### Abfrage ###
$sql_read_user = "SELECT * FROM user WHERE ID = '".$send_ID."'"; 
$erg_read_user = mysql_query($sql_read_user) or die ("Kann User-Daten nicht auslesen.");
$sql_erg_read_user = mysql_fetch_assoc($erg_read_user);

so... nun machst du eine abfrage, ob neue Posts da sind:
Code:
### Auslesen und Vergleichen ###
$sql_read_check_postdate = "SELECT * FROM posts WHERE post_time >= '".$sql_erg_read_user[['last_login_time']."'";
$erg_read_check_postdate = mysql_query($sql_read_check_postdate) or die ("Kann die Post-Daten nicht vergleichen.");
### Kontrolle auf Anzahl ###
if (mysql_num_rows($erg_read_check_postdate)<="0") // Wenn die Anzahl der AUsgewählten Posts kleiner/gleich 0 ist, dann gebe aus ...
{
  echo "";
} 
elseif (mysql_num_rows($erg_read_check_postdate)=="1") // Wenn die Anzahl der Ausgewählten Posts gleich 1 ist, dann gebe aus...
{
  echo "Sie haben einen ungelesenen Post im Forum.";
}
elseif (mysql_num_rows($erg_read_check_postdate)>"1") // Wenn die Anzahl der Ausgewählten Posts größer als 1 ist, dann gebe aus...
{
 echo "Sie haben ".mysql_num_rows($erg_read_check_postdate)." ungelsene Posts im Forum";
}

Ich hoffe, das hat dir was mehr geholfen !
Sag mir bescheid, wenn ich dir helfen soll !

Grüße
Dennis
 
Ahh ich verstehe... Dann hab ich mal noch eine Frage:
So kann ich dann auch den Link zb. in eine andere Farbe machen, wo ein neuer Eintrag stattgefunden hat. Wie erkennt der dann, wenn ich diesen Beitrag gelesen habe, dass dann dieser Link wieder in seiner normalen Farbe geht?
Und wie mach ich das dann das ich als link so machen kann das der User die ganzen Einträge als "Gelesen" markieren kann? Also alle "Ungelesenen Einträge" als "Gelesen" ändern. Ohne diese gelesen zu haben. :rolleyes:

Owei ich hoffe du verstehst wie ich das meine *gg*
 
hmm.. ein bissle weis ich, was du meinst !
also um ganz sicher zu gehen, dass der user auch wirklich alle posts lesen kann,
würde ich meine methode nehmen.. (oben gepostet)

wenn der user alle Beiträge, die neu sind, einfach als gelesen markieren will, müsste
er sich bei der Methode einfach neu einloggen !
oder mach einen link: "Alle Posts als gelesen markieren"
der zu einem Script führt:
Code:
### iniziieren ###
$show_timestamp = time();
### Update ###
$sql_UPD_user_time = "UPDATE user SET last_login_time = '".$show_timestamp."'";
$erg_UPD_user_time = mysql_query($sql_UPD_user_time) or die ("Kann die neue Zeit nicht ersetzen.");

header ("location: hauptseite.php");

pass aber auf!
es darf KEINE EINZIGE AUSGABE vor dem header(); sein!
am besten machst du das als eigenes Script und verlinktst dann im header(); wieder auf die Site, die angezeigt weren soll !

Das mit dem link versteh ich doppeldeutig !
1 Deutung: Du willst einen Link setzen, wo die Liste der Posts ist.
2 Deutung: Du willst einem Link eine andere Farbe geben.
3 Deutung Du willst einen Link setzen, der eine andere Farbe hat.


1 Deutung/Lösung: Schreib in der Ausgabe anstatt Forum doch einfach:
PHP-Art:
Code:
echo "blubs bla bla  <a href=\"LinkZurAnzeigeSeite.php\">Forum</a>";
HTML-Art:
Code:
<a href="LinkZurAnzeigeSeite.php">Forum</a>

2 Deutung/Lösung: Die Farbe änderst du wie folgt:
PHP-Art:
Code:
echo "<font color=\"#DeineLinkFarbe\">LinkName</font>";
HTML-Art:
Code:
<font color="#DeineLinkFarbe">LinkName</font>

3. Deutung/Lösung: Kombiniere Deutung 1 und 2:
PHP-Art:
Code:
echo "<a href=\"LinkZurAnzeigeSeite.php\"><font color=\"#DeineLinkFarbe\">LinkName</font></a>";
HTML-Art:
Code:
<a href="LinkZurAnzeigeSeite.php"><font color="#DeineLinkFarbe">LinkName</font></a>

Oder wie meinst du das #

EDIT:
Ahh, ich wei, wie du es meinst... den Link des treads, wo ein neuer Post ist, in einer Anderen Farbe anzeigen zu lassen... Stimmts

Also...
Du erstellst eine neue Zeile in deiner Tread-Tabelle: 'last_post_time'
Dann ließt du ALLES aus, was du über den Tread weist.
Immer wenn ein neuer Post geschreiben wird, setzt du 'last_post_time' auf den aktuellen Timestamp ! (in meinem Scripts immer $show_timestamp)


Beispiel(tread_list ist hier der name der Tabelle) :
Code:
### iniziieren ###
$show_timestamp = time();
$send_tread_ID =                // Variable, die die ID des Treads übergibt.
### Ausgabe ###
$sql_UPD_tread = "UPDATE tread_list SET last_post_time = '".$show_timestamp."' WHERE ID = '".$send_tread_ID."'";
$erg_UPD_tread = mysql_query($sql_UPD_tread) or die ("Kann tread-Datum nicht ändern.");

(Für das Weitere vorhaben muss gewährleistet sein, dass ALLE Daten aus der Tabelle ausgelesen wurden. Auch die User-Daten !)
Nun kontrollierst du für jeden Tread, ob folgendes passiert ist:
Code:
### iniziieren ###
$show_timestamp = time();
### Kontrolle ###
if ($sql_read_tread_info['last_post_date']>=$sql_read_self_user['last_login_time']) // Wenn gespeicherter Timestamp größer ist als der letze Login, dann... (rot)
{
   echo "<font color=\"#FF0000\">".$sql_read_tread_info['tread_name']."</font>";
}
else // Ansonsten Zeige ... (grün)
{
   echo "<font color=\"#00FF00\">".$sql_read_tread_info['tread_name']."</font>";
}

Und wenn du dich jetzt fragst, wie man das machen soll, dass ein tread als gelesen gilt, dann :
- entweder speicherst du dessen ID in einem Array und kontrollierst zusatzlich, ob die ID 1. nicht im array ist und 2. Ob das last_post_datum größer ist, als dein letzter login, oder...
- Du speicherst das Datum des gelesenen Posts als dein eigenes letztes Login !


Wenn du beispiele brauchst, melde dich !

Grüße
Dennis
 
Zuletzt bearbeitet von einem Moderator:
jaaa genau so hab ich mir das gedacht. Super, werd mich gleich mal ransetzen und Coden bis zum umfallen *gg* Danke Danke Danke ich weiß garnicht wie oft ich dir das jetzt hier schreiben soll... Ich probier mir das erstmal alles aus und wenns noch nicht so will wie ich das will :) dann meld ich mich nochmal bei dir...

Danke Schön... :)
 
Schicksu mir dann ne Persönliche NAchricht oder wäre am einfachsten ! weil dann kannst du diesen tread erstmal abhacken !

hast du eigendlich ne Smilie-option bei dir im Forum
wo Smilies durch Tags... ich meine Tags durch Smilies ergänzt werden
kannst du mir mal verraten, wie da sgeht ?`? (PN )

Freut vielleicht die Mods hier :-)#
 
Zurück