Fragpoint
27.06.2004, 02:33
Ich versuche momentan anhand von verschiedenen Tutorials einen Counter zu schreiben, der auf MySQL zugreift. Komme damit auch bisher ganz gut voran. Das ist mein bisheriges Ergebnis:
// ==================================================
// ALLGEMEINE ANGABEN FÜR DEN COUNTER
// ==================================================
$zeitonline = "10"; // Wie lange als online werten in Minuten
$zeitgesamt = "180"; // Wie lange für Gesamtcounter in Minuten
$ip=$_SERVER['REMOTE_ADDR'];
// ==================================================
// ALTE DATENSÄTZE LÖSCHEN (GESAMT-BESUCHER)
// ==================================================
$abfrage = "DELETE FROM main_usergesamt WHERE DATE_SUB(NOW(), INTERVAL $zeitgesamt MINUTE) > zeitpunkt";
mysql_query($abfrage);
// ==================================================
// GESAMT-BESUCHER ZÄHLEN UND AUSGEBEN
// ==================================================
$abfrage = "SELECT ip AS kontrolle FROM main_usergesamt";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
if($row['kontrolle'])
{
$abfrage = "SELECT counter AS gesamt FROM main_counter";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
$besuchergesamt = $row['gesamt'];
echo $besuchergesamt." Besucher<br>";
}
else
{
$abfrage = "INSERT INTO main_usergesamt (ip, zeitpunkt) VALUES ('".$ip."', NOW())";
mysql_query($abfrage);
$abfrage = "SELECT counter AS gesamt FROM main_counter";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
$besuchergesamt = $row['gesamt'];
$besuchergesamt = $besuchergesamt + 1;
$abfrage = "UPDATE main_counter SET counter = $besuchergesamt";
mysql_query($abfrage);
echo $besuchergesamt." Besucher<br>";
}
// ==================================================
// MOMENTANE ONLINE-BESUCHER ZÄHLEN UND AUSGEBEN
// ==================================================
$abfrage = "SELECT ip AS kontrolle FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
if($row['kontrolle'])
{
$abfrage = "UPDATE main_useronline SET zeitpunkt = NOW() WHERE ip = '".$ip."'";
mysql_query($abfrage);
$abfrage = "SELECT COUNT(*) AS anzahl FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
echo $row['anzahl']." User online<br>";
}
else
{
$abfrage = "INSERT INTO main_useronline (ip, zeitpunkt) VALUES ('".$ip."', NOW())";
mysql_query($abfrage);
$abfrage = "SELECT COUNT(*) AS anzahl FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
echo $row['anzahl']." User online<br>";
}
// ==================================================
// ALTE DATENSÄTZE LÖSCHEN (ONLINE-BESUCHER)
// ==================================================
$abfrage = "DELETE FROM main_useronline WHERE DATE_SUB(NOW(), INTERVAL $zeitonline MINUTE) > zeitpunkt";
mysql_query($abfrage);
Gezählt werden die Besucher, die gerade online sind und die Gesamtbesucher (seit bestehen der Seite). Naja, d.h. nicht so ganz :rolleyes: Mein Problem ist folgendes: Kommt ein Besucher auf die Seite, wird er ganz normal gezählt. Geht jetzt noch ein 2. Besucher mit einer anderen IP auf die Seite, wird dieser nicht gezählt. Er wird erst wieder gewertet, sobald das Zeitlimit des 1. Besuchers abgelaufen ist.
Ich habe dazu mal einen Blick in die Datenbank geworfen. Dort wird jeweils nur eine einzige Zeile angelegt (jeweils bei main_useronline und main_usergesamt) mit IP und Zeitpunkt. Der 2. Besucher wird irgendwie gar nicht beachtet. Eigentlich sollte dieser aber in der nächsten Zeile stehen.
Wo könnte mein Fehler liegen? Ich hoffe mal, jemand von Euch kann mir da helfen :)
// ==================================================
// ALLGEMEINE ANGABEN FÜR DEN COUNTER
// ==================================================
$zeitonline = "10"; // Wie lange als online werten in Minuten
$zeitgesamt = "180"; // Wie lange für Gesamtcounter in Minuten
$ip=$_SERVER['REMOTE_ADDR'];
// ==================================================
// ALTE DATENSÄTZE LÖSCHEN (GESAMT-BESUCHER)
// ==================================================
$abfrage = "DELETE FROM main_usergesamt WHERE DATE_SUB(NOW(), INTERVAL $zeitgesamt MINUTE) > zeitpunkt";
mysql_query($abfrage);
// ==================================================
// GESAMT-BESUCHER ZÄHLEN UND AUSGEBEN
// ==================================================
$abfrage = "SELECT ip AS kontrolle FROM main_usergesamt";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
if($row['kontrolle'])
{
$abfrage = "SELECT counter AS gesamt FROM main_counter";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
$besuchergesamt = $row['gesamt'];
echo $besuchergesamt." Besucher<br>";
}
else
{
$abfrage = "INSERT INTO main_usergesamt (ip, zeitpunkt) VALUES ('".$ip."', NOW())";
mysql_query($abfrage);
$abfrage = "SELECT counter AS gesamt FROM main_counter";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
$besuchergesamt = $row['gesamt'];
$besuchergesamt = $besuchergesamt + 1;
$abfrage = "UPDATE main_counter SET counter = $besuchergesamt";
mysql_query($abfrage);
echo $besuchergesamt." Besucher<br>";
}
// ==================================================
// MOMENTANE ONLINE-BESUCHER ZÄHLEN UND AUSGEBEN
// ==================================================
$abfrage = "SELECT ip AS kontrolle FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
if($row['kontrolle'])
{
$abfrage = "UPDATE main_useronline SET zeitpunkt = NOW() WHERE ip = '".$ip."'";
mysql_query($abfrage);
$abfrage = "SELECT COUNT(*) AS anzahl FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
echo $row['anzahl']." User online<br>";
}
else
{
$abfrage = "INSERT INTO main_useronline (ip, zeitpunkt) VALUES ('".$ip."', NOW())";
mysql_query($abfrage);
$abfrage = "SELECT COUNT(*) AS anzahl FROM main_useronline";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_assoc($ergebnis);
echo $row['anzahl']." User online<br>";
}
// ==================================================
// ALTE DATENSÄTZE LÖSCHEN (ONLINE-BESUCHER)
// ==================================================
$abfrage = "DELETE FROM main_useronline WHERE DATE_SUB(NOW(), INTERVAL $zeitonline MINUTE) > zeitpunkt";
mysql_query($abfrage);
Gezählt werden die Besucher, die gerade online sind und die Gesamtbesucher (seit bestehen der Seite). Naja, d.h. nicht so ganz :rolleyes: Mein Problem ist folgendes: Kommt ein Besucher auf die Seite, wird er ganz normal gezählt. Geht jetzt noch ein 2. Besucher mit einer anderen IP auf die Seite, wird dieser nicht gezählt. Er wird erst wieder gewertet, sobald das Zeitlimit des 1. Besuchers abgelaufen ist.
Ich habe dazu mal einen Blick in die Datenbank geworfen. Dort wird jeweils nur eine einzige Zeile angelegt (jeweils bei main_useronline und main_usergesamt) mit IP und Zeitpunkt. Der 2. Besucher wird irgendwie gar nicht beachtet. Eigentlich sollte dieser aber in der nächsten Zeile stehen.
Wo könnte mein Fehler liegen? Ich hoffe mal, jemand von Euch kann mir da helfen :)