Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:21 Der er 54 kommentarer og
1 løsning

Tidstæller i php

Hej Alle.
Jeg skal bruge et simpelt tidstæller script.
Det skal skrive til tabellen brugere hvor der er noget der hedder tid.

HASTER
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:24 #2
Ja, men kan du lave en kode?
Avatar billede alrua Nybegynder
15. december 2002 - 03:26 #3
erm...er ikke helt sikker på hvad det er du vil?
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:28 #4
Jeg har en db der ser således ud:

CREATE TABLE brugere (
  id int(11) NOT NULL auto_increment,
  navn tinytext NOT NULL,
  password tinytext NOT NULL,
  email tinytext NOT NULL,
  alder tinytext NOT NULL,
  hjemmeside tinytext NOT NULL,
  status char(1) NOT NULL default '2',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Der skal jeg have indsat en tid også skal tiden skrives ned i brugere i sql
FORstår du?
Avatar billede alrua Nybegynder
15. december 2002 - 03:30 #5
altså at det registreres hvornår de logger ind (el. lign)?
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:30 #6
nej tælle  hvor lang tid de har været online lige som på en chat
Avatar billede alrua Nybegynder
15. december 2002 - 03:33 #7
hmm...det kan jo godt blive et problem, hvis de ikke logger ud igen.

Jeg går ud fra at du vil have den akkumulerede onlinetid for alle besøg.

Så du laver et felt hvor der står hvornår de sidst fik vist en side som logget ind og så for hver sidevisning henter du den værdi ud og lægger forskellen mellem den og tiden nu til den onlinetid der står...
Avatar billede alrua Nybegynder
15. december 2002 - 03:33 #8
det er generelt en god ide at gemme tid i sekunder - dvs. absolut tid som et unix timestamp (time()) og onlinetid bare i sekunder...
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:35 #9
Altså...
Når man kommer ind på test.php skal den tælle til man logger ud igen
Avatar billede alrua Nybegynder
15. december 2002 - 03:35 #10
skal den gemme den totale online-tid så (ellers giver det vel ikke meget mening)? eller skal du bare bruge det til en besked når brugeren logger ud igen?
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:39 #11
Hm... Tror ikke du helt har forstået det..

Jeg har dette system med 10 brugere og så når man logger ind som fx. Admin så skal den tælle tiden også siger vi han har været inde i 5 min. så logger han ud, og logger ind igen og sidder igen i 5 min. så skal den tælle det sammen og smide det i DBen
Avatar billede alrua Nybegynder
15. december 2002 - 03:40 #12
det var sådan set også det jeg sagde til at starte med...du kan jo bare forklare ordenligt hvad det er du vil...
Avatar billede alrua Nybegynder
15. december 2002 - 03:42 #13
det vil altså sige at du skal have et felt som indeholder den totale onlinetid - lav det til et int(10) felt og skriv tiden i sekunder...

så skal du have et felt som indeholder sidste sidevisning. Lav også den til et int(10) felt og skriv et unix timestamp i den: time()

Hver gang siden vises henter den sidste sidevisning ud fra databasen, trækker det fra tiden nu og lægger den værdi til onlinetiden.

Herefter opdateres databasen med den nye onlinetid og tiden nu, som så bliver den nye sidevisningstid...

når du så skal vise onlinetid laver du bare en formateringsfunktion som dividerer til du har det i et format du skal bruge (timer/dage/uger/whatever)...
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:42 #14
okaY! sry

men hvad kan jeg gøre??
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:45 #15
oka!Y jeg er ikke så god til php så kan du ikke guide mig ;) ?
Avatar billede alrua Nybegynder
15. december 2002 - 03:45 #16
altså...

<?php
//hent de gamle data ud...
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:48 #17
what??? explain...
Avatar billede alrua Nybegynder
15. december 2002 - 03:49 #18
ups...prøver lige igen :D

<?php
//tiden nu:
  $current_time = time();
//hent de gamle data ud...
//går ud fra at brugerid ligger i en sessionvariabel, ellers kan du jo ændre det...
  $sql = "SELECT * FROM brugere WHERE id = $_SESSION[id]";
  $result = mysql_query($sql);
  $row = mysql_fetch_array($result);

