Avatar billede mikze Nybegynder
10. april 2004 - 20:27 Der er 47 kommentarer og
2 løsninger

Time system? Hvordan?

I denne smukke aften er der en "nørd" som sidder inde ved sin computer og arbejder med sin side... Men han manger hjælp og er gået ind på www.exp.dk for at finde hjælp... Og nu opretter han så dette spørgesmål:

Jeg er ved at oprette et community hvor jeg vil have et time system ind i.
Men hvordan gør jeg det? Og hvordan for jeg den til at skrive du har været online i XXX timer, XXX minutter og XXX sekunder. ?

Og også hvordan skal den gemme i MySQL ? Hjælp til det hele søges...


Det øverste er da smukt :P
Avatar billede mikze Nybegynder
10. april 2004 - 20:36 #1
hallo :S ?
Avatar billede dennismp Nybegynder
10. april 2004 - 20:36 #2
<?php

if(! isset($_SESSION['online_since']) ) {
  $_SESSION['online_since'] = time();
  duration = 0;
}
else {
  $duration = time() - $_SESSION['online_since'];
}

Nu indeholder $_SESSION['online_since'] det tidspunkt hvor vi først så vedkommend.e

Duration er så antal sekunder siden da, så skal du bare regne det om.

Hvad vil du gemme i mysql?
Avatar billede mikze Nybegynder
10. april 2004 - 20:37 #3
Vil gemme hvor lang tid brugeren har været online
Avatar billede -xyz- Nybegynder
10. april 2004 - 20:37 #4
Du kunne oprette en session når man kommer ind på siden, og så gemme tiden i den... så kan du så bagefter regne differencen ud...
brug evt unix timestamp som er fortræffeligt til den slags...
Avatar billede dennismp Nybegynder
10. april 2004 - 20:39 #5
-xyz-: det er jo præcist det jeg gør :-)

mikze: har du et brugerid eller lign der kan identifcerer brugeren?
Avatar billede -xyz- Nybegynder
10. april 2004 - 20:40 #6
jeg havde ikke set dit indlæg...
Avatar billede -xyz- Nybegynder
10. april 2004 - 20:41 #7
Jeg tror ikke at han vil logge det, det gav han i hvertfald ikke udtryk for synes jeg...
Avatar billede mikze Nybegynder
10. april 2004 - 20:42 #8
Øhm...

<?
session_start();
include "../inc/db.php";

if(! isset($_SESSION['online_since']) ) {
  $_SESSION['online_since'] = time();
  duration = 0;
}
else {
  $duration = time() - $_SESSION['online_since'];
  mysql_query("UPDATE brugere SET onlinetid='$duration' WHERE brugernavn='$_SESSION[brugernavn]'");
}

$s = mysql_query("SELECT onlinetid FROM brugere WHERE brugernavn='$_SESSION[brugernavn]'");

$info4 = mysql_fetch_array($s);


$startsekunder = $info4[onlinetid];
$timer = FLOOR($startsekunder/3600);
$brugtesekundertiltimer = $timer*3600;
$restsekunder = $startsekunder-$brugtesekundertiltimer;
$minutter = FLOOR($restsekunder/60);
$brugtesekundertilminutter = $minutter*60;
$sekunder = $restsekunder-$brugtesekundertilminutter;

echo "Du har været online i $timer timer, $minutter minutter og $sekunder Sekunder.";

?>


Kan det passe ??
Avatar billede mikze Nybegynder
10. april 2004 - 20:42 #9
Eller:


  $duration = time() - $_SESSION['online_since'];
  mysql_query("UPDATE brugere SET onlinetid='$duration' WHERE brugernavn='$_SESSION[brugernavn]'");

$s = mysql_query("SELECT onlinetid FROM brugere WHERE brugernavn='$_SESSION[brugernavn]'");

$info4 = mysql_fetch_array($s);


$startsekunder = $info4[onlinetid];
$timer = FLOOR($startsekunder/3600);
$brugtesekundertiltimer = $timer*3600;
$restsekunder = $startsekunder-$brugtesekundertiltimer;
$minutter = FLOOR($restsekunder/60);
$brugtesekundertilminutter = $minutter*60;
$sekunder = $restsekunder-$brugtesekundertilminutter;

echo "Du har været online i $timer timer, $minutter minutter og $sekunder Sekunder.";
Avatar billede mikze Nybegynder
10. april 2004 - 20:43 #10
Og så i min login fil laver jeg:

$_SESSION['online_since'] = time();
Avatar billede dennismp Nybegynder
10. april 2004 - 20:46 #11
Så vil du kunne gemme hans sidste onlinetid, da du hele tiden vil overskrive hans tidligere durations med den nuværende.

