log script
hallo mensen. ik heb een klein scriptje om te loggen en om een bezoekersteller bij te houden.
Is dit de goede manier of zouden jullie het anders doen?
Is dit de goede manier of zouden jullie het anders doen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$selectPrev = 'SELECT id FROM logtabel WHERE ip = "'.$ip.'" AND datum > DATE_SUB(NOW(), INTERVAL 30 MINUTE)';
$resultPrev = mysql_query($selectPrev);
$countPrev = mysql_num_rows($resultPrev);
//als er het laatste halfUur geen records zijn ingevoerd
if($countPrev == 0)
{
$insertLog = 'INSERT INTO logtabel (id, datum, ip) VALUES (NULL, NOW(), "'.$ip.'")';
$queryLog = mysql_query($insertLog);
if($queryLog)
{
//echo 'gelukt';
}
else
{
//echo 'probleem';
}
}
else
{
//doe niks
}
$selectAll = 'SELECT COUNT(id) as TOTAAL FROM logtabel';
$resultAll = mysql_query($selectAll);
$row = mysql_fetch_assoc($resultAll);
$countAll = $row['TOTAAL'];
if($countAll > 0)
{
echo '<div class="bezoekers_teller">'.$countAll.'</div>';
}
?>
$ip = $_SERVER['REMOTE_ADDR'];
$selectPrev = 'SELECT id FROM logtabel WHERE ip = "'.$ip.'" AND datum > DATE_SUB(NOW(), INTERVAL 30 MINUTE)';
$resultPrev = mysql_query($selectPrev);
$countPrev = mysql_num_rows($resultPrev);
//als er het laatste halfUur geen records zijn ingevoerd
if($countPrev == 0)
{
$insertLog = 'INSERT INTO logtabel (id, datum, ip) VALUES (NULL, NOW(), "'.$ip.'")';
$queryLog = mysql_query($insertLog);
if($queryLog)
{
//echo 'gelukt';
}
else
{
//echo 'probleem';
}
}
else
{
//doe niks
}
$selectAll = 'SELECT COUNT(id) as TOTAAL FROM logtabel';
$resultAll = mysql_query($selectAll);
$row = mysql_fetch_assoc($resultAll);
$countAll = $row['TOTAAL'];
if($countAll > 0)
{
echo '<div class="bezoekers_teller">'.$countAll.'</div>';
}
?>
Gewijzigd op 20/12/2010 11:14:10 door Tim Fendt
Met deze methode haal je (na de 2e else) alle records in de logtabel op. Op termijn wordt dit vrij zwaar en kan bij fikse bezoekersaantallen een performance probleem opleveren. Iets efficienter is 'SELECT count(*) FROM logtabel' omdat dan niet alle data wordt opgehaald en overgehaald van MySQL naar PHP. Opmerking: Je kan met 'SELECT count(*) FROM logtabel' niet met countAll werken omdat dat altijd 1 oplevert. Je moet dus dat ene record uitlezen.
niet helemaal, de count wordt al door MySQL gedaan:
Code (php)
1
2
3
4
2
3
4
$selectAll = 'SELECT COUNT(id)as TOTAAl FROM bd_log';
$resultAll = mysql_query($selectAll);
$row = mysql_fetch_assoc($resultAll);
$countAll = $row['TOTAAL'];
$resultAll = mysql_query($selectAll);
$row = mysql_fetch_assoc($resultAll);
$countAll = $row['TOTAAL'];
Gewijzigd op 20/12/2010 10:10:51 door John D
Heb het aangepast zo is het dan goed of heeft er iemand nog op of aanmerkingen
- Een leeg else blok kun je gewoon weglaten, het is nutteloos om die in je script te zetten.
- Gebruik mysql_real_escape_string() om de variabele $ip tegen SQL injectie te beveiligen.
- Bouw degelijke foutafhandeling in als je query blijkt te mislukken:
Zoiets bijvoorbeeld.
Verder is het niet logisch om de datum op te slaan aangezien je het ip maar eenmalig opslaat. Je zou er bijvoorbeeld ook voor kunnen kiezen om het ip bij elk bezoek te loggen om zo een uitgebreider overzicht te kunnen genereren. Het unieke bezoekersaantal kun je dan eenvoudig achterhalen door DISTINCT in je query te gebruiken.
- Gebruik mysql_real_escape_string() om de variabele $ip tegen SQL injectie te beveiligen.
- Bouw degelijke foutafhandeling in als je query blijkt te mislukken:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$result = mysql_query($query);
if($result === false) {
trigger_error(mysql_error().'<br />In query: '.$query);
}
?>
$result = mysql_query($query);
if($result === false) {
trigger_error(mysql_error().'<br />In query: '.$query);
}
?>
Zoiets bijvoorbeeld.
Verder is het niet logisch om de datum op te slaan aangezien je het ip maar eenmalig opslaat. Je zou er bijvoorbeeld ook voor kunnen kiezen om het ip bij elk bezoek te loggen om zo een uitgebreider overzicht te kunnen genereren. Het unieke bezoekersaantal kun je dan eenvoudig achterhalen door DISTINCT in je query te gebruiken.




