login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Status Script (Opgelost)

Offline Designick - 31/01/2009 19:18 (laatste wijziging 31/01/2009 20:34)
Avatar van DesignickNieuw lid Ik wil graag een scriptje bij elk gepost bericht zetten waar je kunt zien of deze online of offline is.
Verder als dit kom ik niet.
  1. <?
  2. include("config.php");
  3.  
  4. $sql = "SELECT naam,status FROM gebruikers WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive ORDER BY naam ASC";
  5. $query = mysql_query($sql);
  6. while($rij = mysql_fetch_object($query)) {
  7. $status = htmlspecialchars($rij->status);
  8. if($status == 1) {
  9. echo "<h1>Online</h1>";
  10. }else{
  11. echo "Offline";
  12. }
  13. }
  14. ?>

Hij laat wel zien als iemand online is maar offline dan laat die niks zien en verdwijnt online ook gewoon.
hopelijk iemand die me kan helpen.

16 antwoorden

Gesponsorde links
Offline Tuinstoel - 31/01/2009 19:55
Avatar van Tuinstoel PHP expert Ik vind het een apart script. Je zet toch geen aparte status in een tabel terwijl je al de laatste activiteit bijhoudt ('lastactive'), dat is mijn inziens krom. Het enige wat je wat mij betreft moet doen is de timestamp controleren in de database. Je bent wat mij betreft vaag bezig met je query. Weet je wel wat DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive uithaalt? Ik namelijk niet zonder in de manual te kijken.

Oplossing is simpel wat mij betreft (gebruik het zelf ook): Gewoon de timestamp opvragen en op basis daarvan zeggen dat de user on- of offline is door middel van een php if/else constructie.

  1. <?php
  2. if($iLastActive >= (time()-300))
  3. { echo 'online'; }
  4. else {
  5. echo 'offline';
  6. } ?>
Offline Martijn2008 - 31/01/2009 20:06 (laatste wijziging 31/01/2009 20:31)
Avatar van Martijn2008 PHP beginner Probeer dit is:
  1. <?
  2.  
  3. include("config.php");
  4.  
  5. $q = "SELECT naam,status FROM gebruikers WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive ORDER BY naam ASC";
  6. $r = mysql_query($q) or die(mysql_error());
  7. $c = mysql_num_rows($r);
  8. if($c==0)
  9. {
  10. echo 'geen users';
  11. }
  12. else
  13. {
  14. while($sql = mysql_fetch_assoc($r))
  15. {
  16. echo userStatus($sql['status'], 'Online', 'Offline');
  17. }
  18. }
  19.  
  20. ?>


Waarschijnlijk wil je de userStatus vaker dan 1 keer weergeven, daarom heb ik speciaal voor jou nog een functie geschreven. Dat bespaart je namelijk veel overbodig script werk. Daarnaast houdt het je code lekker overzichtelijk. Als je dan een keer later problemen hebt, of je wilt iets aanpassen, dan hoef je niet alles controller voor controller door te lezen en aan te passen, maar hoef je alleen de functie aan te passen. Erg handig dus!

  1. <?
  2.  
  3. /**
  4.  * LET OP! Laad deze functie eerst in voordat je deze gebruikt!
  5.  * @value: input (1 = online, 0 = offline)
  6.  * @online: output online: bijvoorbeeld een plaatje of tekst
  7.  * @offline: output online: bijvoorbeeld een plaatje of tekst
  8.  */
  9.  
  10. function userStatus($value, $online, $offline)
  11. {
  12. if($value==1)
  13. {
  14. $value = $online;
  15. }
  16. else
  17. {
  18. $value = $offline;
  19. }
  20. return $value;
  21. }
  22.  
  23. ?>


Hieronder zie je een voorbeeld hoe je deze functie zou kunnen gebruiken.

  1. <?
  2.  
  3. /**
  4.  * Dit is een voorbeeld
  5.  * Op de plaats van '1' zou jij $status moeten zetten
  6.  * Dus zo: echo userStatus($status, 'Online', 'Offline');
  7.  */
  8.  
  9. echo userStatus('1', 'Online', 'Offline');
  10.  
  11. ?>


Succes !

Martijn

P.s. Ik ben ervan uitgegaan dat jouw MySQL query klopt, als je dit zelf niet zeker weet zou ik de reactie van Tuinstoel zeker ook nog eens lezen! Ik weet namelijk ook niet wat deze MySQL functies doen.
Offline Abbas - 31/01/2009 20:12
Avatar van Abbas Gouden medaille

