|
|
Ich | Entwicklung | Lösungen | Apache | PHP | mySQL | ||||||
Artikel
Skripte
|
Domain-StatistikWenn Sie (wie auf intermitto.net) Ihre Webseite mit PHP betreiben und die HTML-Ausgabe dynamisch je nach übergebenem Parameter erstellen, dann helfen Ihnen die üblichen Statistiken des Webservers meist nicht weiter. Es wird immer nur die index.php aufgerufen, die meisten Statistik-Programme (wie beispielsweise Webalizer) können Ihnen also keine Auskunft darüber geben, welche Seiten besucht wurden. Durch ein kurzes PHP-Skript und eine mySQL-Tabelle können Sie trotzdem Seiten-Statistiken erzeugen. Für eine grafische Auswertung ist dann etwas mehr PHP erforderlich, ich gebe Ihnen eine kleine Einführung. Die TabelleWir benutzen für unsere Statistiken acht Felder, wir speichern tagesbezogene Daten. Falls Sie auch die Uhrzeit speichern möchten, erweitern Sie die Tabelle und das Skript entsprechend. In den folgenden Beispielen heißt die Tabelle CREATE TABLE `in_log` (
`id` int(10) unsigned NOT NULL auto_increment,
`count` int(10) unsigned NOT NULL default '0',
`year` varchar(4) NOT NULL default '',
`month` char(2) NOT NULL default '',
`day` char(2) NOT NULL default '',
`main` varchar(60) NOT NULL default '',
`site` varchar(60) NOT NULL default '',
`sub` varchar(60) NOT NULL default '',
PRIMARY KEY (`id`)
);
Das Speichern eines ZugriffsDie unten benutzte Funktion <?php
function sitelog($main, $site, $sub, $tableName) {
$year = date("Y");
$month = date("n");
$day = date("d");
$statement = "SELECT count, id FROM ".$tableName;
$statement.= " WHERE year='".$year."' AND month='".$month."' AND day='".$day."'";
$statement.= " AND main='".$main."' AND site='".$site."' AND sub='".$sub."'";
$ergebnis = @mysql_query($statement);
$count = @mysql_fetch_row($ergebnis);
if(!empty($count[0])) {
$count[0] += 1;
$statement = "UPDATE ".$tableName." SET count='".$count[0]."' WHERE id='".$count[1]."'";
} else {
$statement = "INSERT INTO ".$tableName;
$statement.= " SET count='1', year='".$year."', month='".$month."', day='".$day."',";
$statement.= " main='".$main."', site='".$site."', sub='".$sub."'";
}
@mysql_query($statement);
}
?>
Um die Tabelle nicht unnötig groß werden zu lassen, wird nicht für jeden Zugriff ein neuer Datensatz angelegt. Stattdessen steht jeder Datensatz für eine Kombination aus Datum und besuchter Seite, es wird jeweils die Anzahl der Zugriffe gespeichert. Der Aufruf geschieht dann in der index.php und sieht dann beispielsweise so aus: sitelog($thema, $seite, "", "in_log"); Wir nehmen hier an, dass eine Navigationstiefe vorhanden ist, d.h. Aufrufe von der Form Die AuswertungIch zeige Ihnen hier im Ansatz, wie Sie die gespeicherten Daten auswerten können. Das Ergebnis wird eine Tagesstatistik sein, wie sie auch für intermitto.net existiert. Festlegen des anzuzeigenden MonatsZuerst wollen wir ein Auswahlfeld für den anzuzeigenden Monat anbieten. Dazu geben wir an, in welchem Monat und Jahr die Statistiken anfangen ( <form method="post" action="/?thema=start&seite=statistik.tag">
<p>Wählen Sie den anzuzeigenden Monat: <select name="monthselection">
<?php
$aktYear = date("Y");
$aktMonth = date("n");
$startYear = 2005;
$startMonth = 3;
if(empty($_POST["monthselection"])) {
$selMonth = $aktMonth;
$selYear = $aktYear;
} else {
$montharray = explode("-", $_POST["monthselection"]);
$selMonth = $montharray[0];
$selYear = $montharray[1];
}
for($year = $startYear; $year <= $aktYear; $year++) {
for($month = 1; $month <= 12; $month++) {
if(($year == $startYear) && ($month < $startMonth)) continue;
if(($year == $aktYear) && ($month > $aktMonth)) break;
echo "<option value=\"".$month."-".$year."\"";
if(($month == $selMonth) && ($year == $selYear)) {
echo " selected=\"selected\"";
}
echo ">".$month."/".$year."</option>";
}
}
?>
</select> <input type="submit" value="Aktualisieren" /></p>
</form>
Natürlich müssen Sie für Ihre Webseite einige Anpassungen vornehmen, beispielsweise das Funktion zum Anzeigen der Statistik einer SeiteDie folgene Funktion nutzen wir später, um eine Tabelle auszugeben. Sie zeigt die Anzahl der Zugriffe an den Tagen des Monats an. <?php
function displayStat($stat, $main, $site, $maxDay) {
echo "<table class='startBackTable'>";
echo "<tr>";
echo "<td colspan='".$maxDay."'>".$site."</td>";
echo "</tr>";
echo "<tr>";
for($i = 1; $i <= $maxDay; $i++) {
echo "<td>";
if(!empty($stat[$main][$site][$i])) {
echo "<img src='/images/lila.gif' width='10' height='".(2 * $stat[$main][$site][$i])."' />";
}
echo "</td>";
}
echo "</tr>";
echo "<tr>";
for($i = 1; $i <= $maxDay; $i++) {
echo "<td>";
if(empty($stat[$main][$site][$i])) {
echo "0";
} else {
echo $stat[$main][$site][$i];
}
echo "</td>";
}
echo "</tr>";
echo "<tr>";
for($i = 1; $i <= $maxDay; $i++) {
echo "<td>".$i."</td>";
}
echo "</tr>";
echo "</table>";
}
?>
Aufruf der FunktionWir legen ein Array mit den Themen an, um die Reihenfolge der Anzeige bestimmen zu können: $themen[] = "start";
$themen[] = "ich";
$themen[] = "entwicklung";
$themen[] = "loesungen";
$themen[] = "apache";
$themen[] = "php";
$themen[] = "mysql";
Schließlich führen wir die Datenbank-Abfrage aus und rufen die oben beschriebene Funktion auf: <?php
$statement = "SELECT * FROM in_log WHERE year='".$selYear."' AND month='".$selMonth."'";
$ergebnis = @mysql_query($statement);
$maxDay = 1;
while($daten = @mysql_fetch_assoc($ergebnis)) {
$stat[$daten["main"]][$daten["site"]][$daten["day"]] += $daten["count"];
if($daten["day"] > $maxDay) $maxDay = $daten["day"];
}
for($i = 0; $i < count($themen); $i++) {
echo "<h3>".$themen[$i]."</h3>";
if(isset($stat[$themen[$i]])) {
displayStat($stat, $themen[$i], "_index", $maxDay);
foreach($stat[$themen[$i]] as $key => $value) {
if($key != "_index") displayStat($stat, $themen[$i], $key, $maxDay);
}
}
}
?>
Seiten-Statistiken für intermitto.netSchauen Sie sich die Statistiken für intermitto.net an, um das Ergebnis zu sehen: Die Gesamtstatistik zeigt die Zugriffe insgesamt nach Monaten. Die Monatsstatistik zeigt die Zugriffe auf verschiedene Webseiten nach Monaten. Die Tagesstatistik zeigt die Zugriffe auf verschiedene Webseiten nach Tagen (für einen Monat). Das Syntax-Highlighting der Codebeispiele wurde mit QFormat erreicht. |
|||||||||||
|
URL: www.intermitto.net/loesungen/skripte/statistik/ |
Home - Kontaktformular - Downloads - Suche und Sitemap - Impressum |
|||||||||||