login  Naam:   Wachtwoord: 
Registreer je!
 Forum

bezoekerteller (Opgelost)

Offline anton - 10/01/2009 17:26 (laatste wijziging 10/01/2009 17:27)
Avatar van antonLid Haloo,
ik ben dus bezig aan een RPGF
en ik heb dus een klein scriptje in men header om gebruikers(bezoekers , leden) te tellen en weer te geven...maar er is een probleem met mijn tijd...ik heb het volgende:
  1. if($_COOKIE['ingelogd'] == FALSE){
  2. setcookie('logname', 'burger');
  3. }
  4. $sql1 = "SELECT naam,tijd FROM online WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
  5. $r1 = mysql_query($sql1);
  6. $n1 = mysql_num_rows($r1);
  7. if($n1 == 0){
  8. $sql2 = "INSERT INTO online (naam,plaats,ip,tijd,url)VALUES('".$_COOKIE['logname']."','".$plaats."','".$_SERVER['REMOTE_ADDR']."','".time()."','".$url."')";
  9. $r2 = mysql_query($sql2);
  10. }
  11. else{
  12. mysql_query("UPDATE online SET tijd = '".time()."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
  13. mysql_query("UPDATE online SET plaats = '".$plaats."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
  14. mysql_query("UPDATE online SET url = '".$url."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
  15. mysql_query("UPDATE online SET naam = '".$_COOKIE['logname']."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
  16. mysql_query("DELETE FROM online WHERE tijd < '".time()." -3*60'");
  17. }
  18. $sql = "SELECT * FROM berichten WHERE aan='".$_COOKIE['logname']."' AND verwijderd='no'";
  19. $res = mysql_query($sql);
  20. $num = mysql_num_rows($res);
  21. $s = "SELECT * FROM online";
  22. $q = mysql_query($s);
  23. $n = mysql_num_rows($q);
  24. $s2 = "SELECT * FROM online WHERE naam = 'burger'";
  25. $q2 = mysql_query($s2);
  26. $n2 = mysql_num_rows($q2);
  27. $n3 = $n - $n2;
  28. ?>

dus , als de bezoeker al 3 minuten inactief is zou ie verwijderd moeten worden...maar als je voor de eerste keer op de site komt zet ie in de db als tijd 00:00:00 en als je dan op een link klikt of refresht zet ie in de db 838:59:59 en aangezien er maar 24 uuren zijn is dat dus altijd minder dan de tijd min 3 minuten...kan er iemand zeggen wat er fout is en waarom..??

ThX alvast

3 antwoorden

Gesponsorde links
Offline Wim - 10/01/2009 17:39 (laatste wijziging 10/01/2009 17:39)
Avatar van Wim Crew algemeen Is je "tijd" een DATETIME veld in je MySQL table? Zonee, verander dit!

Verder kan je de MySQL functie NOW() gebruiken, deze geeft de huidige datum weer. Maw, lijn 8 wordt dit:
  1. $sql2 = "INSERT INTO online (naam,plaats,ip,tijd,url)VALUES('".mysql_real_escape_string($_COOKIE['logname'])."','".$plaats."','".$_SERVER['REMOTE_ADDR']."',NOW(),'".$url."')";


Zoals je ziet heb ik ook mysql_real_escape_string toegevoegd. Een koekje kan evt aangepast worden en er kunnen dus sql injecties mee uitgevoerd worden als je dit niet voldoende controleerd!

Een volgende opmerking heeft betrekking op lijn 12-15. Je kan namelijk meerdere velden updaten in 1 query. dit zal een verbeterde performantie met zich meebrengen! Deze 4 queryies kan je samenvoegen tot deze query:
  1. mysql_query("UPDATE online SET tijd=NOW(),plaats = '".$plaats."',url = '".$url."',naam = '".mysql_real_escape_string($_COOKIE['logname'])."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());


controleren op 3 minuten kan je met "INTERVAL" doen:
  1. WHERE tijd < (NOW() - INTERVAL 3 MINUTE)
Offline JPW120 - 10/01/2009 17:40
Avatar van JPW120 HTML interesse Als je de huidige tijd in de database zet kun je zo de tijd uit de database vergelijken met de echte tijd.
Offline anton - 10/01/2009 18:33
Avatar van anton Lid Egt bedankt wimmarien! het werkt nu eindelijk , ik zat er al een tijdje aan , vooral dan aan het waarom dat ie als tijd 838:59:59 zette... nu werkt het en kan ik met een gerust hart verderwerken aan de rest van de paginas!bedankt!

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