Grafiek met unieke bezoekers
Dit script registreert per bezoeker die je site bezoekt het ip-adres en de datum waarop men de site bezoekt. Per dag wordt maar één keer je ip-adres geteld. De gegevens worden in een grafiek geplaatst per maand. Enkel de voorbije 12 maanden worden weergegeven in de grafiek. De mysql-code: CREATE TABLE `bezoek` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` varchar(50) NOT NULL, `datum` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; Er zijn 3 bestanden: - connect.php: hierin moet je uiteraard je database gegevens zetten - afb.php: dit is de grafiek - bezoek.php: dit kan je op elke pagina includen waar je bezoekers wilt tellen. Dit is denk ik alles dat je moet weten over het script. Het is m'n eerste script met de GD library dus er zullen waarschijnlijk nog wel fouten inzitten :). Het script is NIET OOP ;).
<?
/********** MySQL **********
CREATE TABLE `bezoek` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(50) NOT NULL,
`datum` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
********** MySQL ***********/
/********* connect.php ******
*********** Grafiek *********
********** connect.php ******/
$host = ""; // hostname
$db = ""; // database
$user=""; // username
$pass=""; // wachtwoord
$connectie = @mysql_connect ($host, $user, $pass) or die('ERROR: Kan geen verbinding maken met de database'); // onderdrukken van fouten zodat bij eventuele fouten bezoeker geen belangrijke informatie krijgt
@mysql_select_db ($db, $connectie) or die('ERROR: Kan de database niet vinden');
/********** tel.php **********
******** Tel Bezoekers *******
********** tel.php ***********/
include_once("connect.php");
$ip = $_SERVER['REMOTE_ADDR']; // ip-adres
$nu = date("j n Y"); // huidige datum
$results = "SELECT ip FROM bezoek WHERE ip = '$ip' AND date_format(datum, '%e %c %Y') = '$nu'";
$check = mysql_query($results) or die ('Er is een fout opgetreden bij het uitvoeren van de query.');
if(mysql_num_rows($check)==0) // als het je eerste keer is dat je vandaag op deze pagina komt wordt de teller verhoogt
{
$sql = "INSERT INTO bezoek VALUES ('', '$ip', now())";
$query = mysql_query($sql) or die ('Er is een fout opgetreden bij het uitvoeren van de query.');
}
/********** afb.php **********
*********** Grafiek **********
********** afb.php ***********/
// connectie
include_once("connect.php");
// afbeelding maken
header("content-type: image/png"); // soort afbeelding
$image = imagecreate(426, 300); // grootte van de afbeelding (360*200)
// kleuren instellen (RGB waarden)
$achtergrond = imagecolorallocate($image, 234, 234, 234); // achtergrondkleur
$verticale = imagecolorallocate($image, 224, 224, 224); // horizontale en verticale rechten
$zwart = imagecolorallocate($image, 0, 0, 0); // tekst
$grey = imagecolorallocate($image, 180, 180, 180); // balkjes
// verticale strepen trekken
$a=63; // startpunt linker-verticale
for($i=0;$i<12;$i++)
{
imageline($image, $a, 0, $a, 300, $verticale);
$a +=33; // afstand tot linkerkant telkens verhogen
}
// horizontale strepen trekken
$b=0; // startpunt bovenste horizontale
for($i=0;$i<10;$i++)
{
imageline($image,30,$b,426,$b,$verticale);
$b +=30; // afstand tot bovenkant telkens verhogen
}
// gegevens uit database halen per maand en in array steken
$next = date("n")+1; // volgende maand
$vorig_jaar = date("Y")-1; // vorig jaar
$dit_jaar = date("Y"); // dit jaar
for($i=$next;$i<13;$i++)
{ // maanden van vorig jaar
$sql = "SELECT id FROM bezoek WHERE date_format(datum, '%c') = '$i' AND date_format(datum, '%Y') = '$vorig_jaar'";
$query = mysql_query($sql) or die(mysql_error());
$aant_bez = mysql_num_rows($query);
$maand_bez[] = $aant_bez; // aantallen in array steken
}
if($i==13)
{ // maanden dit jaar
for($i=1;$i<$next;$i++)
{
$sql = "SELECT id FROM bezoek WHERE date_format(datum, '%c') = '$i' AND date_format(datum, '%Y') = '$dit_jaar'";
$query = mysql_query($sql) or die(mysql_error());
$aant_bez = mysql_num_rows($query);
$maand_bez[] = $aant_bez; // aantallen in array steken
}
}
// balken weergeven
$maximum=max($maand_bez); // getal selecteren van de maand met meeste bezoekers
$var_opt=34; // startpunt balk tot linker verticale streep
$var_opt2=59; // startpunt balk tot rechter verticale streep
for($i=0;$i<12;$i++)
{
$hoogte=$maand_bez[$i]/$maximum*300; // hoogte van je balkje bepalen
$hoogte=round($hoogte,0);
$tot=300-$hoogte;
imagefilledrectangle($image,$var_opt,$tot,$var_opt2,300,$grey); // balkje tekenen
$var_opt+=33; // telkens 33 px opschuiven nr rechts
$var_opt2+=33; // telkens 33 px opschuiven nr rechts
}
// namen van de maanden weergeven
$maanden_ned=array("Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December");
$maand_eng=date("n");
$a=38; // afstand tot linker verticale streep
for($i=$maand_eng;$i<12;$i++)
{
$maand_ned=$maanden_ned[$i];
$maand_ned=substr($maand_ned,0,3);
imagestring($image, 2, $a, 283, $maand_ned, $zwart);
$a +=33;
}
if($i==12)
{
for($i=0;$i<$maand_eng;$i++)
{
$maand_ned=$maanden_ned[$i];
$maand_ned=substr($maand_ned,0,3);
imagestring($image, 2, $a, 283, $maand_ned, $zwart);
$a +=33;
}
}
// aantallen links plaatsen
$b=1;
for($i=10;$i>-1;$i--)
{ // 10 getallen weergeven, van boven naar beneden
$getal=$maximum/10*$i; // getal berekenen
imagestring($image, 1, 3, $b, $getal, $zwart);
$b +=30;
}
// kader trekken rondom afbeelding
imagerectangle($image,30,0,425,299,$zwart);
imagepng($image);
imagedestroy($image);
?>
Reacties
0