PHP/Mysql Sessiondauer aufzeichnen

  • Themenstarter Themenstarter Socressor
  • Beginndatum Beginndatum
S

Socressor

Hallo und einen guten Abend,

habe eine Frage nachdem ich mich hier durch die Sektionen gelesen habe aber nichts relevantes für mich gefunden habe.

Unzwar habe ich ein Loginsystem mit Sessions die ich in eine Datenbank speichern will (Bei Login z.B. ein Timestamp setzen und bei logout wieder). Das Speichern als Timestamp für login und logoutzeit funktioniert ganz gut. Jetzt wollte ich gerne das ich die differenzen davon daneben speichern. z.B. Aufbau:

Login |Logout |Differenz
2010-04-30 23:36:47|2010-04-30 23:50:00 |02:13:13
2010-04-29 13:00:0|2010-04-30 15:00:00 |02:00:00

Das auschlaggebende hierbei ist das die differenz immer weiter addiert werden soll mit der differenz der Uhrzeiten.
Oder wie kann man das am besten bewerkstelligen?

will mich einloggen (zeit,datum wird gespeichert (von mir aus auch geteilt))...nach ner Zeit ausloggen (zeit,datum wird gespeichert (von mir aus auch geteilt) differenz des letzten mals(falls es ein letztes mal gab ansonsten halt einfach die differenz speichern) wird mit der differenz dieses mals addiert und ergibt dann die gesamt Onlinezeit.

Wäre supergut wenn mir jemand helfen könnte. Bin recht neu in php/mysql und kenn mich erst teilweise aus.

Viele Grüße

Socressor
 
Moin,

mal das von Registrierer genannte Problem aussen vorgelassen:

Login:
du setzt die Login-Spalte auf den aktuellen Timestamp und die Logout-Spalte auf NULL (oder von mir aus auch auf die aktuelle Zeit)

Logout:
du setzt die Logout-Spalte auf die aktuelle Zeit und addierst die Differenz von Logout und Login zur Differenz


...also um Grunde genommen so, wie du es selbst beschrieben hast.
 
Hi und danke für die antwort :)...


Ja so das Prinzip ist mir klar...aber wie soll ich das machen? Bin noch ein Newbie in PHP /Mysql...

Wäre schön einen kleinen Tipp zu bekommen :)..
Danke
 
dort, wo der User sich einloggt solltest du die Zeit in die DB schreiben

PHP:
INSERT INTO Test (UserID,Login, Logout) AS VALUES("hier sollte die UserID rein", now(),"9999-12-31")
9999-12-31 heißt, das ist der aktuellste Datensatz und ist mehr oder weniger ein Platzhalter
beim Ausloggen dann
PHP:
UPDATE Test SET Logout = now() WHERE UserID = "hier sollte die userid rein" and Logout ="9999-12-31"

beim Auslesen dann
PHP:
SELECT 
UserID, 
sum(Logout-Login) as Dauer 
FROM Test 
WHERE UserID = "hier sollte die userid rein"
GROUP BY
UserID

P.S.: das Problem, wie von Registrierer genannte aussen vorgelassen:)
 
Danke für den Tipp. Er trägt jedoch nichts in die Datenbank ein. Hab es im moment so:

login.php

<?php
$Benutzerid = $_SESSION["user_id"];
$Nickname = $_SESSION["user_nickname"];
$login = "9999-12-31";

mysql_connect("localhost","nutzername","Passwort");
mysql_select_db("Datenbank");


if($id == $id)
{

$eintragen = mysql_query("INSERT INTO Zeitstempel
( Benutzerid, Nickname, login) AS VALUES
('$Benutzerid', '$Nickname', now(), '$login')");


}
?>


Logout.php
<?php
// Wird ausgeführt um mit der Ausgabe des Headers zu warten.
ob_start ();

session_start ();
$Benutzerid = $_SESSION["user_id"];
$Nickname = $_SESSION["user_nickname"];
$Logoutdatum = date("d.m.Y");
$Logoutzeit = date("H:i");

mysql_connect("localhost","Nutzername","Passwort");
mysql_select_db("Datenbank");


if($id == $id)
{

$eintragen = mysql_query("UPDATE Zeitstempel SET logout = now() WHERE Benutzerid = $Benutzerid and logout = "9999-12-31"");


}





session_unset ();
session_destroy ();

header ("Location: index.php");
ob_end_flush ();


?>

und zu guter letzt die intern.php wo das Ergebnis angezeigt werden soll:

$Benutzerid = $_SESSION["user_id"];
$ergebnis = mysql_query("SELECT * FROM Zeitstempel ORDER BY id desc LIMIT 1 ");
$differenz = mysql_query("SELECT Benutzerid,
sum(logout-login) as Dauer
FROM Zeitstempel WHERE Benutzerid = $Benutzerid
GROUP BY
Benutzerid");

while($row = mysql_fetch_object($ergebnis))
{



$login = $row->login;


echo "<br>";
echo $login;
echo "<br>";






}

komme nicht weiter :(
 
Code:
if ($id == $id)
wenn Apfel ist gleich Apfel...
ist IMMER WAHR!- also andere Abfrage oder weg lassen!

Code:
$eintragen = mysql_query("INSERT INTO Zeitstempel
( Benutzerid, Nickname, login) AS VALUES
('$Benutzerid', '$Nickname', now(), '$login')");
und der teil hat 1-2 Schönheitsfehler und zudem 1 syntax fehler.

1. Schönheitsfehler liegt dadrin das man den sql befehl meistens in einer Seperaten Variabel unterbringt, dient jedoch lediglich der schönheit und übersicht
2. Schönheitsfehler ist das fehlen des mysql_error() warum du warscheinlich den Syntaxfehler nicht sieht (weis ich jedoch ausem kopf nicht zu 100% - da ich nie ohne mysql_error() gearbeitet habe
3. der Syntaxfehler wird warscheinlich in "AS VALUES" liegen.

versuch doch mal inetwa sowas:
Code:
$sql = "INSERT INTO Zeitstempel ( Benutzerid, Nickname, login) VALUES ('$Benutzerid', '$Nickname', now(), '$login')";
/* $eintragen  nennt man normalerweise $qry */
$qry = mysql_query($sql)or die(mysql_error());
 
Zurück