Tom: Kleines Ratespiel zu MySQL, Update und mysql_affected_rows()

Beitrag lesen

Hello,

habe da ein kleines Ratespiel:

Gegeben sind

eine MySQL-Tabelle:

  
CREATE TABLE `login` (  
	`id` INT(11) NOT NULL AUTO_INCREMENT,  
	`lastclick` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
	`createdate` DATETIME NOT NULL,  
	`sessionstart` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',  
	`session` VARCHAR(50) NOT NULL,  
	`lastupdate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',  
	`nickname` VARCHAR(50) NOT NULL,  
	`lastname` VARCHAR(50) NOT NULL,  
	`password` VARCHAR(50) NOT NULL,  
	`firstname` VARCHAR(50) NOT NULL,  
	`email` VARCHAR(50) NOT NULL,  
	`status` INT(11) NOT NULL DEFAULT '0',  
	`level` INT(11) NOT NULL DEFAULT '0',  
	PRIMARY KEY (`id`),  
	UNIQUE INDEX `nickname` (`nickname`)  
)  
COLLATE='utf8_general_ci'  
ENGINE=MyISAM  
AUTO_INCREMENT=3;  

eine Login-Funktion (vereinfacht dargestellt; Passwort wird noch verschlüsselt, usw):

  
function login()  
{  
    $con = get_db_con(true);  
	  
	if (!$con) return false;  
	  
	$qry_login = "update `login`  
        set  
			session = '" . session_id() . "',  
            lastclick = now(),  
            sessionstart = now(),  
        where  
            nickname = '" . mysqli_real_escape_string($con, $_POST['data']['nickname'])."' and  
            password = '" . mysqli_real_escape_string($con, $_POST['data']['password'])."' and  
            status > 0";  
  
    if (mysqli_affected_rows($con) == 1)  
    {  
       $_SESSION['nickname'] = $_POST['data']['nickname'];  
	   $_SESSION['sess_start'] = get_time();  
	   $_SESSION['lastclick'] = get_time();  
  
       return 'Angemeldet als ' . htmlspecialchars($_SESSION['nickname']);  
    }  
    	  
    return false;  
}  

und eine Funktion zur Anmeldekontrolle:

  
function is_logged()  
{  
    $con = get_db_con(true);  
  
	if (!$con) return false;  
  
	$qry_is_logged = "  
        update `login`  
        set  
			lastclick = now(),  
        where  
            session = '" . session_id() . "' and  
            (now() - lastclick < " . SESS_MAXTIME . ")";  
  
    if (mysqli_affected_rows($con) === 1)  
    {  
		$_SESSION['lastclick'] = get_time();  
		return 'Is_logged(), Angemeldet als ' . htmlspecialchars($_SESSION['nickname']);  
    }  
 	  
    return false;			  
}  
  

Nun die Preisfrage:

Warum liefert die "is_logged()"-Funktion (allermeistens) kein Ergebnis, wenn man sie im selben Script aufruft, obwohl der User ja nun "angemeldet" ist?

Ich habe daran leider ganz schön lange geknabbert, aber die Lösung ist ganz verblüffend einfach. Mal sehen, ob jemand von Euch bis morgen darauf kommt ;-)

Als Preis dürfen die ersten Drei an der nächsten "SELF-Week" in der Odertaler Sägemühle kostenlos teilnehmen und auf meine Kosten Weizenbier saufen ;-)

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://restaurant-zur-kleinen-kapelle.de