Avatar billede raan Nybegynder
09. oktober 2006 - 20:59 Der er 44 kommentarer og
1 løsning

online og offline

hej derude :)
.. jeg er igang med at lave et brugersystem med session.
men nu skal jeg til at lave en funktion hvor man kan se om brugeren er online eller offline, ved godt jeg lige har spurgt om noget i samme stil, hvordan man kan se hvornår de sidst var online, men nu efterlyser jeg lige det andet?
håber i kan hjælpe ..
Avatar billede zynzz Praktikant
09. oktober 2006 - 21:06 #1
Du kan lave en række mere i din database hvor du indsætter en tid når de logger ind...
Avatar billede raan Nybegynder
09. oktober 2006 - 21:16 #2
jamen, hvordan får jeg den så til at vise om de er online eller offline?
Avatar billede jannek_ek Nybegynder
09. oktober 2006 - 21:45 #3
Det er svært at lave det så det 100% virker, men jeg har lavet et loginsystem, der opdateres via et iframe hvert minut, hvor det registreres at brugeren er online. Når man så skal se om brugeren er online, regnes der et minut tilbage, og alle der var på på det tidspunkt bliver noteret som online.
logud funktionen trækker 70 sekunder fra, så man ikke bliver registreret som online mere.
Der kan være op til et minuts misvisning, hvis brugeren lukker browservinduet.
Avatar billede raan Nybegynder
09. oktober 2006 - 21:47 #4
Ja, det ved jeg godt ..
- men bare ca.
Avatar billede jannek_ek Nybegynder
09. oktober 2006 - 22:02 #5
har lige klippet noget sammen fra noget af min kode:

Et skjult iframe på alle siderne:
<?php
session_start();

mysql_query("update `users` set `lastseen`=".time()." where `id`=".$_SESSION["id"]);
?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html>
<head>
<script type="text/javascript">
setTimeout('location.reload(true)',60000)
</script>
<meta http-equiv="Refresh" content="62" />
<meta name="robots" content="none" />
</head>
</html>



script til at se hvem der er online:
<?php
$users = mysql_query("select `name`, `lastseen` from `users` order by `name`");
 
while ($row = mysql_fetch_array($users))
  echo $row["name"]." is Online "(($row["lastseen"] > time() - 69) ? "True" : "False");
?>


script der kaldes når man logger ud:
<?php
  mysql_query("update `users` set `lastseen`=".(time() - 70)." where `id`=".$_SESSION["id"]);
  unset($_SESSION["id"]);
?>
Avatar billede jannek_ek Nybegynder
09. oktober 2006 - 22:03 #6
hov glemte punktum, linien skal hedde
  echo $row["name"]." is Online ".(($row["lastseen"] > time() - 69) ? "True" : "False");
Avatar billede raan Nybegynder
09. oktober 2006 - 22:05 #7
inde i databsen skal jeg lave en linje med lastseen også datetime ?
Avatar billede raan Nybegynder
09. oktober 2006 - 22:09 #8
er lidt i tvivl, men er det her rigtigt?

<?php
$users = mysql_query("select `10kcb_profil`, `lastseen` from `users` order by `username`");
 
while ($row = mysql_fetch_array($users))
  echo $row["username"]." is Online "(($row["lastseen"] > time() - 69) ? "True" : "False");
?>
Avatar billede jannek_ek Nybegynder
09. oktober 2006 - 22:19 #9
hov ja det er ikke nødvendigt at bruge feltet id i databesen.

mysql_query("update `users` set `lastseen`=".time()." where `id`=".$_SESSION["id"]);

kan du ændre til

mysql_query("update `users` set `lastseen`=".time()." where `10kcb_profil`=".$_SESSION["id"]);

hvis 10kcb_profil er det felt hvor brugerens unikke navn står. Men nej det virker ikke det du har lavet, da du ikke henter username fra databasen.


jeg har ikke conected til en database i nogle af koderne:

<?php
// DB - CONNECTION
$host = "";
$user = "";
$pass = "";
$db = "";
$conn = mysql_connect($host, $user, $pass) or db_error(mysql_error());
mysql_select_db($db) or db_error(mysql_error());
?>

men databasen skal indeholde to felter:
name, username, 10kcb_profil, eller hvad det hedder det felt hvor navnet/id står
og
lastseen, der skal være en int(11)
Avatar billede raan Nybegynder
09. oktober 2006 - 22:34 #10
jeg forstår ikke så meget af det der.
.. men jeg har en database der hedder 10kcb_profil, og i den tabel er der de 2 felter som du snakker om, og det hedder username og lastseen.

så hvordan skal jeg sætte det sammen?
Avatar billede jannek_ek Nybegynder
09. oktober 2006 - 22:57 #11
først skal der forbindes til databasen, det skal stå øverst på alle siderne, gem den som db.php, så den kan blive inkluderet på alle siderne:

<?php
// DB - CONNECTION
$host = "adressen til databasen, ofte localhost";
$user = "dit brugernavn";
$pass = "din kode";
$db = "10kcb_profil";
$conn = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
?>

