Hallo,

Op ik heb een weblog met een statistieken systeem.
Deze statistieken geven aan hoevaak index.php, log.php enz. zijn bezocht.

Ik ben echter op zoek naar een statistiekenscript dat aangeeft hoevaak een log is bezocht.

Bijvoorbeeld:
www.weblog.com/log.php?id=115
Zo werkt het op mijn site ook.
Ik ben dus op zoek naar een statistieken script, liefst zo simpel mogelijk, waarin ik kan zien hoevaak www.weblog.com/log.php?id=115 is bezocht (en uiteraard ook id=116, id=117 enz.).

Ik ben een echte leek en heb nog weinig verstand van php dus als je een oplossing hebt hou het aub simpel zodat ik het snap

Thanx
Op de pagina log.php selecteer je op een gegeven moment neem ik aan gegeven uit een database. Dit doe je aan de hand van de GET variabele 'id' die in de url staat.

Wat je zou kunnen doen is op het punt waar je de gegevens uit de database selecteert, ook een nieuw record in bijvoorbeeld een tabel statistieken aanmaken. Je tabel statistieken ziet er dan ongeveer als volgt uit:

statistieken
--------------
id
log_id
datum

In elk nieuw record plaats je dus het id, dat in de GET variabele 'id' staat, en de huidige datum. Later kun je dan op een andere pagina de gegevens weer uit deze tabel halen.
mmm, oké.
Dit is mijn log.php, wat zou ik dan moeten veranderen?

----------------------------------------------------------------
<?
require_once('global.inc.php');
setstats("Log");
$template = new template();
$template->menu;

$id = trim($_GET['id']);
$sql = mysql_query("SELECT * FROM weblog WHERE id='".$id."'");
$num = mysql_num_rows($sql);

if(isset($_GET['id']) && $num != 0){

if(!isset($_POST['submit'])){

while($row = mysql_fetch_assoc($sql)){


$content['1'] = "<small> </small>

" . ubb($row['bericht']) . "<br>
<br>

" . $row['datum'] . " | " . $row['categorie'] . " | " . $row['schrijver'] . " ";


$template->content($content['1'],stripslashes($row['titel']));

}

if(isset($_GET['reageren'])){

$template->content(reactie_weblog("?id=".$id));

}else{

$sql = mysql_query("SELECT * FROM reacties WHERE wid='".$id."'");
$num = mysql_num_rows($sql);

if($num == 0){

$template->content(ubb("Er zijn nog geen reacties op deze log!"));

}else{

$content['1'] = "";
$i = 0;

while($row = mysql_fetch_assoc($sql)){

$i++;
$content['1'] .= "<center><table width=394 style='border: 1px solid #B9B7B7;'><tr><td width=10>&nbsp;</td><td width=384>" . ubb($row['bericht']) . "</td></tr><tr><td bgcolor=\"#E3E3E3\" colspan=2>by: <b>" . $row['auteur'] . ":</b> " . $row['datum'] . "</td></tr></table></center><br>";


if($num != $i){

$content['1'] .= "";

}

}

$template->content($content['1'],'Reacties');

}

$template->content(reactie_weblog("?id=".$id),'Reageren');

}



}else{

$naam = trim($_POST['naam']);
$mail = trim($_POST['mail']);
$bericht = trim($_POST['bericht']);
$wid = trim($_GET['id']);

if(strlen($naam) > 3 && strlen($mail) > 7 && strlen($bericht) > 5){

$ip = $_SERVER['REMOTE_ADDR'];
$day = array("zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag");
$month = array("niet", "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");

$w = date("w");
$j = date("j");
$n = date("n");
$Y = date("Y");
$tijd = date("H") . date(":i");

$datum = $day[$w] . ", " . $j . " " . $month[$n] . " " . $Y . " om " . $tijd;

$sql = mysql_query("INSERT INTO reacties (auteur,ip,datum,bericht,mail,wid) VALUES ('".$naam."','".$ip."','".$datum."','".$bericht."','".$mail."','".$wid."')") or die(mysql_error());

header("Location: log.php?id=".$wid);

}else{

$fouten = "";
if(strlen($naam) < 3)
{
$fouten .= "- Je ingevulde naam is te kort! (moet langer dan 3 tekens)<br>";
}
if(strlen($mail) < 7)
{
$fouten .= "- Het ingevulde mailadres is te kort! (moet langer dan 7 tekens zijn)<br>";
}
if(strlen($bericht) < 5)
{
$fouten .= "- Het ingevulde bericht is te kort! (moet langer dan 5 tekens)<br>";
}

$template->content("De volgende fouten zijn opgetreden:<br>".$fouten."<br>Klik <a href=\"javascript: history.go(-1)\">hier</a> om terug te keren.",'Fout!');

}

}

}else{

header("Location: index.php");

}

$template->output();
?>
----------------------------------------------------------------
Ik neem aan dat je op dit moment de statistieken update met de functie setstats()? Je zou kunnen kijken of je deze functie verder kunt uitbreiden zodat ook de views per log opgeslagen worden.

