Avatar billede human Nybegynder
29. april 2004 - 21:29 Der er 25 kommentarer og
1 løsning

online users script

Heysa!

Sidder med et problem, jeg er ved at lave en lille side. På den side skal man kunne se hvilke brugere der er online, og gerne hvor længe de har været det. Jeg har lavet et script, men synes ikke det fungerer optimalt. Så er der en der har et forslag til hvordan det kan fungere? Gerne med kode eksempler.
Avatar billede Syska Mester
29. april 2004 - 21:35 #1
må vi se koden eller skal du bare kigge i det andet spm du lige har lukket om samme emne?
Avatar billede jakobdo Ekspert
29. april 2004 - 21:47 #2
Altså for at se hvor længe en bruger har været online, skal vel bruge noget bruger-administration i første omgang, så en bruger logger sig ind?

Men du kan jo lave noget lign dette i toppen:

Bruger besøger side, sletter alle brugere som ikke har været "online" i 10 minutter!
Sætter brugerens ip ind i mysql-tabel...

Ved at alle gør dette, antager vi at en bruger er online (på en side) omkring 10 minutter, herefter er han offline! :o)

Så kan vi lave et udtræk på den tabel, alle som er i den, må være online...

Så er det bare at gemme noget brugernavn/brugerid u name it.
Avatar billede human Nybegynder
29. april 2004 - 21:48 #3
buzzzz: Ja, det var om det samme emne. Men det er netop det script jeg taler om ikke er optimalt, derfor jeg sprøger om nye ideer.

Ville sætte pris på hvis du for fremtiden lod være med at kommentere mine indlæg hvis de  ikke hjælper på nogen som helst måde.
Avatar billede jakobdo Ekspert
29. april 2004 - 21:50 #4
Kan du bruge denne side: http://www.udvikleren.dk/article.php?aid=148&techid=6
Jeg har selv brugt dette, og modificeret koden, så jeg på min side kan se hvilke brugere som er logget ind, og hvem som blot er "ukendte"...
Avatar billede human Nybegynder
29. april 2004 - 21:51 #5
Mange tak. Vil lige tage et kig på det :)
Avatar billede Syska Mester
29. april 2004 - 21:52 #6
Det er mod reglerne, så drop bare den venlige tone mod mig :-)

Det er for det meste alligevel de samme som læser det hele, og svarer, så det er nok ikke mange flere svar du får her.
Avatar billede jakobdo Ekspert
29. april 2004 - 21:56 #7
Og skal du bruge nogle tilretninger, kan jeg prøve at hjælpe! :o)
Avatar billede human Nybegynder
29. april 2004 - 22:04 #8
buzzz: Synes du skal gennemlæse det gamle spg. Og så det her, og du ser det ikke er det samme.
Avatar billede human Nybegynder
29. april 2004 - 22:07 #9
jakobdo: Mht. det du siger i din første kommentar: Hvad så hvis brugeren logger ind, han lukker browseren, åbner browser, og logger ind igen. Så vil hans navn blive vist 2 gange som online.
Avatar billede Syska Mester
29. april 2004 - 22:32 #10
samme bruger kan vel kun være logget ind 1 gang, så det kommer ikke til at ske
Avatar billede human Nybegynder
29. april 2004 - 22:43 #11
$maxtime = time() -600;
mysql_query("DELETE FROM users_online WHERE UNIX_TIMESTAMP(activ) < '$maxtime'") or die(mysql_error());

mysql_query("INSERT INTO users_online (username,activ,ip,url,user_agent)        VALUES ('$online_user',NOW(), '{$_SERVER['REMOTE_ADDR']}','$onlineurl','{$_SERVER['HTTP_USER_AGENT']}')") or die(mysql_error());

Men den sletter ikke noget som helst. Det der er inkluderet på hver eneste side. Men hver gang brugeren skifter side, så er der en ny række i tabellen, med samme username!
Og det holder jo ikke. Hvordan fixer man det ?
Avatar billede human Nybegynder
29. april 2004 - 23:01 #12
Hmm.. Burde det her ikke virke:

<?php