//find onlinetid siden sidst
  $online_add = $current_time - row['last_page_view'];

//totale onlinetid
  $online_total = $row['online_time'] + $online_add;

//opdater databasen
  $sql = "UPDATE brugere SET last_page_view = $current_time, online_time = $online_total WHERE id = $_SESSION[id]";
  mysql_query($sql);
?>

Det skal du bare have i starten af hver af dine sider...(som en include, ville være en ide ;))
Avatar billede alrua Nybegynder
15. december 2002 - 03:52 #19
husk forøvrigt at tjecke at last_page_view ikke er 0, for så starter brugeren med en onlinetid på ca. 30 år :D
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:54 #20
Hva så med SQLen til det?
Avatar billede alrua Nybegynder
15. december 2002 - 03:54 #21
to nye felter - last_page_view som er int(11) og online_time som også er int(11)
Avatar billede alrua Nybegynder
15. december 2002 - 03:57 #22
de skal forøvrigt begge to være NOT NULL
Avatar billede zuperjmo Nybegynder
15. december 2002 - 03:58 #23
Hvad skal jeg så skrive i den der boks i Kør SQL forspørgsel(er) på database chat [Dokumentation]?
Avatar billede alrua Nybegynder
15. december 2002 - 03:58 #24
eh?!
Avatar billede alrua Nybegynder
15. december 2002 - 03:59 #25
du skal ind under tabel-layout (eller hvad den nu hedder) og vælge tilføj 2 nye felter i slutningen af tabellen (eller sådan noget)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:03 #26
CREATE TABLE brugere (
  id int(11) NOT NULL auto_increment,
  navn tinytext NOT NULL,
  password tinytext NOT NULL,
  email tinytext NOT NULL,
  alder tinytext NOT NULL,
  hjemmeside tinytext NOT NULL,
  status char(1) NOT NULL default '2',
online_time int(11) NOT NULL,
last_page_view int(11) NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

sådan?
Avatar billede alrua Nybegynder
15. december 2002 - 04:04 #27
jepper, det burde virke :)
Avatar billede alrua Nybegynder
15. december 2002 - 04:05 #28
du skal bare lige ændre lidt i koden:

  $online_add = $current_time - row['last_page_view'];

skal være:

  $online_add = ($row['last_page_view'] > 0) ? $current_Time - $row['last_page_view'] : 0;
Avatar billede alrua Nybegynder
15. december 2002 - 04:07 #29
og så skal du bare lave en funktion som kan lave tiden i sekunder om til et læsbart format...kan godt skrive den til dig, men det bliver i så fald først i morgen..smutter i seng nu :)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:07 #30
Får en Parse error: parse error in c:\apache\htdocs\chat\test.php on line 33

linje 33:  $online_add = $current_time - row['last_page_view'];
Avatar billede alrua Nybegynder
15. december 2002 - 04:08 #31
skift den ud med den anden linje jeg lige skrev :)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:08 #32
Okay så er det gjort men nu får jeg fejl her: Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\chat\test.php on line 30

Linje 30:  $row = mysql_fetch_array($result);
Avatar billede alrua Nybegynder
15. december 2002 - 04:09 #33
har du ændret det så $_SESSION[id] bliver til der hvor du rent faktisk har gemt brugerens id? :)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:10 #34
?
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:10 #35
Min kode ser således ud:

<?
session_start();
?>