Als alternatief zou je zelf zo'n soort functie kunnen schrijven waarbij elk view per log in de database opgeslagen wordt.

Maar kun je misschien even laten zien hoe de functie setstats() eruit ziet, dan is dat punt ook weer wat duidelijker.
je sou ook alemaal txt bestandjes per id kunnen aanmaken en dan bijv. "ID"counter.txt +1 telkens doen...
Please, ga niet met txt bestandjes werken als je ook een database tot je beschikking hebt. Zodra jij je verlaagt tot het niveau van de txt bestanden ontzeg je jezelf alle toegang tot de krachtige functies die een database in zich heeft.
Class.statistieken.inc.php ziet er bij mij zo uit:

<?php

function setstats($page)
{
$datum = mktime(0,0,0,date("n"),date("j"),date("Y"));
$maand = date("n");
$jaar = date("Y");
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];


$een = mysql_num_rows(mysql_query("SELECT * FROM stats WHERE type='1'"));
if($een == 0){ @mysql_query("INSERT INTO stats (type,value1,value2,datum) VALUES ('1','0','0','".$datum."')"); }

@mysql_query("DELETE FROM stats WHERE type='4' AND datum !='".$datum."'");

// Totaal
$sql = @mysql_query("SELECT count(1) FROM stats WHERE type='4' AND ip='".$ip."'");
$bezoek = @mysql_result($sql, 0);
if($bezoek == 0)
{
@mysql_query("UPDATE stats SET value1=value1+1, value2=value2+1 WHERE type='1'");
@mysql_query("INSERT INTO stats (type,datum,ip) VALUES ('4','".$datum."','".$ip."')");
}
else
{
@mysql_query("UPDATE stats SET value2=value2+1 WHERE type='1'");
}

// Dagelijks
$sql = @mysql_query("SELECT count(1) FROM stats WHERE type='2' AND datum='".$datum."'");
if(@mysql_result($sql, 0) == 0)
{
@mysql_query("INSERT INTO stats (type,value1,value2,datum,maand,jaar) VALUES ('2','1','1','".$datum."','".$maand."','".$jaar."')");
}
else
{
if($bezoek == 0)
{
@mysql_query("UPDATE stats SET value1=value1+1, value2=value2+1 WHERE type='2' AND datum='".$datum."'");
}
else
{
@mysql_query("UPDATE stats SET value2=value2+1 WHERE type='2' AND datum='".$datum."'");
}
}

// Pagina's
if(!empty($page))
{
$sql = @mysql_query("SELECT count(1) FROM stats WHERE type='3' AND extra='".$page."'");
if(@mysql_result($sql, 0) == 0)
{
@mysql_query("INSERT INTO stats (type,extra,value1) VALUES ('3','".$page."','1')");
}
else
{
@mysql_query("UPDATE stats SET value1=value1+1 WHERE type='3' AND extra='".$page."'");
}
}

// unset variabelen
unset($datum);
unset($maand);
unset($jaar);
unset($ip);
unset($sql);
unset($bezoek);
}

$land_img = array('images/lnd_nld.gif','images/lnd_bel.gif','images/lnd_unk.gif');

