Unique ip-adres
Van iemand kreeg ik de tip om ip-adres in de database op "unique" te zetten zodat dat ip-adres er maar 1keer ingezet wordt.
Maar gebeurt dit dan altijd of geld dit per dag?
Ik wil de bezoekers op de website per dag weergeven.
En de volgende dag moet dat ip-adres dan gewoon weer geteld worden.
Code (php)
1
2
3
4
5
2
3
4
5
//Laat zien hoeveel bezoekers er zijn geweest vandaag:
$dagbezoekers = "SELECT COUNT(datumtijd) AS dagbezoekers FROM logboek
WHERE MONTH(datumtijd) = MONTH(CURDATE()) AND YEAR(datumtijd) = YEAR(CURDATE()) AND DAY(datumtijd) = DAY(CURDATE()) ";
$resultaatDagbezoekers = mysql_query($dagbezoekers) or die ("Sorry maar kan het aantal dagbezoekers niet weergeven.");
$laatZienDagbezoekers = mysql_fetch_assoc($resultaatDagbezoekers);
$dagbezoekers = "SELECT COUNT(datumtijd) AS dagbezoekers FROM logboek
WHERE MONTH(datumtijd) = MONTH(CURDATE()) AND YEAR(datumtijd) = YEAR(CURDATE()) AND DAY(datumtijd) = DAY(CURDATE()) ";
$resultaatDagbezoekers = mysql_query($dagbezoekers) or die ("Sorry maar kan het aantal dagbezoekers niet weergeven.");
$laatZienDagbezoekers = mysql_fetch_assoc($resultaatDagbezoekers);
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
36
37
38
39
40
41
42
43
44
45
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
36
37
38
39
40
41
42
43
44
45
<?php
if($_SERVER['REMOTE_ADDR'] == "62.166.94.248") {
}else{
// Gegevens voor een nieuw logboekitem verzamelen:
$datumtijd = date("Y-m-d H:i:s"); // Huidige datum
if (isset($_SERVER['REQUEST_METHOD'])) { // HTTP-methode
$methode = $_SERVER['REQUEST_METHOD'];
} else {
$methode = NULL;
}
if (isset($_SERVER['PHP_SELF'])) { // Huidige pagina
$pagina = $_SERVER['PHP_SELF'];
} else {
$pagina = NULL;
}
if (isset($_SERVER['HTTP_REFERER'])) { // Vorige pagina
$referer = $_SERVER['HTTP_REFERER'];
} else {
$referer = NULL;
}
if (isset($_SERVER['REMOTE_ADDR'])) { // Extern IP-adres
$ip_adres = $_SERVER['REMOTE_ADDR'];
} else {
$ip_adres = NULL;
}
if (isset($_SERVER['HTTP_USER_AGENT'])) { // Gebruikte browser
$browser = $_SERVER['HTTP_USER_AGENT'];
} else {
$browser = NULL;
}
// MySQL-toevoegquery opstellen:
$sql = "INSERT INTO `logboek` ";
$sql .= "(`logboek_id`, `datumtijd`, `methode`, `pagina`, `referer`, `adres`, `browser`) ";
$sql .= "VALUES ";
$sql .= "('', '$datumtijd', '$methode', '$pagina', '$referer', '$ip_adres', '$browser') ";
$sql .= "; ";
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
mysql_query($sql) or die(mysql_error());
}
?>
if($_SERVER['REMOTE_ADDR'] == "62.166.94.248") {
}else{
// Gegevens voor een nieuw logboekitem verzamelen:
$datumtijd = date("Y-m-d H:i:s"); // Huidige datum
if (isset($_SERVER['REQUEST_METHOD'])) { // HTTP-methode
$methode = $_SERVER['REQUEST_METHOD'];
} else {
$methode = NULL;
}
if (isset($_SERVER['PHP_SELF'])) { // Huidige pagina
$pagina = $_SERVER['PHP_SELF'];
} else {
$pagina = NULL;
}
if (isset($_SERVER['HTTP_REFERER'])) { // Vorige pagina
$referer = $_SERVER['HTTP_REFERER'];
} else {
$referer = NULL;
}
if (isset($_SERVER['REMOTE_ADDR'])) { // Extern IP-adres
$ip_adres = $_SERVER['REMOTE_ADDR'];
} else {
$ip_adres = NULL;
}
if (isset($_SERVER['HTTP_USER_AGENT'])) { // Gebruikte browser
$browser = $_SERVER['HTTP_USER_AGENT'];
} else {
$browser = NULL;
}
// MySQL-toevoegquery opstellen:
$sql = "INSERT INTO `logboek` ";
$sql .= "(`logboek_id`, `datumtijd`, `methode`, `pagina`, `referer`, `adres`, `browser`) ";
$sql .= "VALUES ";
$sql .= "('', '$datumtijd', '$methode', '$pagina', '$referer', '$ip_adres', '$browser') ";
$sql .= "; ";
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
mysql_query($sql) or die(mysql_error());
}
?>
Elsy schreef op 04.03.2007 20:13:
Ik hou de statistieken bij van bezoekers op mijn website.
Van iemand kreeg ik de tip om ip-adres in de database op "unique" te zetten zodat dat ip-adres er maar 1keer ingezet wordt.
Maar gebeurt dit dan altijd of geld dit per dag?
Van iemand kreeg ik de tip om ip-adres in de database op "unique" te zetten zodat dat ip-adres er maar 1keer ingezet wordt.
Maar gebeurt dit dan altijd of geld dit per dag?
Zodra je een veld UNIQUE maakt, moet de waarde die er in komt te staan inderdaad uniek zijn. In jouw geval houdt dat in dat een bepaald IP adres maar één keer in je DB terecht kan komen, en dat is (neem ik aan) niet wat je wilt.
Eerst had ik al GROUP BY adres gedaan maar dat was volgens mij ook niet echt goed want hij gaf toen gewoon alle bezoekers aan in de database ook al was het hetzelfde ip-adres.
SELECT COUNT(datumtijd) AS totaal, DATE_FORMAT(datumtijd, '%a, %Y-%m-%d') AS dag
FROM stats
GROUP BY DATE_FORMAT(datumtijd, '%Y-%m-%d')
ORDER BY datumtijd DESC
LIMIT 14
Die laat het aantal bezoekers per dag van de afgelopen 14 dagen zien. Namen weer aanpassen aan je eigen situatie.
Ik heb die laatste zin een paar keer doorgelezen maar ik begrijp hem niet helemaal. (en ik ben niet blond )
Is dit een gemiddelde van 14 dagen?
Of telt hij 14 dagen bij elkaar op en moet ik 14 in 1 wijzigen als ik de bezoekers van 1 dag wil laten zien.
Jan groepeerd het op dag, en geeft inderdaad de laatste 14 dagen. Waarbij het 1e resultaat van vandaag is. Die LIMIT kan je gewoon aanpassen naar het aantal dagen (inderdaad naar 1, dus je zocht het goed) wat je wil laten zien.
Je moet alleen wel even controleren of een bezoeker niet eerder op de dag op de site is geweest, of de verschillende IP's tellen die per dag op je site zijn geweest.
Maak een alias totaal aan die het aantal records telt. De veldnaam tussen de haakjes bij COUNT doet er niet echt toe, want hij telt het aantal records, en niet de waarden in de records.
Maak een alias dag aan met een geformatteerde datum er in.
Die lijkt me duidelijk ;-)
Groepeer de totalen van COUNT per yyyy-mm-dd, dus per dag.
Sorteer de resultaten per datum, aflopend, zodat je met de nieuwste datum begint.
Geef alleen de laatste 14 dagen.
@Robert
Dit was ook eigenlijk mijn bedoeling van dit topic. Maar ik weet niet hoe dit te controleren.
Morgen verder......slaap ze.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT COUNT(DISTINCT(ip)) AS aantal_uniek,
DATE_FORMAT(datumtijd, '%a, %Y-%m-%d') AS dag
FROM tabel
GROUP BY DATE_FORMAT(datumtijd, '%Y-%m-%d')
ORDER BY datumtijd DESC
LIMIT 1
DATE_FORMAT(datumtijd, '%a, %Y-%m-%d') AS dag
FROM tabel
GROUP BY DATE_FORMAT(datumtijd, '%Y-%m-%d')
ORDER BY datumtijd DESC
LIMIT 1
Zo maakt het niet uit hoe vaak 1 ip-adres in je database staat op een bepaalde dag, hij wordt maar 1 keer geteld ;)
Oh, en slaapze :)
Bedankt voor de hulp, het is nu gelukt :)
Mooi mooi mooi mooi :-)
Ik sluit me bij Jan aan:)