anton - 10/01/2009 17:26 (laatste wijziging 10/01/2009 17:27)
Lid
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:
if($_COOKIE['ingelogd'] == FALSE){
setcookie('logname', 'burger');
}
$sql1 = "SELECT naam,tijd FROM online WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$r1 = mysql_query($sql1);
$n1 = mysql_num_rows($r1);
if($n1 == 0){
$sql2 = "INSERT INTO online (naam,plaats,ip,tijd,url)VALUES('".$_COOKIE['logname']."','".$plaats."','".$_SERVER['REMOTE_ADDR']."','".time()."','".$url."')";
$r2 = mysql_query($sql2);
}
else{
mysql_query("UPDATE online SET tijd = '".time()."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
mysql_query("UPDATE online SET plaats = '".$plaats."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
mysql_query("UPDATE online SET url = '".$url."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
mysql_query("UPDATE online SET naam = '".$_COOKIE['logname']."' WHERE ip = '".$_SERVER['REMOTE_ADDR']."'") or die(mysql_error());
mysql_query("DELETE FROM online WHERE tijd < '".time()." -3*60'");
}
$sql = "SELECT * FROM berichten WHERE aan='".$_COOKIE['logname']."' AND verwijderd='no'";
$res = mysql_query($sql);
$num = mysql_num_rows($res);
$s = "SELECT * FROM online";
$q = mysql_query($s);
$n = mysql_num_rows($q);
$s2 = "SELECT * FROM online WHERE naam = 'burger'";
$q2 = mysql_query($s2);
$n2 = mysql_num_rows($q2);
$n3 = $n - $n2;
?>
$sql2="INSERT INTO online (naam,plaats,ip,tijd,url)VALUES('".$_COOKIE['logname']."','".$plaats."','".$_SERVER['REMOTE_ADDR']."','".time()."','".$url."')";
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..??
$sql2 = "INSERT INTO online (naam,plaats,ip,tijd,url)VALUES('".mysql_real_escape_string($_COOKIE['logname'])."','".$plaats."','".$_SERVER['REMOTE_ADDR']."',NOW(),'".$url."')";
$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:
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());
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:
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!