alle de sidder du har, skal have et skjult iframe i toppen, der henter siden:

<?php
include("db.php");// forbinder til databasen
session_start();
mysql_query("update `DIN_TABEL` set `lastseen`=".time()." where `username`=".$_SESSION["username"]);
?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html>
<head>
<script type="text/javascript">
setTimeout('location.reload(true)',60000)
</script>
<meta http-equiv="Refresh" content="62" />
<meta name="robots" content="none" />
</head>
</html>


når du så skal se hvem der er online, går du ind på siden med koden:
<?php
include("db.php");// forbinder til databasen
session_start();

$users = mysql_query("select `username`, `lastseen` from `DIN_TABEL` order by `username`");

while ($row = mysql_fetch_array($users)) // udskriver online-status for hver enkelt bruger
  echo "<br>".$row["username"]." is Online "(($row["lastseen"] > time() - 69) ? "True" : "False");
?>


og på den side, hvor man logger af, skal følgene script stå:
<?php
include("db.php");
  mysql_query("update `DIN_TABEL` set `lastseen`=".(time() - 70)." where `username`=".$_SESSION["username"]);
  unset($_SESSION["username"]);
?>

til sidst er det vigtigt at du opretter den session, hvor ens brugernavn står i, når man logger på, altså $_SESSION["username"] skal ha værdien af det brugernavn man logger på med.
Avatar billede raan Nybegynder
10. oktober 2006 - 08:27 #12
Parse error: syntax error, unexpected '(', expecting ',' or ';' in /customers/randersen.dk/randersen.dk/httpd.www/test/8/onlineliste.php on line 8

<?php
include("sql.php");// forbinder til databasen
session_start();

$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` order by `username`");

while ($row = mysql_fetch_array($users)) // udskriver online-status for hver enkelt bruger
echo "<br>".$row["username"]." is Online "(($row["lastseen"] > time() - 69) ? "True" : "False");
?>
Avatar billede olebole Juniormester
10. oktober 2006 - 14:48 #13
<ole>

Du manglede et punktum:

echo "<br>".$row["username"]." is Online ".(($row["lastseen"] > time() - 69) ? "True" : "False");

Dette punktum:
    is Online ".(  <-- her

/mvh
</bole>
Avatar billede raan Nybegynder
10. oktober 2006 - 17:05 #14
nu laver den bare en liste over alle bruger der er, også der der fx. M2ra is Online False
Avatar billede jannek_ek Nybegynder
10. oktober 2006 - 19:54 #15
ja det gør den, men hvis du kun vil se dem der er online, skal din sql hedde:

<?php
include("sql.php");// forbinder til databasen
session_start();

$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` where `lastseen`>".(time() - 70)." order by `username`");

while ($row = mysql_fetch_array($users)) // udskriver online-status for hver enkelt bruger
echo "<br>".$row["username"]." is Online ".(($row["lastseen"] > time() - 69) ? "True" : "False"); // der er ikke behov for dette, da kun onlinebrugere bliver vist.
?>
Avatar billede raan Nybegynder
10. oktober 2006 - 21:07 #16
der er ingen fejl nogen steder, men den viser bare ikke hvem der er online ? :s
Avatar billede jannek_ek Nybegynder
10. oktober 2006 - 21:14 #17
så er fejlen et andet sted...
hvad med dit iframe virker det fint?
Avatar billede raan Nybegynder
10. oktober 2006 - 21:17 #18
jaja, den updatere hver min :) har nelig tjekket ..
Avatar billede raan Nybegynder
22. oktober 2006 - 23:37 #19
jeg venter stadig ?
Avatar billede raan Nybegynder
25. oktober 2006 - 13:00 #20
en anden der kan hjælpe ?
Avatar billede zynzz Praktikant
25. oktober 2006 - 16:19 #21
Har du et felt i mySQL hvor den sætte om brugeren er online ?, og du vil gerne have en liste med alle online personer ?
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 16:56 #22
beklager men er her igen nu, har ikke lige haft så meget tid i ferien...
men jeg kan forestille mig at der ikke kommer noget outpu fordi der ikke er nogle online

prøv:

<?php
include("sql.php");// forbinder til databasen
session_start();

$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` where `lastseen`>".(time() - 70)." order by `username`");

if (mysql_num_rows($users) == 0)
  echo "Der er ingen brugere online";

while ($row = mysql_fetch_array($users)) // udskriver online-status for hver enkelt bruger
echo "<br>".$row["username"]." is Online ".(($row["lastseen"] > time() - 69) ? "True" : "False"); // der er ikke behov for dette, da kun onlinebrugere bliver vist.
?>
Avatar billede raan Nybegynder
25. oktober 2006 - 19:10 #23
Nu siger den af der ingen bruger er online, hvordan kan det være ? :s
Avatar billede raan Nybegynder
25. oktober 2006 - 19:20 #24
lastseen  int(11)  Nej  0

^ og sådan ser min tabel ud ? (:
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 19:21 #25
<?php
include("sql.php");

echo (time() - 70);

$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` order by `username`");

