Benutzername schon vorhanden - Abfrage

Code:
<?
    $sql="UPDATE fanclub 
    SET Ausgeloggt= 
    WHERE SessionID='".session_id()."'"; 
     mysql_query($sql);
	session_destroy();
print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
?>
Was schreib ich denn dafür hinter Ausgeloggt= ? Und das mit dem WHERE bleibt so?
 
Eine Möglichkeit wäre z.B.:

<?
$sql="UPDATE fanclub
SET Ausgeloggt= '".time()."'
WHERE SessionID='".session_id()."'";
mysql_query($sql);
session_destroy();
print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
?>
 
Wär schön wenn es funktionieren würde ^^
Er schreibt in meine Spalte "Ausgeloggt" nix rein, obwohl ne Session-ID eingetragen ist :(
 
Lass dir den Query doch mal am Bildschirm ausgeben, so àla:

$a="UPDATE fanclub
SET Ausgeloggt= '".time()."'
WHERE SessionID='".session_id()."'";
echo $a;

Dann siehst Du gleich, ob ein valider Query generiert wird.
Bei mir ist das Ergebnis korrekt.
 
Bei mir wohl eher nicht :( Bei mir kommt das raus:

UPDATE fanclub SET Ausgeloggt= '1142439556' WHERE SessionID='1daa314f5cf9ca85db6ab5445eb9766e'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!
 
Aaaah, ich glaube, ich sehe Dein Problem.

Das Zeitformat ist ein Unix-Timestamp. Wenn Du in der Datenbank ein Datumsformat benutzt, musst Du den Timestamp zuerst in ein Datum umwandeln.

Also z.B.

$zeit = time();
$time = date("YmdHis",$zeit);

Das ergibt z.B. einen MySQL-Timestamp, 14-stellig.
Das genaue Format, das Du brauchst, kenne ich nicht.

Im Query fügst Du dann einfach $time ein.
$sql="UPDATE fanclub
SET Ausgeloggt= '$time'
WHERE SessionID='".session_id()."'";
 
Aber die Session-ID ist doch auf jeden Fall auch falsch oder? PHPMyAdmin zeigt mir als SessionID eine 6-stellige Buchstaben-Zahlen-Kombi. :mad:
 
Von mir aus gesehen ist die SESSID richtig.
Mir wäre es aber auch wurscht, wann sich einer ausloggt :-)
 
Ich weiß auch nicht so ganz, was mir das mit dem Auslog-Datum bringen soll. Für mich wäre das Einlogg-Datum interessanter, weil ich dann sagen kann, ich lösche die Leute wenn sie sich über 1 Jahr nicht eingeloggt haben. ^^
Reicht session_destroy() denn in meinem Fall zum Ausloggen aus? Weil das löscht ja keine Cookies und so, nicht wahr?
 
Okay danke, das Logout müsste jetzt auch funktionieren. Jetzt muss ich nur noch auf jeder Seite überprüfen, ob der User eingeloggt ist. Das mach ich ja am besten mit einem Include. Aber was überprüf ich denn in meinem Fall am besten? Ob die Session-ID stimmt?
 
Also ich hab jetzt mal was gebaut, leider funktioniert es nicht :(

Hier ein Auszug meiner validate.php:
Code:
...
	//if there's exactly one result, the user is validated. Otherwise, he's invalid
	if($affected_rows == 1) {
		// User erhält eine Session-ID
		$sql="UPDATE fanclub SET SessionID='".session_id()."' WHERE Nickname='$user_name' AND Passwort='$password'"; 
     	mysql_query($sql) or die('Fehler'); 
		//add the user to our session variables
		$_SESSION['username'] = $user_name;
...
Dann eine check.inc.php, die soll auf jeder Seite überprüfen, ob der User eingeloggt ist. Wenn ja, soll Inhalt angezeigt werden, sonst soll abgebrochen werden:
Code:
<?php
	session_start();
   //Datenbank-Verbindung
   ...

	if(empty($_SESSION['username'])) {
		die('Ein Fehler ist aufgetreten. Vermutlich bist du nicht eingeloggt, oder deine Session ist abgelaufen.
			Versuche dich <a href="login.php">nochmal einzuloggen</a>.');
	}
?>
So, und zu allerletzt meine Testpage test.php:
Code:
<?php
include 'check.inc.php';
print 'Diesen Text kannst du nur lesen, wenn du eingeloggt bist!'
?>
Wenn ich mich eingeloggt habe und gehe auf test.php, krieg ich aber die Meldung: Ein Fehler ist aufgetreten. Vermutlich bist du nicht eingeloggt, oder deine Session ist abgelaufen..

:( Hier noch meine logout.php:
Code:
<?
   //Datenbank-Verbindung
...
   

session_start ();  
session_unset ();  
session_destroy();
$eingeloggt=false;
print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
?>

Kann es daran liegen, dass die SessionID jetzt immer stehen bleibt?
 
Zuletzt bearbeitet:
Das hab ich schon 50 mal gelesen und werd daraus nicht schlau. Diese Funktionen in einer externen Datei haben bei mir nicht funktioniert, zumal ich das Ding auch nicht ganz verstehe, weil es alles auf der Basis der Session-ID macht; beim Logout wird z.b. nur die Session-ID gelöscht. Und das funktioniert bei mir nicht, siehe mein Post vom 15.03., 10:38 Uhr :(
 
HMMMM ich glaube ich habe den Fehler gefunden!
Er kann die Session nicht zerstören.

Meine logout.php:
Code:
<?
session_start();
   //Datenbank-Verbindung
...
   
session_start();  
session_unset();  
session_destroy();
if (session_destroy()) {
	if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
	print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
	}
}
else {
echo 'Fehler beim Abmelden';
}
?>
Wenn ich die Datei nun aufrufe, kriege ich die Meldung:
Warning: session_destroy(): Trying to destroy uninitialized session in /www/htdocs/.../logout.php on line 55
Fehler beim Abmelden
Weiß jemand woran das liegen kann?
 
Ich verstehe das alles nicht warum es so kompliziert sein muss?

Du arbeitest mit $_SESSION Variablen, ok. Warum bastelst Du Dir dann nicht
eine in der immer wieder der Online-Status geprüft wird.

A la

PHP:
session_start();
if(!isset($_SESSION['user_online'])) $_SESSION['user_online'] = FALSE;


if($_SESSION['user_online'])
 echo "User ist online und darf alles machen";
else
 echo "User muss sich anmelden";

Da Du ja die session_id und eine aktuelle Zeit kontrollierst könntest Du in Dein
Script einbauen, dass der User beim Logout einfach auf offline gesetzt wird, also

PHP:
$_SESSION['user_online'] = FALSE;

Zusätzlich besteht ja noch die Möglichkeit, dass der User z.B. automatisch gekickt wird wenn er zu lange inaktiv war. Dazu hast Du ja die aktuelle Uhrzeit und die Uhrzeit der letzten Aktion in der Datenbank - das Ganze aktualisieren bei einer Aktion die der User durchführt und zuvor schauen ob diese Aktion nicht zu spät hinter der letzten Aktion liegt die in der DB gespeichert ist (z.B. 600 Sekunden Unterschied für 10 Min idle time).
Das ist nur ein Vorschlag - musst Du ja nicht machen :D
 
Was du gepostet hast, hab ich doch schon längst :)
Also nochmal langsam.... Wenn Name und Passwort gecheckt worden sind, erhält der User eine Session-ID und diese Session-Variable:
Code:
$_SESSION['angemeldet'] = true;
So, nun kann er die Datei test.php aufrufen, wo diese Session-Variable überprüft wird:
Code:
	if(!$_SESSION['angemeldet']) {
		die('Ein Fehler ist aufgetreten. Vermutlich bist du nicht eingeloggt, oder deine Session ist abgelaufen.
		Versuche dich <a href="login.php">nochmal einzuloggen</a>.');
	}
Hier wird also abgebrochen, ist die Variable auf false, sonst kann er den geschützten Inhalt sehen.
So, und bei Aufruf der logout.php müssten alle Session-Variablen gelöscht werden:
Code:
session_start();  
$_SESSION['angemeldet']=FALSE;
if ($_SESSION['angemeldet']=false) {
	session_unset();  
	session_destroy();
	print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
	}
else {
echo 'Fehler beim Abmelden';
}
Wenn ich die aufrufe, meldet er mir aber "Fehler beim Abmelden", d.h. er kann die $_SESSION['angemeldet'] nicht auf false gesetzt haben, obwohl ich es ihm eine Zeile zuvor befehle.
DA liegt mein Problem.
 
mach aus dem session_detroy einfach $_SESSION['angemeldet'] = FALSE. Das mit dem destroy und unset funktioniert nämlich meistens nicht.
 
Ich hab mal
Code:
session_start();  
$_SESSION['angemeldet']=FALSE;
if($_SESSION['angemeldet']=FALSE) {
print 'Du bist erfolgreich ausgeloggt. Tschüß, bis bald!';
	}
else {
echo 'Fehler beim Abmelden';
}
gemacht und es kommt immer noch "Fehler beim Abmelden" :(
 
Deine Fehlermeldung hat nichts mit dem destroy zu tun sondern mit Deiner Variablen.

In IF-Tests solltest Du keine Werte zuweisen sondern mit == oder === vergleichen.

Im Uebrigen würde ich persönlich es eher so machen:

if(session_destroy()) {
echo 'Tschüss';
}else{
echo 'Fehler';
}
 
Zurück
Oben