du skal lige rette dine mysql_queries:
mysql_query("UPDATE brugere SET onlinetid='$duration' WHERE brugernavn='{$_SESSION['brugernavn']}'");

$s = mysql_query("SELECT onlinetid FROM brugere WHERE brugernavn='{$_SESSION['brugernavn']}'");
Avatar billede mikze Nybegynder
10. april 2004 - 20:49 #12
Altså den første eller sidste løsning?
Avatar billede dennismp Nybegynder
10. april 2004 - 20:52 #13
Begge har samme problem.

dag-1: jeg logger ind og er der 90 sekunder
mysql_query("UPDATE brugere SET onlinetid='90' WHERE brugernavn='dennismp'");

dag2: jeg logger ind og er der 30 sekunder
mysql_query("UPDATE brugere SET onlinetid='30' WHERE brugernavn='dennismp'");

nu står der at jeg har været online i 30 sekunder, det er vel ikke hensigtsmæssigt?
Avatar billede mikze Nybegynder
10. april 2004 - 20:55 #14
Nej... Så skal man vel bare:

mysql_query("UPDATE brugere SET onlinetid=onlinetid+30 WHERE brugernavn='dennismp'");
Avatar billede mikze Nybegynder
10. april 2004 - 20:57 #15
hvad gør det at man sætter { } om sessionen ?
Avatar billede mikze Nybegynder
10. april 2004 - 21:02 #16
er du her ikke :( ?
Avatar billede dennismp Nybegynder
10. april 2004 - 21:35 #17
Jeg var lige væk :)

Se nederst i denne tråd: der står hvorfor {} er nødvendigt.
http://www.eksperten.dk/spm/487818

Din update virker heller ikke:

Jeg er på 30 sekunder og ser 3 sider der hver opdaterer data:
efter 10 sekunder:
mysql_query("UPDATE brugere SET onlinetid=onlinetid+10 WHERE brugernavn='dennismp'");
efter 20 sekunder:
mysql_query("UPDATE brugere SET onlinetid=onlinetid+20 WHERE brugernavn='dennismp'");
efter 30 sekunder:
mysql_query("UPDATE brugere SET onlinetid=onlinetid+30 WHERE brugernavn='dennismp'");

Istedet for 30 har jeg nu været på i 60 sekunder :-)
Avatar billede dennismp Nybegynder
10. april 2004 - 21:36 #18
du kan evt efter din update lave en
$_SESSION['online_since' = time();

så undgår du det problem.. Men måske skal du så bruge et andet navn end online_since :-)
Avatar billede mikze Nybegynder
12. april 2004 - 18:53 #19
Nae... Jeg har oprettet en MySQL kolonne som hedder TIMEOUT som indsætter time() i den når man logger ind... Og opdatere den når man laver det der UPDATE BRUGERE :)
Avatar billede dennismp Nybegynder
12. april 2004 - 19:02 #20
Er ikke helt sikker på jeg forstår - men bare det virker :)
Avatar billede mikze Nybegynder
12. april 2004 - 19:16 #21
Det virker fint :)

Minutter og sekunder virker :)

Men ikke timer... Der står at man har været online i mega mange timer :/
Avatar billede mikze Nybegynder
12. april 2004 - 19:18 #22
Jo... I stedet for at jeg laver en session som hedder online_since så laver jeg en kolonne i min tabel som hedder TIMEOUT... Når man så logger ind laver jeg en INSERT INTO brugere og alt det der sådan at der ikke bliver oprettet en session men en tabel med TIME() i... Og så i min fil UPDATE.PHP så opdatere den lige timeout med TIME igen i stedet for den opdatere SESSIONen :)
Avatar billede mikze Nybegynder
12. april 2004 - 19:19 #23
$startsekunder = $info4[onlinetid];
$timer = FLOOR($startsekunder/3600);
$brugtesekundertiltimer = $timer*3600;
$restsekunder = $startsekunder-$brugtesekundertiltimer;
$minutter = FLOOR($restsekunder/60);
$brugtesekundertilminutter = $minutter*60;
$sekunder = $restsekunder-$brugtesekundertilminutter;


Kan du se om det passer ?
Avatar billede mikze Nybegynder
12. april 2004 - 19:20 #24
FOr hvis det er timer burde det vel være /3600/3600 ?
Avatar billede mikze Nybegynder
12. april 2004 - 19:20 #25
:S
Avatar billede dennismp Nybegynder
12. april 2004 - 19:21 #26
Det ser fint ud så vidt jeg kan se.

Alternativ kan du bruge: http://dennis.moellegaard.dk/v4/php/sec2text.php?source=1
Avatar billede mikze Nybegynder
12. april 2004 - 19:26 #27
Du har været online i 300497 timer, 25 minutter og 23 Sekunder.

