|
|
User gesamt
|
:
|
2443020
|
User online
|
:
|
1
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Tutorials » Besucherstatistik - bekomme es einfach nicht hin =(
Seite:
|
<
1
2
3
4
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
28.09.2008 21:21 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Ok das funzt nun auch schon ... aber ein letztes problem bleibt...
Die Ausgabe der Daten in einem Diagramm. Wäre nett wenn ihr euch mal das mal anschaut:
http://gbc.inetservice24.de/proton/statistik.phtml
Irgendwas stimmt da nicht.
Gebe euch mal den Code meiner .php Datei
PHP:
<?php
$diagramme = array();
$diagramme['Tag'] = array();
$diagramme['Tag']['Name'] = "";
$diagramme['Tag']['Hoehe'] = 300;
$diagramme['Tag']['Breite'] = 580;
$diagramme['Tag']['Balken'] = 190;
$diagramme['Tag']['Stellen'] = array();
$diagramme['Tag']['Werte'] = array();
// Name z.B. Januar 2008
$diagramme['Tag']['Name'] = $Monatsnamen[$monat]." ".$jahr;
// $stellen bezeichnet die X-Werte des Diagramms
// als Standard wird 31 festgelegt
$stellen = 31;
// Wurde als Monat April (4), Juni (6),
// September (9) oder November (11)gewählt,
// wird die Anzahl der Stellen auf 30 begrenzt
if(in_array($monat, array(4,6,9,11)))
$stellen = 30;
// Wurde der Februar (2) gewählt, wird geprüft,
// ob es sich beim gewählten Jahr um ein Schaltjahr handelt
elseif($monat == 2){
if($jahr%4==0)
$stellen = 29;
else
$stellen = 28;
}
// Für jeden Tag wird der entsprechende Counter ausgelesen
for($i=1; $i<=$stellen; $i++){
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."' AND
DAYOFMONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
// Sollte kein Counter für einen Tag gefunden werden,
// ist $row['Anzahl'] NULL und wird durch den Cast-Operator
// (int) zu 0, so dass nur INT's vorliegen.
$diagramme['Tag']['Werte'][] = (int)$row['Anzahl'];
$diagramme['Tag']['Stellen'][] = $i;
}
// Jedes Diagramm (Tag/Monat/Jahr) erzeugen
foreach($diagramme as $diagramm => $daten){
// Maximalwert aus den Daten ermitteln, der Maximalwert
// bekommt später die zuvor angegebene maximale Balkenhöhe in px
$maximalwert = max($daten['Werte'])!=0?max($daten['Werte']):1;
// Verhältnis aller Daten zum Maximalwert berechnen
// Jeder Wert erhält dann als Höhe einen Bruchteil der
// maximalen Balkenhöhe
$verhaeltnis = array();
foreach($daten['Werte'] as $key => $wert)
$verhaeltnis[$key] = $wert/$maximalwert;
// Tabelle erzeugen
echo "<table cellpadding=\"1\" style=\"width:".$daten['Breite']."px; height:".$daten['Hoehe']."px; text-align:center; background-color:#aaa; border:solid 1px black; font-size:10px; margin:10px auto\">\n";
// Diagrammname ausgeben
echo " <tr>\n".
" <td colspan=\"".count($daten['Werte'])."\" style=\"height:20px;\">\n".
$daten['Name']."\n".
" </td>\n".
" </tr>\n";
echo " <tr>\n";
// Werte - also Balken - ausgeben
foreach($verhaeltnis as $key => $wert){
// Breite einer Zelle berechnen,
// Ein Balken ist halb so breit wie eine Zelle,
// deshalb das '/2'
echo " <td style=\"vertical-align:bottom; height:200px; width:".floor($daten['Breite']/count($daten['Werte']))."px;\">";
" <div style=\"margin:auto; background-color:red; height:".floor($balken*$wert)."px; width:".floor(($daten['Breite']/2)/count($daten['Werte']))."px\" title=\"".$daten['Werte'][$key]."\">";
" ";
" </div>";
" </td>\n";
}
echo " </tr>\n";
echo " <tr>\n";
// Stellen - also Balkenzuordnung - ausgeben
foreach($daten['Stelle'] as $stelle){
echo " <td style=\"vertical-align:middle; border:solid 1px black; border-width:1px 1px 0px 1px; height:80px;\">";
echo $stelle;
echo " </td>\n";
}
echo " </tr>\n";
echo "</table>\n";
}
$diagramme = array();
$diagramme['Monat'] = array();
$diagramme['Monat']['Name'] = "";
$diagramme['Monat']['Hoehe'] = 300;
$diagramme['Monat']['Breite'] = 580;
$diagramme['Monat']['Balken'] = 190;
$diagramme['Monat']['Stellen'] = array();
$diagramme['Monat']['Werte'] = array();
$diagramme['Monat']['Name'] = $jahr;
for($i=1; $i<=12; $i++){
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$diagramme['Monat']['Werte'][] = (int)mysql_result($result, 0);
$diagramme['Monat']['Stellen'][] = "<img src=\"bilder/monatsnamen/".$i.".jpg\" alt=\"".$Monatsnamen[$i]."\">\n";
}
?>
MfG
DerGermane
Dieser Beitrag wurde am 28.09.2008 um 21:21:49 Uhr von DerGermane zum 1. Mal editiert.
http://www.proton-tuning.de.tf
|
|
|
30.09.2008 19:19 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
hey,
ersetz mal
$balken
durch
$daten['Breite']
und schreibe das hier
PHP:
<?php
$diagramme['Monat'] = array();
$diagramme['Monat']['Name'] = "";
$diagramme['Monat']['Hoehe'] = 300;
$diagramme['Monat']['Breite'] = 580;
$diagramme['Monat']['Balken'] = 190;
$diagramme['Monat']['Stellen'] = array();
$diagramme['Monat']['Werte'] = array();
$diagramme['Monat']['Name'] = $jahr;
for($i=1; $i<=12; $i++){
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$diagramme['Monat']['Werte'][] = (int)mysql_result($result, 0);
$diagramme['Monat']['Stellen'][] = "<img src=\"bilder/monatsnamen/".$i.".jpg\" alt=\"".$Monatsnamen[$i]."\">\n";
}
?>
über das hier
PHP:
<?php
//... >> dahin schreiben
// Jedes Diagramm (Tag/Monat/Jahr) erzeugen
foreach($diagramme as $diagramm => $daten){
//...
?>
|
|
|
30.09.2008 22:19 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Juhu jetzt gibt er zu mindestens keine Fehlermeldung mehr aus ... nur er liest anscheinend die Werte meines Counters nicht ein ... gib euch am besten nochmal mein kompleten Code vllt. seht ihr ja was da nicht stimmt. Ich habe nichts finden können. Schon mal vorab danke für die Geduld 
PHP:
<?php
error_reporting(E_ALL);
// MySQL-Verbindung herstellen
$MYSQL_HOST = 'localhost';
$MYSQL_USER = '???';
$MYSQL_PASS = '???';
$MYSQL_DATA = '???';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
$Monatsnamen = array(1 => 'Januar',
2 => 'Februar',
3 => 'März',
4 => 'April',
5 => 'Mai',
6 => 'Juni',
7 => 'Juli',
8 => 'August',
9 => 'September',
10 => 'Oktober',
11 => 'November',
12 => 'Dezember'
);
// heutiges Datum auswählen
$datum = getdate();
$jahr = $datum['year'];
$monat = $datum['mon'];
$tag = $datum['mday'];
// Fehlerarray erzeugen
$errors = array();
// Prüfen, ob Jahr, Monat und Tag ausgewählt wurden
if(!isset($_POST['Jahr']) OR $_POST['Jahr'] == '0')
$errors[] = "Sie haben kein Jahr ausgewählt.";
elseif(!isset($_POST['Monat']) OR $_POST['Monat'] == '0')
$errors[] = "Sie haben keinen Monat ausgewählt.";
elseif(!isset($_POST['Tag']) OR $_POST['Tag'] == '0')
$errors[] = "Sie haben keinen Tag ausgewählt.";
else{
// Prüfen, ob ds Datum gültig ist
if(!checkdate($_POST['Monat'], $_POST['Tag'], $_POST['Jahr']))
$errors[] = "Das Datum (".$_POST['Tag']." ".$Monatsnamen[$_POST['Monat']].". ".$_POST['Jahr'].") ist
ungültig.";
else{
// Prüfen, ob zu dem ausgewählten Datum ein Counter existiert
$sql = "SELECT
COUNT(*)
FROM
Counter
WHERE
YEAR(Datum) = '".mysql_real_escape_string($_POST['Jahr'])."' AND
MONTH(Datum) = '".mysql_real_escape_string($_POST['Monat'])."' AND
DAYOFMONTH(Datum) = '".mysql_real_escape_string($_POST['Tag'])."'
";
$result = mysql_query($sql);
if(!mysql_result($result, 0))
$errors[] = "Zu dem gewählten Datum (".$_POST['Tag'].". ".$Monatsnamen[$_POST['Monat']]."
".$_POST['Jahr'].") existieren keine Daten.";
}
}
// Fehler ausgeben
if(count($errors)){
echo "<p>\n";
foreach($errors as $error)
echo $error."\n<br>\n";
echo "Standardmäßig wird das heutige Datum (".$tag.". ".$Monatsnamen[$monat]." ".$jahr.") ausgewählt.\n";
echo "</p>\n";
}
// Ansonsten Daten aus dem Formular überneh?????? †O???men
else{
$jahr = (int)mysql_real_escape_string($_POST['Jahr']);
$monat = (int)mysql_real_escape_string($_POST['Monat']);
$tag = (int)mysql_real_escape_string($_POST['Tag']);
}
echo "<form name=\"User\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<div style=\"padding:0px 0px 0px 20px;\">\n";
echo "<select name=\"Tag\">\n";
echo "<option value=\"0\">Tag</option>\n";
for($i=1;$i<=31;$i++){
if($i==$tag)
echo "<option value=\"".$i."\" selected>".$i.".</option>\n";
else
echo "<option value=\"".$i."\">".$i.".</option>\n";
}
echo "</select>\n";
echo "<select name=\"Monat\">\n";
echo "<option value=\"0\">Monat</option>\n";
for($i=1;$i<=12;$i++){
if($i==$monat)
echo "<option value=\"".$i."\" selected>".$Monatsnamen[$i]."</option>\n";
else
echo "<option value=\"".$i."\">".$Monatsnamen[$i]."</option>\n";
}
echo "</select>\n";
echo "<select name=\"Jahr\">\n";
echo "<option value=\"0\">Jahr</option>\n";
for($i=2008;$i>=2008;$i--){
if($i==$jahr)
echo "<option value=\"".$i."\" selected>".$i."</option>\n";
else
echo "<option value=\"".$i."\">".$i."</option>\n";
}
echo "</select>\n";
echo "<br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Daten anzeigen\">\n";
echo "</div></form>\n";
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."' AND
DAYOFMONTH(Datum) = '".$tag."'
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$anzahl_tag = $row['Anzahl'];
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."'
";
$result = mysql_query($sql);
$anzahl_monat = mysql_result($result, 0);
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."'
";
$result = mysql_query($sql);
$anzahl_jahr = mysql_result($result, 0);
echo " <table id=\"tabelle\" cellpadding=\"0\" cellspacing=\"0\">
<tr class=\"odd\"><td colspan=\"4\"><p>Besucherstatistik vom ".$tag.". ".$Monatsnamen[$monat]."
".$jahr.":</p></td></tr>
<tr><td width=\"200\"><p>Tag (".$tag."):</p></td><td width=\"70\"></td><td><p>".$row['Anzahl']."</p></td><td
width=\"450\"></td></tr>
<tr><td width=\"200\"><p>Monat (".$Monatsnamen[$monat]."):</p></td><td
width=\"70\"></td><td><p>".$anzahl_monat."</p></td><td width=\"450\"></td></tr>
<tr><td width=\"200\"><p>Jahr (".$jahr."):</p></td><td width=\"70\"></td><td><p>".$anzahl_jahr."</p></td><td
width=\"450\"></td></tr>
</table>";
$diagramme = array();
$diagramme['Tag'] = array();
$diagramme['Tag']['Name'] = "";
$diagramme['Tag']['Hoehe'] = 300;
$diagramme['Tag']['Breite'] = 580;
$diagramme['Tag']['Balken'] = 190;
$diagramme['Tag']['Stellen'] = array();
$diagramme['Tag']['Werte'] = array();
// Name z.B. Januar 2008
$diagramme['Tag']['Name'] = $Monatsnamen[$monat]." ".$jahr;
// $stellen bezeichnet die X-Werte des Diagramms
// als Standard wird 31 festgelegt
$stellen = 31;
// Wurde als Monat April (4), Juni (6),
// September (9) oder November (11)gewählt,
// wird die Anzahl der Stellen auf 30 begrenzt
if(in_array($monat, array(4,6,9,11)))
$stellen = 30;
// Wurde der Februar (2) gewählt, wird geprüft,
// ob es sich beim gewählten Jahr um ein Schaltjahr handelt
elseif($monat == 2){
if($jahr%4==0)
$stellen = 29;
else
$stellen = 28;
}
// Für jeden Tag wird der entsprechende Counter ausgelesen
for($i=1; $i<=$stellen; $i++){
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$monat."' AND
DAYOFMONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
// Sollte kein Counter für einen Tag gefunden werden,
// ist $row['Anzahl'] NULL und wird durch den Cast-Operator
// (int) zu 0, so dass nur INT's vorliegen.
$diagramme['Tag']['Werte'][] = (int)$row['Anzahl'];
$diagramme['Tag']['Stellen'][] = $i;
}
$diagramme['Monat'] = array();
$diagramme['Monat']['Name'] = "";
$diagramme['Monat']['Hoehe'] = 300;
$diagramme['Monat']['Breite'] = 580;
$diagramme['Monat']['Balken'] = 190;
$diagramme['Monat']['Stellen'] = array();
$diagramme['Monat']['Werte'] = array();
$diagramme['Monat']['Name'] = $jahr;
for($i=1; $i<=12; $i++){
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$diagramme['Monat']['Werte'][] = (int)mysql_result($result, 0);
$diagramme['Monat']['Stellen'][] = "<img src=\"bilder/monatsnamen/".$i.".jpg\" alt=\"".$Monatsnamen[$i]."\">\n";
}
// Jedes Diagramm (Tag/Monat/Jahr) erzeugen
foreach($diagramme as $diagramm => $daten){
// Maximalwert aus den Daten ermitteln, der Maximalwert
// bekommt später die zuvor angegebene maximale Balkenhöhe in px
$maximalwert = max($daten['Werte'])!=0?max($daten['Werte']):1;
// Verhältnis aller Daten zum Maximalwert berechnen
// Jeder Wert erhält dann als Höhe einen Bruchteil der
// maximalen Balkenhöhe
$verhaeltnis = array();
foreach($daten['Werte'] as $key => $wert)
$verhaeltnis[$key] = $wert/$maximalwert;
// Tabelle erzeugen
echo "<table cellpadding=\"1\" style=\"width:".$daten['Breite']."px; height:".$daten['Hoehe']."px; text-align:center;
background-color:#aaa; border:solid 1px black; font-size:10px; margin:10px auto\">\n";
// Diagrammname ausgeben
echo " <tr>\n".
" <td colspan=\"".count($daten['Werte'])."\" style=\"height:20px;\">\n".
$daten['Name']."\n".
" </td>\n".
" </tr>\n";
echo " <tr>\n";
// Werte - also Balken - ausgeben
foreach($verhaeltnis as $key => $wert){
// Breite einer Zelle berechnen,
// Ein Balken ist halb so breit wie eine Zelle,
// deshalb das '/2'
echo " <td style=\"vertical-align:bottom; height:200px;
width:".floor($daten['Breite']/count($daten['Werte']))."px;\">";
" <div style=\"margin:auto; background-color:red; height:".floor($daten['Breite']*$wert)."px;
width:".floor(($daten['Breite']/2)/count($daten['Werte']))."px\" title=\"".$daten['Werte'][$key]."\">";
" ";
" </div>";
" </td>\n";
}
echo " </tr>\n";
echo " <tr>\n";
// Stellen - also Balkenzuordnung - ausgeben
foreach($daten['Stellen'] as $stelle){
echo " <td style=\"vertical-align:middle; border:solid 1px black; border-width:1px 1px 0px 1px;
height:80px;\">";
echo $stelle;
echo " </td>\n";
}
echo " </tr>\n";
echo "</table>\n";
}
$diagramme = array();
$diagramme['Monat'] = array();
$diagramme['Monat']['Name'] = "";
$diagramme['Monat']['Hoehe'] = 300;
$diagramme['Monat']['Breite'] = 580;
$diagramme['Monat']['Balken'] = 190;
$diagramme['Monat']['Stellen'] = array();
$diagramme['Monat']['Werte'] = array();
$diagramme['Monat']['Name'] = $jahr;
for($i=1; $i<=12; $i++){
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$diagramme['Monat']['Werte'][] = (int)mysql_result($result, 0);
$diagramme['Monat']['Stellen'][] = "<img src=\"bilder/monatsnamen/".$i.".jpg\" alt=\"".$Monatsnamen[$i]."\">\n";
}
?>
http://www.proton-tuning.de.tf
|
|
|
01.10.2008 15:09 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Na, geht doch voran ^^
Also erstmal kannd er letzte Teil raus, dieses
PHP:
<?php
$diagramme = array();
$diagramme['Monat'] = array();
$diagramme['Monat']['Name'] = "";
$diagramme['Monat']['Hoehe'] = 300;
$diagramme['Monat']['Breite'] = 580;
$diagramme['Monat']['Balken'] = 190;
$diagramme['Monat']['Stellen'] = array();
$diagramme['Monat']['Werte'] = array();
$diagramme['Monat']['Name'] = $jahr;
for($i=1; $i<=12; $i++){
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
WHERE
YEAR(Datum) = '".$jahr."' AND
MONTH(Datum) = '".$i."'
";
$result = mysql_query($sql);
$diagramme['Monat']['Werte'][] = (int)mysql_result($result, 0);
$diagramme['Monat']['Stellen'][] = "<img src=\"bilder/monatsnamen/".$i.".jpg\" alt=\"".$Monatsnamen[$i]."\">\n";
?>
was da ganz am Ende bei dir steht.. Daran liegt es nicht aber es ist einfach überflüssig 
Ich kann leider keine Tests auf deinem Server durchführen, deswegen sage ich dir einfach, was ich an deiner Stelle tun würde.
Kontrollausgaben von
$_POST['Jahr']
$_POST['Monat']
$_POST['Tag']
und von
$jahr
$monat
$tag
machen, z.b. mit:
PHP:
<?php
echo 'In $_POST['Jahr'] steht:';
echo "<pre>\n".
var_dump($_POST['Jahr']);
echo "</pre>\n";
echo 'In $_POST['Monat'] steht:';
echo "<pre>\n".
var_dump($_POST['Monat']);
echo "</pre>\n";
echo 'In $_POST['Tag'] steht:';
echo "<pre>\n".
var_dump($_POST['Tag']);
echo "</pre>\n";
echo 'In $jahr steht:';
echo "<pre>\n".
var_dump($jahr);
echo "</pre>\n";
echo 'In $monat steht:';
echo "<pre>\n".
var_dump($monat);
echo "</pre>\n";
echo 'In $tag steht:';
echo "<pre>\n".
var_dump($tag);
echo "</pre>\n";
?>
Das ganze am besten vor diese Stelle schreiben:
PHP:
<?php
// --> dahein schreiben
echo "<form name=\"User\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
//...
?>
Beim ersten Aufruf gibts wahrscheinlich ne Fehlermeldung, weil die $_POST Variablen noch nicht gesetzt sind, aber der verschwindet, wenn man auf Daten anzeigen klickt.
Wenn die Daten korrekt übernommen werden muss es am SQL-Query (Daten aus der DB auslesen) liegen, also muss das Ergebnis von diesem getestet werden. Evtl. auch mal kontrollieren, ob in der DB was drin steht und wie es drin steht 
Gruß
|
|
|
25.01.2009 14:39 Uhr
|
|
TEST
|
Forenposter
|
|
registriert
|
16.04.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
81
|
|
Hi,
kann mir hier jemand mal alle Dateien reinschreiben auch eine .sql Datei?
Ich werde nämlich aus deinen Tutorial nicht schlau.(keine Namen für Dateien)
Ich würde des dann auf meiner HP verwenden.
|
|
|
Seite:
|
<
1
2
3
4
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|