Huhu, ich hänge gerade total bei folgender Sache:
Ich hab mir ein Forum gebastelt, dass für den User einen Ähnlichen Funktionsumfang bieten soll wie etwa das phpBB-Forum. Eine der schönsten Funktionen dieses ist die Anzeige neuer Beiträge für den User. Das ganze funktioniert jetzt auch nach langer Rumprobiererei. Ich verwende dafür in der User-Tabelle der Datenbank u.a. folgende Spalten: user_lastaction, user_currentlogin, user_lastlogin. Die Spalte 'user_lastaction' wird bei jedem Ausführen des Forums aktualiesiert ( =time() ). Die Spalten 'user_currentlogin' und 'user_lastlogin' nur, wenn
1. Der User sich über das Login-Formular einloggt
oder
2. Der User ein Cookie gesetzt hat, das Forum besucht, aber die entsprechenden Sessions (user_id, etc.) nicht gesetzt sind.
Der Wert der Spalte 'user_currentlogin' wird dann auf den Wert der aktuellen Zeit ( time() ) gesetzt und der Wert der Spalte 'user_lastlogin' bekommt den alten Wert der Spalte 'user_currentlogin'. Selbstverständlich bevor der Wert der Spalte 'user_currentlogin' aktualisiert wird.
Von der Reihenfolge also:
1. Auslesen des Wertes $old_login = 'user_currentlogin'
2. Speichern des Wertes time() in der Variable $current_time
3. Update der Spalten 'user_lastlogin' = $old_login, 'user_currentlogin' = $current_time
Eigentlich sollte da nichts schief gehen. Hab das ganze über unten stehendes Script gelöst. Die Reihenfolge entspricht der oben stehenden exakt. Meine ich zumindest :/
Jetzt aber zum Problem an sich: Wenn das Script ausgeführt wird, dann nimmt der Wert der Spalte 'user_lastlogin' nicht den Wert von $old_login an, sondern denselben Wert wie $current_time, bzw. eben den Wert der Spalte 'user_currentlogin' beim Update.
Ich hoffe, dass ihr mir helfen könnt, ich hab keine Ahnung woran das liegt. Ich hab die Vermutung, dass der Server das ganze einfach zu schnell abarbeitet, als dass er die Werte richtig updaten kann. Der Testserver ist nen Rechner im lokalen Netzwerk.
Ich hab mir ein Forum gebastelt, dass für den User einen Ähnlichen Funktionsumfang bieten soll wie etwa das phpBB-Forum. Eine der schönsten Funktionen dieses ist die Anzeige neuer Beiträge für den User. Das ganze funktioniert jetzt auch nach langer Rumprobiererei. Ich verwende dafür in der User-Tabelle der Datenbank u.a. folgende Spalten: user_lastaction, user_currentlogin, user_lastlogin. Die Spalte 'user_lastaction' wird bei jedem Ausführen des Forums aktualiesiert ( =time() ). Die Spalten 'user_currentlogin' und 'user_lastlogin' nur, wenn
1. Der User sich über das Login-Formular einloggt
oder
2. Der User ein Cookie gesetzt hat, das Forum besucht, aber die entsprechenden Sessions (user_id, etc.) nicht gesetzt sind.
Der Wert der Spalte 'user_currentlogin' wird dann auf den Wert der aktuellen Zeit ( time() ) gesetzt und der Wert der Spalte 'user_lastlogin' bekommt den alten Wert der Spalte 'user_currentlogin'. Selbstverständlich bevor der Wert der Spalte 'user_currentlogin' aktualisiert wird.
Von der Reihenfolge also:
1. Auslesen des Wertes $old_login = 'user_currentlogin'
2. Speichern des Wertes time() in der Variable $current_time
3. Update der Spalten 'user_lastlogin' = $old_login, 'user_currentlogin' = $current_time
Eigentlich sollte da nichts schief gehen. Hab das ganze über unten stehendes Script gelöst. Die Reihenfolge entspricht der oben stehenden exakt. Meine ich zumindest :/
Jetzt aber zum Problem an sich: Wenn das Script ausgeführt wird, dann nimmt der Wert der Spalte 'user_lastlogin' nicht den Wert von $old_login an, sondern denselben Wert wie $current_time, bzw. eben den Wert der Spalte 'user_currentlogin' beim Update.
Ich hoffe, dass ihr mir helfen könnt, ich hab keine Ahnung woran das liegt. Ich hab die Vermutung, dass der Server das ganze einfach zu schnell abarbeitet, als dass er die Werte richtig updaten kann. Der Testserver ist nen Rechner im lokalen Netzwerk.
PHP:
// Datenbankabfrage und Daten prüfen
$sql = mysql_query( "SELECT
user_id,
user_isadmin,
user_level,
user_currentlogin,
user_mail,
user_password,
user_stats_logins
FROM
tbl_user
WHERE
LOWER( user_mail ) = '" . trim( strtolower( $_POST[ 'user_mail' ] ) ) . "'
AND
user_password = '" . md5 ( $_POST[ 'user_password' ] ) . "'
AND
user_status = '1'
AND
user_register_key IS NULL
", CONN );
# SQL-Abfrage prüfen
if ( mysql_num_rows( $sql ) > 0 )
{
while ( $user = mysql_fetch_assoc( $sql ) )
{
# Cookie setzen?
if ( $_POST[ 'autologin' ] )
{
setcookie( 'Cookiename' , date( 'Y-m-d-H-i-s' ) . '-' . $user[ 'user_id' ] . '-' . $user[ 'user_password' ] , time() + 9999999 , '/' );
}
$logins = $user[ 'user_stats_logins' ] + 1;
$current_time = time();
mysql_query( "UPDATE
tbl_user
SET
user_lastlogin = '" . $user[ 'user_currentlogin' ] . "',
user_lastaction = '" . $current_time . "',
user_currentlogin = '" . $current_time . "',
user_stats_logins = '" . $logins . "'
WHERE
user_id = '" . $user[ 'user_id' ] . "'
", CONN );
// Sessions registrieren
$_SESSION[ 's_user_id' ] = $user[ 'user_id' ];
$_SESSION[ 's_user_password' ] = $user[ 'user_password' ];
$_SESSION[ 's_user_isadmin' ] = $user[ 'user_isadmin' ];
$_SESSION[ 's_user_level' ] = $user[ 'user_level' ];
}
}