Det står der... Hvor at ONLINETID i mysql tabellen er: 1081790723
Avatar billede dennismp Nybegynder
12. april 2004 - 20:14 #28
Jeg tror ikke din update virker :)

Du kunne jo prøve, hurtigt min løsning og se om det virker.
Avatar billede mikze Nybegynder
17. april 2004 - 10:41 #29
Nej... Det virker ikke... Det gider ikke virke... Kan du ikke prøve igen?
Avatar billede dennismp Nybegynder
17. april 2004 - 13:39 #30
Hvad virker ikke? Og hvad betyder virker ikke? Tæller den forkert?
Avatar billede mikze Nybegynder
17. april 2004 - 16:46 #31
Jae... Altså den viser ALT for mange timer... Se selv: 300497 Det er antal timer :S
Avatar billede dennismp Nybegynder
17. april 2004 - 17:15 #32
hvad kode bruger du nu?
Avatar billede mikze Nybegynder
17. april 2004 - 17:43 #33
Min... Jeg prøver lige med din så!
Avatar billede mikze Nybegynder
17. april 2004 - 17:45 #34
Altså... Feltet hedder ONLINETID og er en INT... Er det rigtigt eller skal det ikke være en INT?
Avatar billede dennismp Nybegynder
17. april 2004 - 17:46 #35
Int lyder som et fint bud.
Avatar billede mikze Nybegynder
17. april 2004 - 18:01 #36
Avatar billede mikze Nybegynder
17. april 2004 - 18:01 #37
1082217684 Det er time
Avatar billede mikze Nybegynder
17. april 2004 - 18:02 #38
Men 1082217684 divideret med 3600 er jo MANGE timer??
Avatar billede mikze Nybegynder
17. april 2004 - 18:03 #39
:S
Avatar billede dennismp Nybegynder
17. april 2004 - 18:05 #40
det er cirka antal timer siden 1970 :-)

Må jeg se den kode der opdatere databasen?
Avatar billede mikze Nybegynder
17. april 2004 - 18:09 #41
<?
session_start();
include "../inc/db.php";

$duration = "time()-$_SESSION[login_tid]";

$_SESSION[login_tid] = "time()";

mysql_query("UPDATE brugere SET onlinetid='onlinetid+$duration' WHERE brugernavn='{$_SESSION['brugernavn']}'");


?>
Avatar billede dennismp Nybegynder
17. april 2004 - 18:13 #42
prøv dette
<?
session_start();
include "../inc/db.php";

if( isset($_SESSION['login_tid']) )  {
  $duration = time() - $_SESSION['login_tid'];
}
else {
  $_SESSION['login_tid'] = time();
  $duration = 0;
}

mysql_query("UPDATE brugere SET onlinetid='$duration' WHERE brugernavn='{$_SESSION['brugernavn']}'");
?>
Avatar billede mikze Nybegynder
17. april 2004 - 18:26 #43
Jeg har selv fået det til at virke... Det er pga. at der er "" rundt om fx time()-$_SESSION[login_tid] og rundt om time() og det må der ikke være... Åbenbart... Så nu virker det fint... Men den gider bare ikke onlinetid+$duration :(
Avatar billede dennismp Nybegynder
17. april 2004 - 18:41 #44
hmmm mit forslag giver heller ikke mening.

Prøv denne..Den beregner hvor lang tid er er gået siden sidste hit, og opdatere tabellen med den værdi. Det burde altså snart virke :)

<?php
session_start();
include "../inc/db.php";

if( isset($_SESSION['last_update']) )
  $duration = time() - $_SESSION['last_update'];
else
  $duration = 0;

$_SESSION['last_update'] = time();

if( $duration > 0 ) {
  mysql_query("UPDATE brugere SET onlinetid=onlinetid+$duration WHERE brugernavn='{$_SESSION['brugernavn']}'");
}
?>
Avatar billede dennismp Nybegynder
17. april 2004 - 18:42 #45
mysql_query("UPDATE brugere SET onlinetid='onlinetid+$duration' WHERE brugernavn='{$_SESSION['brugernavn']}'");

Det her er forkert, syntaxmæssigt (i din kode).. Prøv istedet
mysql_query("UPDATE brugere SET onlinetid=onlinetid+$duration WHERE brugernavn='{$_SESSION['brugernavn']}'");
Avatar billede mikze Nybegynder
17. april 2004 - 18:45 #46
Damn har selv fundet ud af det :S

Men smid lige et svar :)
Avatar billede dennismp Nybegynder
17. april 2004 - 18:52 #47
ok
Avatar billede dennismp Nybegynder
18. april 2004 - 11:21 #48
Er din løsning en hemmelighed?
Avatar billede dennismp Nybegynder
18. april 2004 - 11:21 #49
*hint* :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester