log script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim Fendt

Tim Fendt

20/12/2010 09:26:13
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
    }

?>
Gewijzigd op 20/12/2010 11:14:10 door Tim Fendt
 
PHP hulp

PHP hulp

21/11/2024 18:14:37
 
John D

John D

20/12/2010 09:41:44
Quote Anchor link
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.
 
Tim Fendt

Tim Fendt

20/12/2010 09:49:11
Quote Anchor link
Bedoel je zo?

zie bovenaan
Gewijzigd op 20/12/2010 09:49:19 door Tim Fendt
 
John D

John D

20/12/2010 09:57:04
Quote Anchor link
niet helemaal, de count wordt al door MySQL gedaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$selectAll = 'SELECT COUNT(id)as TOTAAl FROM bd_log';
    $resultAll = mysql_query($selectAll);
    $row = mysql_fetch_assoc($resultAll);
    $countAll = $row['TOTAAL'];
Gewijzigd op 20/12/2010 10:10:51 door John D
 
Tim Fendt

Tim Fendt

20/12/2010 10:14:28
Quote Anchor link
Heb het aangepast zo is het dan goed of heeft er iemand nog op of aanmerkingen
 
Joren de Wit

Joren de Wit

20/12/2010 10:43:09
Quote Anchor link
- 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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.