Crew .NET
Titel veranderen, iedereen heeft wel een "probleem" als hij een topic post!
Offline Designick - 31/01/2009 20:48
Avatar van Designick Nieuw lid Oke, Ja ik ben echt een php noob maar de 1e moet ik gewoon als vervanger gebruiken en de 3e op de pagina van het bericht dat gepost word. lijkt me? .. maar de 2e waar gebruik ik die voor?  
Offline vinTage - 31/01/2009 20:53 (laatste wijziging 31/01/2009 20:53)
Avatar van vinTage Nieuw lid @martijn2008, onzin om daar een functie voor te maken....

  1. echo $sql['status'] == 0 ? 'offline' : 'online';
Offline Designick - 31/01/2009 21:00
Avatar van Designick Nieuw lid Dus het zou zo moeten?
  1. <?
  2.  
  3. include("config.php");
  4.  
  5. $q = "SELECT naam,status FROM gebruikers WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive ORDER BY naam ASC";
  6. $r = mysql_query($q) or die(mysql_error());
  7. $c = mysql_num_rows($r);
  8. if($c==0)
  9. {
  10. echo 'geen users';
  11. }
  12. else
  13. {
  14. while($sql = mysql_fetch_assoc($r))
  15. {
  16. echo $sql['status'] == 0 ? 'offline' : 'online';
  17. }
  18. }
  19.  
  20. ?>
Offline vinTage - 31/01/2009 21:10 (laatste wijziging 31/01/2009 21:13)
Avatar van vinTage Nieuw lid Dat zou idd in de buurt moeten komen.
Een testje is gauw genoeg gedaan he 
Ik zou alleen wel de usernaam erbij echoen 
  1. while($sql = mysql_fetch_assoc($r))
  2. {
  3. echo $res['naam']. " is: ";
  4. echo $sql['status'] == 0 ? 'offline' : 'online';
  5. echo "<br />\r\n";
  6. }
Offline Designick - 31/01/2009 21:14
Avatar van Designick Nieuw lid Ja bij het testje zeg die alleen. geen users. maar hij ziet nu toch helemaal niet welke user hij moet pakken uit de database?

Zoals je al zei dus ;)..

Hoe zou je het zelf doen dn?
Offline vinTage - 31/01/2009 21:20 (laatste wijziging 31/01/2009 21:20)
Avatar van vinTage Nieuw lid user ?

oh, ik dacht een lijst van ALLE users...je hoef dan ook die order etc niet te gebruiken, vandaar dat ik dacht ALLE users


  1. $sql = "SELECT naam,status FROM gebruikers WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive WHERE id ='".mysql_real_escape_string($_GET['userid'])."'";


Offline Designick - 31/01/2009 21:23 (laatste wijziging 31/01/2009 21:26)
Avatar van Designick Nieuw lid Ja ik wil het bij een gepost bericht zetten als status (zoals het forum hier  ). ik ga deze even proberen

Edit: Ik kom er nu ook achter dat phpmyadmin echt heel lang doet over het refreshen, teminste als ik hem refresh blijft deze nog op "status 1" staan. Terwijl ik een goeie uitlogpagina heb.
Offline vinTage - 31/01/2009 21:27 (laatste wijziging 31/01/2009 21:29)
Avatar van vinTage Nieuw lid ho, maar dan klopt die get niet he..
  1. $sql = "SELECT naam,status FROM gebruikers WHERE DATE_SUB(NOW(),INTERVAL 10 MINUTE) <= lastactive WHERE userid = '".$vorigeFetch['poster_id']);
Offline Designick - 31/01/2009 21:33
Avatar van Designick Nieuw lid Er is iets mis met de code. ik zie m alleen niet zo snel
iets met de userid=""
Offline vinTage - 31/01/2009 21:41
Avatar van vinTage Nieuw lid mjah, wij kunnen niet ruiken hoe jouw db eruit ziet he ...

gewoon het id/gebruikersid/whatever hoe die kolom heet
Offline Martijn2008 - 31/01/2009 21:48 (laatste wijziging 31/01/2009 21:57)
Avatar van Martijn2008 PHP beginner Als je een uitdraai van jouw gebruikerstabel hier post, dan kunnen we je verder helpen.

Je zou de volgende query nog kunnen proberen:

  1. <?
  2.  
  3. $q = "SELECT * FROM gebruikers ORDER BY naam ASC";
  4.  
  5. ?>
Offline vinTage - 31/01/2009 22:05
Avatar van vinTage Nieuw lid
Martijn2008 schreef:
Je zou de volgende query nog kunnen proberen:

$q = "SELECT * FROM gebruikers ORDER BY naam ASC";


lezen is een vak apart he 
Offline Designick - 31/01/2009 22:08 (laatste wijziging 31/01/2009 22:10)
Avatar van Designick Nieuw lid Stjaa, ik ben maar aan het proberen maar kom er niet uit met me noobie php kennis.
Ehm. wil je dat ik m ff kopieer?

id / naam /wachtwoord / status / email / actief (Geregistreed of niet) /lastactive

Edit, de laatste werkt alleen zit nog met het probleem van de late updating van de datebase.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.285s