if(isset($_SESSION['username'])) {

$online_user = $_SESSION['username'];
$maxtime = time() -600;
$onlineurl = "http://".$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
mysql_query("DELETE FROM du_users_online WHERE UNIX_TIMESTAMP(activ) < '$maxtime'") or die(mysql_error());

if(isset($_SESSION['online'])) {

mysql_query("UPDATE du_users_online SET activ=NOW() url='$onlineurl'");
}else{
session_register("online");
mysql_query("INSERT INTO du_users_online (username,activ,ip,url,user_agent)        VALUES ('$online_user',NOW(), '{$_SERVER['REMOTE_ADDR']}','$onlineurl','{$_SERVER['HTTP_USER_AGENT']}')") or die(mysql_error());

}
}

?>

Problemer er, at den smider en ny række ind, når brugeren hopper rundt på de forskellige sider.
Avatar billede Syska Mester
29. april 2004 - 23:07 #13
spm:
1) hvorfor sætte den session til $online_user?
2) brug session_is_registered("sesnavn"), da det ser du til at den ikke kan finde ud af om online er sat.....
Avatar billede human Nybegynder
29. april 2004 - 23:20 #14
Kan du ikke prøve at sætte det ind i min kode? Er ikke sikker på hvad du vil have det istedet for.
Avatar billede Syska Mester
29. april 2004 - 23:23 #15
if(isset($_SESSION['online'])) {
til
if(session_is_registered("online")) {

fjern
$online_user = $_SESSION['username'];

VALUES ('$online_user',NOW(),
til
VALUES ('".$_SESSION["username"]."',NOW(),
Avatar billede Syska Mester
29. april 2004 - 23:25 #16
så spørger den om sessionen online er sat, er den det, så updater den.

mysql_query("UPDATE du_users_online SET activ=NOW() url='$onlineurl'");
til
mysql_query("UPDATE du_users_online SET activ=NOW() url='$onlineurl' WHERE username='".$_SESSION["username"]."'");
Avatar billede human Nybegynder
29. april 2004 - 23:28 #17
Ser ud til det klarede tricket. Thx!

Smid svar.
Avatar billede human Nybegynder
29. april 2004 - 23:29 #18
Eller næsten, den opdatere ikke felterne url og activ.
Avatar billede Syska Mester
29. april 2004 - 23:31 #19
mysql_query("UPDATE du_users_online SET activ=NOW() url='$onlineurl' WHERE username='".$_SESSION["username"]."'");
til
mysql_query("UPDATE du_users_online SET activ=NOW(), url='$onlineurl' WHERE username='".$_SESSION["username"]."'");

Der manglede et ,(komma)
Avatar billede human Nybegynder
29. april 2004 - 23:33 #20
Skal nævne den ser således ud nu:
mysql_query("UPDATE du_users_online WHERE username='".$_SESSION["username"]."' SET activ=NOW(), url='$onlineurl'") or die(mysql_error());

får


You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username='Human' SET activ=NOW() url='http://www.doodoo.d
Avatar billede Syska Mester
29. april 2004 - 23:33 #21
smid også et or die(mysql_error()); på din update
Avatar billede Syska Mester
29. april 2004 - 23:34 #22
mysql_query("UPDATE du_users_online WHERE username='".$_SESSION["username"]."' SET activ=NOW(), url='$onlineurl'") or die(mysql_error());
til
mysql_query("UPDATE du_users_online SET activ=NOW(), url='$onlineurl' WHERE username='".$_SESSION["username"]."'") or die(mysql_error());
Avatar billede human Nybegynder
29. april 2004 - 23:35 #23
Byttede om på min where og set. Det virker nu.
Giver jo også mere mening på den måde. Smid svar
Avatar billede human Nybegynder
29. april 2004 - 23:35 #24
Kan du se, så blev problemet alligevel løst ved at oprette et nyt indlæg ;)
Avatar billede Syska Mester
29. april 2004 - 23:39 #25
jaja, jeg hjalp også efter der kom noget kode på eller tror jeg sådan et indlæg skal ind under opgaver, men jeg ved ikke....
Synes bare der er mange trælse der bliver ved med at oprette indlæg igen og igen :-)

men nu er alle glade og jeg skal til at i seng, lyster ikke mere php/mysql i dag, men fortsætter lystigt i morgen....
Avatar billede human Nybegynder
29. april 2004 - 23:45 #26
Tihi ;)

Nat nat :)
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