function getstats()
{
$terug = array();
$datum = mktime(0,0,0,date("n"),date("j"),date("Y"));
$maand = date("n");
$jaar = date("Y");

$vandaag = mysql_fetch_assoc(mysql_query("SELECT * FROM stats WHERE type='2' AND datum='".$datum."'"));
array_push($terug, 'Vandaag');
array_push($terug, '<table border="0" width="100%"><tr><td>Uniek:</td><td width="100">'.$vandaag['value1'].'</td></tr><tr><td>Hits:</td><td width="100">'.$vandaag['value2'].'</td></tr></table>');

$totaal = mysql_fetch_assoc(mysql_query("SELECT * FROM stats WHERE type='1'"));
array_push($terug, 'Totaal <small>| Sinds: '.date('d-m-Y', $totaal['datum']));
array_push($terug, '<table border="0" width="100%"><tr><td>Uniek:</td><td width="100">'.$totaal['value1'].'</td></tr><tr><td>Hits:</td><td width="100">'.$totaal['value2'].'</td></tr></table>');

$highest_uniek = mysql_fetch_assoc(mysql_query("SELECT * FROM stats WHERE type='2' ORDER BY value1 DESC LIMIT 0,1"));
$highest_hits = mysql_fetch_assoc(mysql_query("SELECT * FROM stats WHERE type='2' ORDER BY value2 DESC LIMIT 0,1"));
array_push($terug, 'Records');
array_push($terug, '<table border="0" width="100%"><tr><td>Uniek:</td><td width="100">'.date("d-m-Y", $highest_uniek['datum']).'</td><td width="100">'.$highest_uniek['value1'].'</td></tr><tr><td>Hits:</td><td width="100">'.date("d-m-Y", $highest_hits['datum']).'</td><td width="100">'.$highest_hits['value2'].'</td></tr></table>');

//Dagen
$dag = '<table border="0" width="100%">';

$dag_naam = array('Zondag','Maandag','Dinsdag','Woensdag','Donderdag','Vrijdag','Zaterdag');

for($i=0; $i <= 6; $i++)
{
$datum2 = mktime(0,0,0,$maand,date("d")-$i,$jaar);
$sql = @mysql_query("SELECT value1, value2 FROM stats WHERE type='2' AND datum='".$datum2."'");
if(@mysql_num_rows($sql)==0)
{
$stats['bezoekers'] = 0;
$stats['hits'] = 0;
}
else
{
$list = @mysql_fetch_array($sql);
$stats['bezoekers'] = $list['value1'];
$stats['hits'] = $list['value2'];
}
if($stats['bezoekers'] != 0)
{
$dag .= '<tr><td>'.$dag_naam[date("w",$datum2)].'</td>
<td width="100">Uniek:</td>
<td width="100">'.$stats['bezoekers'].'</td>
</tr>
<tr>
<td style="border-bottom: 1px solid #dedede;">&nbsp;</td>
<td width="100" style="border-bottom: 1px solid #dedede;">Hits:</td>
<td width="100" style="border-bottom: 1px solid #dedede;">'.$stats['hits'].'</td>
</tr>';
}
}
$dag .= '</table>';
array_push($terug, 'Afgelopen week');
array_push($terug, $dag);

for($i=0; $i <= 5; $i++)
{
if($maand-$i < 1)
{
$maand2 = 12-($i-$maand);
$jaar2 = $jaar-1;
}
else
{
$maand2 = $maand-$i;
$jaar2 = $jaar;
}
$sql = @mysql_query("SELECT SUM(value1) AS value1, SUM(value2) AS value2 FROM stats WHERE type='2' AND jaar='".$jaar2."' AND maand='".$maand2."' GROUP BY maand");
if(@mysql_num_rows($sql) == 0)
{
$maand_bezoekers[$maand2] = 0;
$maand_hits[$maand2] = 0;
}
else
{
$row = @mysql_fetch_array($sql);
$maand_bezoekers[$maand2] = $row['value1'];
$maand_hits[$maand2] = $row['value2'];
}
}

$maand3 = '<table border="0" width="100%">';
$maand_naam = array('','Januari','Februari','Maart','April','Mei','Juni','Juli','Augustus','September','Oktober','November','December');

for($i=0; $i <= 5; $i++)
{
if($maand-$i < 1)
{
$maand2 = 12-($i-$maand);
$jaar2 = $jaar-1;
}
else
{
$maand2 = $maand-$i;
$jaar2 = $jaar;
}
if($maand_bezoekers[$maand2] != 0)
{
$maand3 .= '<tr><td>'.$maand_naam[$maand2].'</td>
<td width="100">Uniek:</td>
<td width="100">'.$maand_bezoekers[$maand2].'</td>
</tr>
<tr>
<td style="border-bottom: 1px solid #dedede;">&nbsp;</td>
<td width="100" style="border-bottom: 1px solid #dedede;">Hits:</td>
<td width="100" style="border-bottom: 1px solid #dedede;">'.$maand_hits[$maand2].'</td>
</tr>';
}
}
$maand3 .= '</table>';
array_push($terug, 'Afgelopen half jaar');
array_push($terug, $maand3);

$sql = @mysql_query("SELECT extra, value1 FROM stats WHERE type='3' ORDER BY value1 DESC");
$pagina = '<table border="0" width="100%">';
$i = 1;
while($list = @mysql_fetch_array($sql))
{
$pagina .= '<tr><td>'.$i.'. ' . $list['extra'] . '</td>
<td width="100">Hits:</td>
<td width="100">' . $list['value1'] . '</td>
</tr>';
$i ++;
}
$pagina .= '</table>';
array_push($terug, 'Hits per pagina');
array_push($terug, $pagina);

return $terug;
}

?>
Dit script is verreweg van netjes. Je gebruikt overal @-tje om fouten te onderdrukken, terwijl je juist wilt zien als er wat fout gaat. Deze functies bevatten totaal geen foutafhandeling en dat is toch wel de basis van een goed script.

Daarnaast klopt je datamodel ook niet. Je bent kolommen aan het nummeren en van overzichtelijkheid is ook weinig sprake. Over het algemeen is het voor jezelf een indicatie dat zodra je kolommen gaat nummeren, je te maken hebt met een incorrect datamodel. Ik zou serieus overwegen om dit aan te passen.

Kijk eens naar de tutorial over normaliseren hier op deze site. Dat is de basis van een goed datamodel.
Sorry dat ik het op die manier post. Zoals ik al aangaf ben ik echt een leek. Ik heb het weblog gekregen van iemand. Door de volledige code te plaatsen hoopte ik dat iemand mij kon vertellen wat ik precies moet doen om de statistieken per log te kunnen bekijken.

Weet iemand het? Misschien dat een los kant en klaar script ergens te krijgen is dat is simpel kan integreren door bijv. een stukje code toe te voegen.

Reageren