|
|
User gesamt
|
:
|
2436153
|
User online
|
:
|
5
|
|
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
|
|
|
|
MyWebsolution.de Foren » Tutorials » Besucherstatistik - bekomme es einfach nicht hin =(
Seite:
|
1
2
>
|
Posts pro Seite: 5
10
20
|
Autor
|
Thread
|
26.09.2008 22:00 Uhr
|
Besucherstatistik - bekomme es einfach nicht hin =(
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Hallo,
ich habe echt Probleme die Besucherstatistik zum laufen zu bringen. Bei mir fängt es schon beim anfang an. Wie stelle ich eine Verbindung mit meiner MySQL Datenbank her? Und wie erstelle ich in dieser die beiden Tabellen die benötigt werden? Geschieht das alles in einer .php datei? 
MfG
DerGermane
http://www.proton-tuning.de.tf
|
|
|
26.09.2008 23:17 Uhr
|
|
maulepan
|
User
|
|
registriert
|
03.09.2008
|
wohnt in
|
Dessau-Rosslau
|
Beiträge
|
9
|
|
http://www.php-einfach.de/tuts_php_counter.php
<?php
while($hausaufgaben > $freizeit)
{
$hausaufgaben--;
$freizeit++;
}
?>
|
|
|
26.09.2008 23:44 Uhr
|
MySQL Verbindung herstellen
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Schreib in eine Datei:
PHP:
<?php
error_reporting(E_ALL);
// MySQL-Verbindung herstellen
$MYSQL_HOST = 'localhost';
$MYSQL_USER = 'root';
$MYSQL_PASS = 'myPassWord';
$MYSQL_DATA = 'myDataBase';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
// Tabellen erstelleb
$sql = 'CREATE TABLE `Online` ('
. ' `IP` VARCHAR(15) NULL, '
. ' `Datum` DATETIME NULL'
. ' )';
mysql_query($sql);
echo "Online erstellt..<br>";
$sql = 'CREATE TABLE `Counter` ('
. ' `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '
. ' `Datum` DATE NOT NULL, '
. ' `Anzahl` INT NULL DEFAULT \'0\' '
. ' )';
mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Counter erstellt..<br>";
?>
Ruf die Datei dann auf, dann sollten sich die Tabellen "installieren". Vorher natürlich noch die Werte bei der MySQL-Verbindung anpassen
|
|
|
27.09.2008 09:49 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Ok danke erstmal. Aber so richtig weiter komm ich jetzt nicht. Seh nicht ganz durch was für Datein ich erstell muss. Ich zeig euch mal was ich habe.
Also ich habe zuerst in einer config.php Datei die Tabellen erstellt. Es funkionierte auch. Es kam die Texte Tabelle erstellt und Tabelle Online. dann hab ich die config.php wieder gelöscht. In einer .phtml hab ich dann die 2 anderen Datein mit include eingebunden. Aber das ergebniss könnt ihr euch unten ja selber anschaun ...
Meine config.php Datei die die Tabellen erstellt.
Code:
<?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());
// Tabellen erstelleb
$sql = 'CREATE TABLE `Online` ('
. ' `IP` VARCHAR(15) NULL, '
. ' `Datum` DATETIME NULL'
. ' )';
mysql_query($sql);
echo "Online erstellt..<br>";
$sql = 'CREATE TABLE `Counter` ('
. ' `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '
. ' `Datum` DATE NOT NULL, '
. ' `Anzahl` INT NULL DEFAULT \'0\' '
. ' )';
mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
echo "Counter erstellt..<br>";
?>
Die Datei die die Werte ausgeben soll:
Code:
<?php
error_reporting(E_ALL);
// MySQL-Verbindung herstellen
$MYSQL_HOST = '???';
$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());
?>
<?php
// Prüfen, ob bereits ein Counter für den
// heutigen Tag erstellt wurde
$sql = "SELECT
ID
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
// ist der Tag nocht nicht vorhanden,
// wird ein neuer Tagescounter erstellt
if(!mysql_num_rows($result)){
$sql = "INSERT INTO
Counter
SET
Datum = CURDATE()
";
mysql_query($sql);
}
// Alte (mehr als 1 Tag) IPs in 'Online' löschen
// damit die Datenbank nicht überfüllt wird
$sql = "DELETE FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 1 DAY) > Datum
";
mysql_query($sql);
// Überprüfe, ob die IP bereits gespeichert ist
$sql = "SELECT
IP
FROM
Online
Where
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql);
// Falls nicht, wird sie gespeichert...
if (!mysql_num_rows($result)){
$sql = "INSERT INTO
Online
(IP,
Datum
)
VALUES ('".$_SERVER['REMOTE_ADDR']."',
NOW()
)
";
mysql_query($sql);
// ... und die Anzahl wird um 1 erhöht
$sql = "UPDATE
Counter
SET
Anzahl = Anzahl+1
WHERE
Datum = CURDATE()
";
mysql_query($sql);
}
// Ansonsten wird ihr Datum aktualisiert
else {
$sql = "UPDATE
Online
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'
";
mysql_query($sql);
}
?>
<?php
echo "<h1>Statistik</h1>\n";
echo " <table cellpadding=\"2\" style=\"margin-bottom:10px;\">\n".
" <tr><td>Jetzt</td><td style=\"text-align:right;\">".$user_now."</td></tr>\n".
" <tr><td>Heute</td><td style=\"text-align:right;\">".$user_heute."</td></tr>\n".
" <tr><td>Gestern</td><td style=\"text-align:right;\">".$user_gestern."</td></tr>\n".
" <tr><td>Gesamt</td><td style=\"text-align:right;\">".$user_gesamt."</td></tr>\n".
" </table>\n";
?>
Die Datei die die Werte einlesen soll.
Code:
<?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());
?>
<?php
// Alle IPs, die nicht älter als 2 Minuten sind,
// werden gezählt
$sql = "SELECT
COUNT(*)
FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 2 MINUTE) < Datum
";
$result = mysql_query($sql);
$user_now = mysql_result($result, 0);
?>
<?php
// User die 'heute' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_heute = $row['Anzahl'];
?>
<?php
// User die 'gestern' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_gestern = $row['Anzahl'];
?>
<?php
// User die insgesamt die Seite besucht haben.
// Dazu wird die Gruppenfunktion SUM()
// verwendet, die alle Werte der Spalte 'Anzahl' summiert
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
";
$result = mysql_query($sql);
$user_gesamt = mysql_result($result, 0);
?>
Was das ergebniss ist seht ihr hier: http://gbc.inetservice24.de/proton/statistik.phtml
Dieser Beitrag wurde am 27.09.2008 um 09:50:58 Uhr von DerGermane zum 1. Mal editiert.
http://www.proton-tuning.de.tf
|
|
|
27.09.2008 12:20 Uhr
|
RE:
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Datei z.B. readStatistik.php
> Muss auf jeder Seite deiner Homepage inkludiert werden!
PHP:
<?php
error_reporting(E_ALL);
// MySQL-Verbindung herstellen
$MYSQL_HOST = '???';
$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());
/*
* DATENBANKTABELLE AKTUALISIEREN bzw. WERTE SPEICHERN
*/
// Prüfen, ob bereits ein Counter für den
// heutigen Tag erstellt wurde
$sql = "SELECT
ID
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
// ist der Tag nocht nicht vorhanden,
// wird ein neuer Tagescounter erstellt
if(!mysql_num_rows($result)){
$sql = "INSERT INTO
Counter
SET
Datum = CURDATE()
";
mysql_query($sql);
}
// Alte (mehr als 1 Tag) IPs in 'Online' löschen
// damit die Datenbank nicht überfüllt wird
$sql = "DELETE FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 1 DAY) > Datum
";
mysql_query($sql);
// Überprüfe, ob die IP bereits gespeichert ist
$sql = "SELECT
IP
FROM
Online
Where
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql);
// Falls nicht, wird sie gespeichert...
if (!mysql_num_rows($result)){
$sql = "INSERT INTO
Online
(IP,
Datum
)
VALUES ('".$_SERVER['REMOTE_ADDR']."',
NOW()
)
";
mysql_query($sql);
// ... und die Anzahl wird um 1 erhöht
$sql = "UPDATE
Counter
SET
Anzahl = Anzahl+1
WHERE
Datum = CURDATE()
";
mysql_query($sql);
}
// Ansonsten wird ihr Datum aktualisiert
else {
$sql = "UPDATE
Online
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'
";
mysql_query($sql);
}
/*
* DATEN AUS DEN TABELLEN AUSLESEN
*/
// Alle IPs, die nicht älter als 2 Minuten sind,
// werden gezählt
$sql = "SELECT
COUNT(*)
FROM
Online
WHERE
DATE_SUB(NOW(), INTERVAL 2 MINUTE) < Datum
";
$result = mysql_query($sql);
$user_now = mysql_result($result, 0);
// User die 'heute' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = CURDATE()
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_heute = $row['Anzahl'];
// User die 'gestern' auf der Seite waren
$sql = "SELECT
Anzahl
FROM
Counter
WHERE
Datum = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$user_gestern = $row['Anzahl'];
// User die insgesamt die Seite besucht haben.
// Dazu wird die Gruppenfunktion SUM()
// verwendet, die alle Werte der Spalte 'Anzahl' summiert
$sql = "SELECT
SUM(Anzahl)
FROM
Counter
";
$result = mysql_query($sql);
$user_gesamt = mysql_result($result, 0);
?>
Datei zb. showStatistik.php
PHP:
<?php
/*
* DATEN AUSGEBEN
*/
echo "<h1>Statistik</h1>\n";
echo " <table cellpadding=\"2\" style=\"margin-bottom:10px;\">\n".
" <tr><td>Jetzt</td><td style=\"text-align:right;\">".$user_now."</td></tr>\n".
" <tr><td>Heute</td><td style=\"text-align:right;\">".$user_heute."</td></tr>\n".
" <tr><td>Gestern</td><td style=\"text-align:right;\">".$user_gestern."</td></tr>\n".
" <tr><td>Gesamt</td><td style=\"text-align:right;\">".$user_gesamt."</td></tr>\n".
" </table>\n";
?>
|
|
|
27.09.2008 18:05 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Naja ich habe die Datei überall eingefügt und auf einer extra Seite würde ich gerne die Daten ausgegeben bekommen nur tut er das nicht. Ersagt mir:
Zitat:Notice: Undefined variable: user_now in /home/www/web17/html/gbc/proton/statistik/ausgabe.php on line 18
Notice: Undefined variable: user_heute in /home/www/web17/html/gbc/proton/statistik/ausgabe.php on line 19
Notice: Undefined variable: user_gestern in /home/www/web17/html/gbc/proton/statistik/ausgabe.php on line 20
Notice: Undefined variable: user_gesamt in /home/www/web17/html/gbc/proton/statistik/ausgabe.php on line 21
Er weis also nichts mit den Variablen:
.$user_now
.$user_heute
.$user_gerstern
.$user_gesamt
anzufangen ...
woran kann das liegen? Keine Verbindung zur Datenbank? Keine erstellten Tabellen?
MfG
DerGermane
http://www.proton-tuning.de.tf
|
|
|
27.09.2008 18:38 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Ok hab wohl mein Fehler gefunden. Aber gibt es eine möglichkeit in der ausgagebe die Tabelle mit einer CSS Datei zu verbinden? Also so:
<?php
echo " <table cellpadding=\"2\" style=\"margin-bottom:10px;\ id=\"menu\"">\n".
" <tr><td>Jetzt</td><td style=\"text-align:right;\">".$user_now.&q uot;</td></tr>\n".
" <tr><td>Heute</td><td style=\"text-align:right;\">".$user_heute. "</td></tr>\n".
" <tr><td>Gestern</td><td style=\"text-align:right;\">".$user_gester n."</td></tr>\n".
" <tr><td>Gesamt</td><td style=\"text-align:right;\">".$user_gesamt ."</td></tr>\n".
" </table>\n";
?>
Leider geht das nicht so einfach =(
http://www.proton-tuning.de.tf
|
|
|
28.09.2008 03:02 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
PHP:
<?php
echo
" <table id=\"menu\" cellpadding=\"2\" style=\"margin-bottom:10px;\">\n".
" <tr><td>Jetzt</td><td style=\"text-align:right;\">".$user_now."</td></tr>\n".
" <tr><td>Heute</td><td style=\"text-align:right;\">".$user_heute."</td></tr>\n".
" <tr><td>Gestern</td><td style=\"text-align:right;\">".$user_gestern."</td></tr>\n".
" <tr><td>Gesamt</td><td style=\"text-align:right;\">".$user_gesamt."</td></tr>\n".
" </table>\n";
?>
Warum soll das nicht gehen 0o?
Dieser Beitrag wurde am 28.09.2008 um 03:02:51 Uhr von Flitze zum 2. Mal editiert.
|
|
|
28.09.2008 09:27 Uhr
|
|
DerGermane
|
Forenuser
|
|
registriert
|
26.09.2008
|
wohnt in
|
Deutschland
|
Beiträge
|
10
|
|
Naja habe jetzt die Werte die ich brauchte über "sryle" der Tabelle übertragen weil mit dem Code den ich hatte ging das irgendwie nicht. Vllt. weil er die CSS nicht gefunden hat aber egal es geht ja auch so.
Stehe jetzt aber vor einem neuen Problem. Und möchte ich nun die detallierte Ausgabe der Statistik haben nur geht das irgendwie nicht.
soweit kam ich bis jetzt: http://gbc.inetservice24.de/proton/statistik.phtml
der Code sieht so aus:
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 = doQuery($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 style=\"font-weight:bold;\">\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>=2006;$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);
?>
`
Wie ihr seht kann der User einen Tag auswählen und der erste Teil läufz auch fehlerlos nur sobald er dann einen Tag gewählt hat kommt das:
Fatal error: Call to undefined function doQuery() in /home/www/web17/html/gbc/proton/include/statistik_lang.php on line 56
http://www.proton-tuning.de.tf
|
|
|
28.09.2008 14:07 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
ersetze
doQuery durch mysql_query
doQuery is ne eigene Funktion von mir, ist da fälschlicherweise reingerutscht
|
|
|
Seite:
|
1
2
>
|
|
|
Powered by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
Designed by
|
Pascal Landau
|
© 2006
|
MyWebsolution.de
|
|
|
|
|
|