PHP überschreibt ständig einen Wert (MySQL)

Eagle-PsyX-

Erfahrenes Mitglied
Hi,
kann mir einer erklären wieso der Wert für $_SESSION["Logout"] immer nur 0 Ausgegeben wird obwohl er als 1 eingespeichert wird.
Setzte ich $SecureDB als Kommentar bleibt der Wert bei 1.

Es wird zwar der Ursprungswert $Login->Logout im Prinzip zu Null überschreiben. Aber nicht die Session...?!
PHP:
$Login = mysql_fetch_object(mysql_query("SELECT * FROM $DataBase[User] WHERE `User`='$_POST[username]' AND `Password`='".md5($_POST["password"])."' LIMIT 1"));
		
		$_SESSION["Logout"]	=	$Login->Logout;
		$Secure = $Login->ID."|".md5(rand(1000000,9999999))."|".$Config["TimeStamp"]."|".$_SERVER['REMOTE_ADDR'];
		$_SESSION["Secure"]	=	$Secure;
		setcookie("Secure", "$Secure", time() + 36000);
		
$SecureDB = mysql_query("UPDATE $DataBase[User] SET Secure='$Secure',LastLogin='$Config[TimeStamp]',Logout='0' WHERE ID LIKE '$Login->ID'");

Hab zwar das Problem 'umgangen', begreifen tu ich's dennoch nicht. Trotz abhängigkeit von $Login->ID sollte das doch nicht so sein?
 
Zuletzt bearbeitet:
Der Fehler liegt hier:
PHP:
$SecureDB = mysql_query("UPDATE $DataBase[User] SET Secure='$Secure',LastLogin='$Config[TimeStamp]',Logout='0' WHERE ID LIKE '$Login->ID'");
Wenn du Eine Variable wie $Login->ID in einem String benutzen willst, musst du sie ein Klammern, und zwar so: {$Login->ID}.
Der korrekte Code würde dann so aussehen:

PHP:
$SecureDB = mysql_query("UPDATE $DataBase[User] SET Secure='$Secure',LastLogin='$Config[TimeStamp]',Logout='0' WHERE ID LIKE '{$Login->ID}'");

Mehr erklärungen findest du hier:
http://de2.php.net/manual/de/language.types.string.php
 
Der Fehler liegt hier:
Wenn du Eine Variable wie $Login->ID in einem String benutzen willst, musst du sie ein Klammern, und zwar so: {$Login->ID}.
Trotzdem ist diese Lösung alles andere als lesbar, ganz zu schweigen von der Performance.

Richtiges setzen der Quotes wäre hier schon eher angebracht.
PHP:
$SecureDB = mysql_query( 'UPDATE '.$DataBase['User'].' SET Secure="'.$Secure.'",LastLogin='.$Config['TimeStamp'].', Logout=0 WHERE ID LIKE '.$Login->ID);
Das Feld "Secure" erwartet in diesem Fall einen String, die anderen einen Integer, was an den Double Quotes zu erkennen ist.

Ob das allerdings dein Problem behebt kann ich nicht einschätzen. ;)
 
Zurück