while ($row = mysql_fetch_array($users))
{
echo $row["lastseen"]." - ".$row["username"];
}
?>

prøv lige at kør det her og se om dem, der burde være online har en lastseen tid der er højere end den tid der står øverst...
Avatar billede raan Nybegynder
25. oktober 2006 - 19:23 #26
nu smider den en liste ud over alle bruger ?
- men de er offline ?
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 19:39 #27
ja den viser alle brugere, om de er online eller offline.
hvis en bruger er online, skulle hans tal gerne være højere end det der står på øverste line.

hov har glemt linieskif

echo $row["lastseen"]." - ".$row["username"];

skal hedde

echo "<br>".$row["lastseen"]." - ".$row["username"];

men sørg for at der er en du ved er online, og så post dit output her
Avatar billede raan Nybegynder
25. oktober 2006 - 19:43 #28
1161798076
0 - Af
0 - Ai
0 - Ap
0 - As
0 - BDc

osv derned ad ..

og jeg ved der er to online ! :D
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 20:05 #29
hmm post lige det iframe du har på alle siderne ... for alle brugere burde ha et nummer i stil med det der står i toppen
Avatar billede raan Nybegynder
25. oktober 2006 - 20:31 #30
jamen kan jeg ikke smide den op i toppen på siden ? :)
Avatar billede raan Nybegynder
25. oktober 2006 - 20:42 #31
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 20:50 #32
ahh det forklare en hel del...
du har to sider liggende på samme side.

det der skulle ind i et iframe skal være en side for sig selv.
og på hovedsiden skal du smidde et iframe:

<iframe src="online.php" style="display: none"></iframe>

online.php skal indeholde det der står nedderst på din side:

<?php
include("sql.php");
session_start();
mysql_query("update `10kcb_profil` set `lastseen`=".time()." where `username`=".$_SESSION["username"]);
?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html>
<head>
<script type="text/javascript">
setTimeout('location.reload(true)',60000)
</script>
<meta http-equiv="Refresh" content="62" />
<meta name="robots" content="none" />
</head>
</html>

hvis du har lavet det med sessions rigtigt, burde det virke.
Avatar billede raan Nybegynder
25. oktober 2006 - 21:05 #33
den viser bare stadig et nul ud for hver bruger ! :s
Avatar billede raan Nybegynder
25. oktober 2006 - 21:12 #34
men tænkte på (:
- er det ikke nemmere hvis man bare sætter den til at skrive 1 hvis man er online og hvis man er offline skriver den 0 ? :)
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 21:18 #35
hmm du starter aldrig dit body tag.... efter </head> går du direkte til at skrive sidens indhold... men ved ikke om den fejl har noget med online/offline fejlen at gøre...

hov har lige opdaget at jeg er kommet til at give en session et forkert navn :(
lav
$_SESSION["username"]
om til
$_SESSION["id"]

og se om det virker
Avatar billede raan Nybegynder
25. oktober 2006 - 21:26 #36
hvorfor id ? (:
- det er vel usernamet vi skal ha' fat i ? .
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 21:34 #37
ja jeg opdagede bare lige at jeg havde skrevet id de andre steder ... men hvad hedder den session, som du gemmer brugerens navn i??
Avatar billede raan Nybegynder
25. oktober 2006 - 21:35 #38
onlinetjek (:
- har selv rettet den til det ..
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 21:46 #39
mysql_query("update `10kcb_profil` set `lastseen`=".time()." where `username`=".$_SESSION["username"]);
skal være
mysql_query("update `10kcb_profil` set `lastseen`=".time()." where `username`='".$_SESSION["onlinetjek"]."'");

der er tilføjet ' uden om brugernavnet... Ellers kommer der en sql fejl, men den ser man ikke når iframet er skjult.
Avatar billede raan Nybegynder
25. oktober 2006 - 22:08 #40
se nu skete der noget :)

1161806590 - M2ra

men hvordan laver jeg så en liste over hvem der er online ?
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 22:15 #41
<?php
$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` where `lastseen`>".(time() - 70)." order by `username`");

while ($row = mysql_fetch_array($users))
{
echo "<br>".$row["username"];
}
?>
Avatar billede raan Nybegynder
25. oktober 2006 - 22:19 #42
det virker ! (:

lige en sidste ting?
- inde i profilerne, vil jeg geren ha' der er en grøn prik hvis de er online og en rød for offline, hvordan gør man det ?
Avatar billede jannek_ek Nybegynder
25. oktober 2006 - 22:30 #43
$users = mysql_query("select `username`, `lastseen` from `10kcb_profil` where `username`='".(den profil man er inde på)."'");

while ($row = mysql_fetch_array($users))
{
if ($row["lastseen"] > time() - 70)
  echo "<img src=\"groen_prik.gif\" \>";
else
  echo "<img src=\"roed_prik.gif\" \>";
}
Avatar billede raan Nybegynder
25. oktober 2006 - 22:37 #44
det virker og :)

MANGE TAk for hjælpen !!!
- et svar ?
Avatar billede jannek_ek Nybegynder
26. oktober 2006 - 14:39 #45
det var DA så lidt :p
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