Problem DB-Update (lastaction, currentlogin, lastlogin)

muhkuh

Erfahrenes Mitglied
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.
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' ];
        	
        	}
    }
 
So, hab den Fehler gefunden :) Die Datei wird im Header der Index included. Das bisher zwei mal. Der eine Include wird immer für den Autologin vollzogen, der andere nur dann, falls man sich über das loginfeld einloggt. Hab den include der beiden Befehle jetzt auf require_once gesetzt, daher tritt der Fehler nicht mehr auf.
 
Zurück