log script
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.
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
- 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.