WinFuture-Forum.de: [php/mysql] Onlinezeit Ermitteln Und Speichern - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php/mysql] Onlinezeit Ermitteln Und Speichern


#1 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 28. Juni 2005 - 16:07

Hallo zusammen!

Ich habe folgendes vor:
Die Onlinezeit, die ein Mitglied auf einer Seite ist, soll in die Datenbank gespeichert werden. Sobald das Mitglied auf der Seite ist und etwas tut, dann wird diese Zeit (seit dem das Mitglied schon auf der Seite ist) zu der alten History dazu gezählt und aktualisiert.

Ich habe dies bisher so gelöst:

Bei erfolgreichem Login werden dem Mitglied vorher 3 Sessions registriert:
$_SESSION['user_id'] -> Die ID des Mitglieds
$_SESSION['user_onlinezeit'] -> Der aktuelle Zeitstempel minus (-) der Onlinezeit-History
$_SESSION['user_zeit'] -> Der aktuele Zeitstempel

Nun wird die Funktion ausgeführt:

function onlinezeit()
{
	require('variables.inc.php');
	$user_time = time();

	if(isset($_SESSION['user_id']) and isset($_SESSION['user_onlinezeit']))
	{
  $sessionzeit = $user_time - $_SESSION['user_zeit'];

  if($sessionzeit > 300)
  {
           $_SESSION['user_zeit'] = $user_time;
  }
  else
  {
            $onlinezeit = $user_time - $_SESSION['user_onlinezeit'];
            mysql_query("UPDATE ".$mysql_prefix."_mitglieder SET onlinezeit = '$onlinezeit' WHERE id = '".$_SESSION['user_id']."' AND onlinestatus = '1'");
  }

  $onlinezeit_result = mysql_query("SELECT onlinezeit FROM ".$mysql_prefix."_mitglieder WHERE id = '".$_SESSION['user_id']."' AND onlinestatus = '1'");

  return mysql_result($onlinezeit_result,0);
    }

    else return false;
}

(Aufbau hier leider sehr unübersichtlich)

So, das klappt eigentlich auch alles wunderbar, nur gibt es da ein kleines Problem.
Und zwar wird die Onlinezeit immer aktualisiert, auch wenn man stundenlang nichts auf der Seite gemacht hat.
Beispiel: Ich gehe auf die Seite und logge mich, gehe dann 1 Stunde vom PC und mache danach wieder was auf die Seite und es wird eine ganze Stunde zur gesamten Onlinezeit addiert. Das ist nicht Sinn der Sache, deswegen wollte ich das mit der Session 'user_zeit' regeln.
Wenn die aktuelle Zeit minus (-) dieser Session größer ist als 300 (wenn ich also seit 300 Sekunden (5 Minuten) eigneloggt bin), dann soll die Session neu geschrieben werden.
Ist dies nicht der Fall (kleiner als 300), dann wird die Onlinezeit in der Datenbank aktualisiert.
(Das könnt ihr euch oben in der Funktion ansehen).

Nur funktioniert das Ganze jetzt nicht, ich habe das Problem noch nicht gelöst und denke mir aber, dass es an der Session 'user_zeit' liegt.
Die Rechnung mit if($sessionzeit > 300) funktioniert auch, wenn ich hier nichts tue, dann wird auch später nichts aktualisiert, aber das nie wieder, auch wenn man nach 300 Sekunden wieder etwas tut, und das bringt auch nichts. Deswegen wird hier die Session neu registriert, aber der Fall für das else dürfte ja dann nicht geschehen und das ist mein großes Problem, denn hier komme ich nicht weiter.
Obwohl er die Datensätze nicht eintragen darf, macht er es trotzdem, es muss also an der Session liegen.
Aber woran genau, da reicht mein Wissen mit Sessions wohl noch nicht aus. Vielleicht wird es gleich nochmals neu überprüft wenn sie erneut registriert wird oder so.

Wäre nett, wenn mir da jemand weiterhelfen könnte und den Fehler beseitigen kann ;-)

Danke schon mal im Voraus!
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Anzeige



#2 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 29. Juni 2005 - 12:56

Habe es nun hinbekommen und den Fehler beseitigt :)

function mitglieder_onlinezeit()
{
	require('variables.inc.php');

	if(isset($_SESSION['user_id']))
	{
        $online_result= mysql_query("SELECT letzte_aktion,onlinezeit FROM ".$mysql_prefix."_mitglieder WHERE id = '".$_SESSION['user_id']."'");
  $online_mitglied = mysql_fetch_array($online_result);

  $onlinezeit = $user_time - $online_mitglied['letzte_aktion'];
  $gesamtzeit = $online_mitglied['onlinezeit'] + $onlinezeit;

  if($onlinezeit < 300)
  {
            mysql_query("UPDATE ".$mysql_prefix."_mitglieder SET onlinezeit = '$gesamtzeit' WHERE id = '".$_SESSION['user_id']."' AND onlinestatus = '1'");
  }

  return mysql_result($online_result, 0, "".$mysql_prefix."_mitglieder.onlinezeit");
    }

    else return false;
}


Danke auch nochmals an Floele für den Hinweis.
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#3 Mitglied ist offline   tweetymr 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 03. August 05
  • Reputation: 0

geschrieben 03. August 2005 - 11:34

hy @all,
das script is echt geil, hab ich schon lang gesucht.
Nur... kann mir das jemand bitte nochmal simpler aufschreiben? Also ohne die "wirklich online"-Funktion, dass es auch zählt wenn man nich am rechner sitzt.

Hoffe auf Hilfe

tweetymr
0

#4 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 03. August 2005 - 13:49

Man kann es nur zählen lassen, sobald etwas getan wird auf der Seite, ich habe eine "Sperre" von 5 Minuten drin, damit man diese Funktion nicht manipulieren kann, du kannst die Zeit ja einfach umstellen, wie du sie haben möchtest.
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#5 Mitglied ist offline   tweetymr 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 03. August 05
  • Reputation: 0

geschrieben 03. August 2005 - 20:45

hast recht, aber ich hab noch ne Frage:
was muss alles in meine MySQL-Datenbank rein damit des funktioniert (hab nich soooo viel ahnung davon, sry :blush: )
0

#6 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 04. August 2005 - 14:25

Hm das wird problematisch, ich bin da beim Entwickeln an einem CMS, da wird die Tabelle "mitglieder" benötigt, du siehst oben die INSERTs und UPDATEs und kannst es ja daraus schließen :(
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#7 Mitglied ist offline   tweetymr 

  • Gruppe: Mitglieder
  • Beiträge: 3
  • Beigetreten: 03. August 05
  • Reputation: 0

geschrieben 04. August 2005 - 23:54

ok, kanns ja mal versuchen

Dieser Beitrag wurde von tweetymr bearbeitet: 05. August 2005 - 14:45

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0