login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Users online script.

Offline Scythen - 11/02/2007 20:17
Avatar van ScythenPHP gevorderde Hallo beste mensen,

ik ben net begonnen met een users online script, en heb nu even een sql gemaakt genaamd

online int waarde 1 not null

en als je loggedin word zeg maar, verandert die 0 in een 1..

nou wou ik vragen of dit klopt, zo ja.. hoe moet ik verder?

BVD.

16 antwoorden

Gesponsorde links
Offline nielsvdwal - 11/02/2007 20:20
Avatar van nielsvdwal PHP gevorderde is niet echt slim, want hoe wil je nu checken of er iemand niet meer online is?
Offline Scythen - 11/02/2007 20:22
Avatar van Scythen PHP gevorderde Bij de logout.php, update set 0 bij de login..?
Offline Extent - 11/02/2007 20:22
Avatar van Extent PHP interesse Maar wat als iemand zijn/haar venster gewoon wegklikt?...
Dan werkt jouw manier meteen niet meer..
Offline Scythen - 11/02/2007 20:23
Avatar van Scythen PHP gevorderde Hmm, enig idee hoe ik het dan wel kan doen?
Offline Stefan14 - 11/02/2007 20:26
Avatar van Stefan14 PHP gevorderde bij iedere klik die iemand maakt sla je de huidige tijd op, dan maak je bij je online scriptje een query die alle gebruikers ophaalt die in bijv. de laatste 5 minuten nog geklikt hebben, en die geef je weer.

Dit is de meest gebruikte manier.
Offline Scythen - 11/02/2007 20:27
Avatar van Scythen PHP gevorderde Oeih, makkelijker gezegd dan gedaan.. kan je misschien een voorbeeld geven?
Offline Godlord - 11/02/2007 20:28 (laatste wijziging 11/02/2007 20:29)
Avatar van Godlord PHP gevorderde Hoe wil je eigenlijk checken of iemand online is .
Je hebt het IP, loggedin(boolean), username nodig.
Ik schrijf wel iets voor je.
Offline Scythen - 11/02/2007 20:30
Avatar van Scythen PHP gevorderde Graag, want volgens mij klopt mijn theorie ook niet echt:P
Offline Godlord - 11/02/2007 20:33
Avatar van Godlord PHP gevorderde Moeten bezoekers er ook bij of is het alleen voor gebruikers?
Offline Scythen - 11/02/2007 20:34 (laatste wijziging 11/02/2007 21:00)
Avatar van Scythen PHP gevorderde Gebruikers graag, want bezoekers die bestaan niet.. het gaat om een spel;).


Ondertussen: iemand anders?
Offline Godlord - 11/02/2007 21:06
Avatar van Godlord PHP gevorderde De tabel: http://www.plaatscode.be/4185/
Dit moet je ook gaan gebruiken voor registratie, login, logout.

De code: http://www.plaatscode.be/4186/

Ik ben niet helemaal zeker want ik was erg verward toen ik bij niet online zijn gedeelte zat.
Offline Scythen - 12/02/2007 16:09 (laatste wijziging 12/02/2007 16:58)
Avatar van Scythen PHP gevorderde Wow, ik moest/moet letterlijk door een zee van errors.. weet niet hoe jij hem werkend hebt gekregen, ben nu nog steeds bezig.. lol


edit: iemand enig idee?
edit²: niemand?
edit³: niemand?
Offline dotPixel - 12/02/2007 17:42 (laatste wijziging 12/02/2007 17:43)
Avatar van dotPixel PHP interesse Godlord, snap niet waarom je dan toch een while gebruikt je zegt het zelf je hebt maar één record/veld nodig. Je gebruikt dan juist geen while. Wil je de hoogste ID -> MAX() óf wil je aantal records -> COUNT (en dan mbv mysql_result() waarde ophalen).

Je kunt het op twee manieren doen, of zoals je nu hebt je slaat de tijd van inloggen op en set bij het inloggen, 'online' op 1. Logt iemand uit zet je hem standaard op 0. Maar op elke pagina update je de tijd en je zet diegene op 0 waar het veld tijd meer als 5 min geleden is. Andere oplossing (die ik zelf ook prefereer), maak een extra tabel online aan waar je id (let op: geen member id!), ip, m_id en tijd in op slaat.

  1. <?php
  2. /**
  3.  * Aantal online
  4.  */
  5. $result = mysql_query("SELECT COUNT(1) FROM online") or die (mysql_error());
  6. $total_online = mysql_result($result, 0);
  7. echo ($total_online == 1 ? 'Één persoon online' : 'Er zijn '.$total_online.' personen online';
  8.  
  9. /**
  10.  * Delete online (elke pagina)
  11.  */
  12. $time = time() - 300; // 5 min
  13.  
  14. mysql_unbuffered_query("DELETE FROM online WHERE tijd < ".$time) or die (mysql_error());
  15.  
  16. /**
  17.  * Insert online (inloggen)
  18.  */
  19. mysql_unbuffered_query("INSERT INTO online (id, ip, m_id, tijd) VALUES (NULL, '".$user_ip."', ".$user_id.", NOW() + 0)") or die (mysql_error());
  20.  
  21. /**
  22.  * Update online (elke pagina)
  23.  */
  24. mysql_unbuffered_query("UPDATE online SET tijd = NOW() + 0 WHERE ip='".$user_ip."' AND m_id=".$user_id) or die (mysql_error());


Zorg dat $user_id wel een integer is, anders moet je er even (enkele) quotes om zetten. Fouten voorbehouden, gauw hier getypt.

Waarom NOW() + 0? Zodat het een integer wordt en je niet de string-format van NOW() krijgt. (Er voor zorgen dat hij in een numeric context wordt gebruikt dus)
Offline Scythen - 12/02/2007 17:46 (laatste wijziging 12/02/2007 17:50)
Avatar van Scythen PHP gevorderde En die tabel van 'online' bestaat uit

id, ip, m_id

en wat zijn de waardes? allemaal varchar?

edit, btw: de usernames moeten er nog wel bij.. maar dat kan denk ik later nog wel? Zou wel fijn zijn als je de sql table voor mij zou maken, bvd.
Offline Godlord - 12/02/2007 17:52
Avatar van Godlord PHP gevorderde Ehhh pardon ik heb gezegd tot je maar een tabel nodig hebt en niet 1 veld en ik was erg verward. 
Offline JBke - 13/02/2007 00:33
Avatar van JBke PHP gevorderde Dit zou een opbouw van je tabel kunnen zijn

CREATE TABLE bezonline (
id int(11) NOT NULL auto_increment,
ip varchar(50) NOT NULL default '',
tijd varchar(50) NOT NULL default '',
PRIMARY KEY (id)
)

Waarom ga je hier eens niet kijken.

http://phphulp.nl/php/scripts/7/48/

Gtz.

Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s