<html>
<body>
<?
// Tjekker om brugeren er logget ind
if ($s_navn && $s_password) {
?>
<?
include ("config.php");
mysql_connect($host,$user,$pass);
mysql_select_db($db);
$query = mysql_query("SELECT * FROM brugere WHERE navn='$s_navn' AND password='$s_password'") or print mysql_error();
while($r = mysql_fetch_array($query)) {
$id = $r["id"];
$navn = $r["navn"];
$password = $r["password"];
$email = $r["email"];
$alder = $r["alder"];
$hjemmeside = $r["hjemmeside"];
$status = $r["status"];
//tiden nu:
  $current_time = time();
//hent de gamle data ud...
//går ud fra at brugerid ligger i en sessionvariabel, ellers kan du jo ændre det...
  $sql = "SELECT * FROM brugere WHERE id = $_SESSION[id]";
  $result = mysql_query($sql);
  $row = mysql_fetch_array($result);

//find onlinetid siden sidst
$online_add = ($row['last_page_view'] > 0) ? $current_Time - $row['last_page_view'] : 0;

//totale onlinetid
  $online_total = $row['online_time'] + $online_add;

//opdater databasen
  $sql = "UPDATE brugere SET last_page_view = $current_time, online_time = $online_total WHERE id = $_SESSION[id]";
  mysql_query($sql);
}
?>


Velkommen <? echo "$navn" ?><br><br>




Du har status <? echo "$status" ?><br>Online: <? include('useronline.php') ?>

<br><a href="ret.php">[Ret profil]</a>
<a href="index.php">[Log af]</a> <? if($status[status]>3) { echo "<a href=admin.php>[Admin]</a> "; }?><br>

<?
// Hvis brugeren ikke er logget ind
} else {
?>
ALERT: Du skal logge ind
<?
}
?>

</body>
</html>
Avatar billede alrua Nybegynder
15. december 2002 - 04:11 #36
så skal du bare lave om i de sql-queries jeg skrev..

lav
  WHERE id = $_SESSION[id]
om til
  WHERE navn = '$s_navn'
Avatar billede alrua Nybegynder
15. december 2002 - 04:11 #37
i både select og update query
Avatar billede alrua Nybegynder
15. december 2002 - 04:11 #38
nej hov...
Avatar billede alrua Nybegynder
15. december 2002 - 04:12 #39
bare behold det, men skriv $r[id] i stedet for $_SESSION[id]
Avatar billede alrua Nybegynder
15. december 2002 - 04:12 #40
argh!
Avatar billede alrua Nybegynder
15. december 2002 - 04:13 #41
hmm...skriver det lige om... :)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:13 #42
Sådan ingen fejl... Så kan du hjælpe mig imorn med at få den til at vise hvis du gider?

Hvornår kommer du online?
Avatar billede alrua Nybegynder
15. december 2002 - 04:14 #43
//tiden nu:
  $current_time = time();

//find onlinetid siden sidst
$online_add = ($r['last_page_view'] > 0) ? $current_Time - $r['last_page_view'] : 0;

//totale onlinetid
  $online_total = $r['online_time'] + $online_add;

//opdater databasen
  $sql = "UPDATE brugere SET last_page_view = $current_time, online_time = $online_total WHERE id = $r[id]";
  mysql_query($sql);
Avatar billede alrua Nybegynder
15. december 2002 - 04:14 #44
når det står sammen med din egen kode har du jo allerede hentet det hele ud...så er der ingen grund til at gøre det igen ;)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:16 #45
Så nu virker det nu skriver den til databasen
Avatar billede alrua Nybegynder
15. december 2002 - 04:16 #46
weeh :)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:16 #47
Hva mener du? Kan jeg allerede udskrave nu?
har du evt. msn?
Avatar billede alrua Nybegynder
15. december 2002 - 04:16 #48
så skal du jo bare hive det ud og lave sekunderne om til dage/time etc. - jeg kan godt lave en funktion til dig, men det bliver som sagt først imorgen :)
Avatar billede alrua Nybegynder
15. december 2002 - 04:16 #49
jeps, alrua55@hotmail.com
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:17 #50
Okay

men er det meningen at den skriver minus -1039922147 i onlinetime?
Avatar billede alrua Nybegynder
15. december 2002 - 04:18 #51
næh ;)
Avatar billede zuperjmo Nybegynder
15. december 2002 - 04:19 #52
Pis hva så?
Avatar billede alrua Nybegynder
15. december 2002 - 04:30 #53
hov...skrev $current_Time (med stort T) - så virker det vist ikke rigtigt ;)

hvis du retter det til lille skulle den være der :P
Avatar billede alrua Nybegynder
15. december 2002 - 04:30 #54
og et svar... :P
Avatar billede alrua Nybegynder
15. december 2002 - 04:34 #55
takker :) gnat...
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