PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Counter funktioniert nicht



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 :)

Mystics
27.06.2004, 14:15
Sollte das 2. Query nicht eher so lauten?

$abfrage = "SELECT ip AS kontrolle FROM main_usergesamt WHERE ip = '$ip'";
Ansonsten wird das INSERT Query ja nur ausgeführt, wenn main_usergesamt komplett leer ist, da du bei der Abfrage keine Bedingung verwendest.

Fragpoint
27.06.2004, 18:49
Danke, ja, das war einer der Fehler. Ich glaube, gestern war es einfach schon zu spät :rolleyes: Hab den Fehler und ein paar andere heute Morgen gefunden und beseitigt. Jetzt funktioniert der Counter :)