• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

IP Counter

  • Ersteller Ersteller matibaski
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
Hallo!
Ich möchte für meine Seite einen IP Counter machen, indem angezeigt wird, wieviele User heute zugegriffen haben, in der Woche, im Monat, Gesamtbesucherzahl und wieviele online sind.

Diesen möchte ich mit MySQL machen, doch ich habe noch keine Ahnung wie man sowas macht.
Hat jemand einen Ansatz oder ein Tutorial?
Bei Google fand ich nur für gesamtzugriffe der Besucher.

also etwa so:
www.myb.ch.vu


MfG, matibaski
 
Hallo,

du hast in der Datenbank zu jedem Besucher ja nen Timestamp gepeichert. Jetzt bestimmst du einfach den Timestamp vom 1. des aktuellen Monats. Alle Einträge die danach gemacht wurden repräsentieren die Besucher des Monats.

Analog für Heute, Woche, usw.

N43
 
Nein, bis jetzt habe ich noch keinen eingetragen.
Ich weiss eben nicht, wie man vorgehen soll, damit der je nach Datum immer eine IP einträgt, denn ich will, dass es nur 1 mal pro Tag eine IP aufnimmt, also nicht 5 mal am Tag dieselbe.


MfG, matibaski
 
Hallo,

dann fang mal mit Gesamtbesucherzähler an. Auf denen baut der Monats-, Wochenzähler auf.

Du speicherst vom Besucher die IP und nen Timestamp. Bevor du eine IP neu Einträgst prüfst du, ob die IP in den letzten 24h bereits eingetragen wurde. Dazu generierst du den aktuellen Timestamp und ziehst den aus der DB ab. Ist die Differenz > 24h (in Sekunden) dann war der Besucher Heute schonmal da.


N43
 
So weit so gut, doch wie prüfe ich, ob die IP in den letzten 24 Stunden in Sekunden eingetragen wurde?
Also ich dachte so, doch stimmt wohl nich
PHP:
@mysql_connect("host", "user", "pass") OR die(mysql_error());
@mysql_select_db("database") OR die(mysql_error());

$auslese = "SELECT IP, Datum FROM Counter LIMIT 1;";
$result = mysql_query($auslese) OR die(mysql_error());
echo mysql_num_rows($result) . " Besucher gesamt";

// Eintragung:
if(blabla)
{
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO Counter (IP, Datum) VALUES ('".$ip."', NOW())";
mysql_query($sql) OR die(mysql_error());
}
Ich weiss nich, ob das ein falscher Ansatz ist, aber wär toll, wenn du das ergänzen würdest, oder sagst, wie man das macht.


MfG, matibaski
 
Abend,

du musst die Differenz in der Abfrage berechnen:
Code:
 [COLOR=Black]SELECT IP FROM Counter WHERE $now-Datum<24*60*60 AND IP=$ip[/COLOR] LIMIT 1


In $now speicherst du den aktuellen Timestamp und in $ip die IP des Besuchers.

Wenn jetzt ein Eintrag gefunden wird, dann war der Besucher heute schon da. Ansonsten trägst du ihn in die Tabelle ein.


N43
 
Also so?
PHP:
@mysql_connect("host", "user", "pass") OR die(mysql_error());
@mysql_select_db("database") OR die(mysql_error());

$now = NOW();
$ip = $_SERVER['REMOTE_ADDR'];

$auslese = "SELECT IP, Datum FROM Counter WHERE $now-Datum<24*60*60 AND IP=$ip LIMIT 1";
$result = mysql_query($auslese) OR die(mysql_error());
echo mysql_num_rows($result) . " Besucher gesamt";
Bis jetzt noch gut, doch wie frage ich jetzt ab, ob die IP in diesen Sekunden eingetragen worden ist? Also doch in ner if Abfrage?

PS: Hattest beim Select die Datum-Spalte vergessen.



MfG, matibaski

edit:
Oder meintest du INSERT INTO statt SELECT?
 
Hallo,

ich glaub wir haben Querys für 2 verschiedene Zwecke gemeint.

Meiner bestimmt, ob ein neuer Eintrag erstellt werden muss. Mit deinem wolltest du die Anzahl aller Besucher bestimmen.

Das geht mit
Code:
SELECT COUNT(IP) AS amount FROM Counter

Das Datum musste bei meinem nicht mit auslesen, eine Spalte reicht, um zu sehen, ob der Besucher in den letzten 24h schon da war.


N43
 
PHP:
$now = NOW();
$ip = $_SERVER['REMOTE_ADDR'];
$auslese = "SELECT IP, Datum FROM Counter WHERE $now-Datum<24*60*60 AND IP=$ip LIMIT 1";
$result = mysql_query($auslese) OR die(mysql_error());

// Ausgabe:
$ausgabe = "SELECT COUNT(IP) AS amount FROM Counter";
$ausgabequery = mysql_query($ausgabe) OR die(mysql_error());
$row = mysql_fetch_assoc($ausgabe);

echo'Besucher gesamt: '.$row['amount'];

if($result)
{
 $eintrag = "INSERT INTO Counter (IP, Datum) VALUES ('".$ip."', '".$now."')";
 mysql_query($eintrag) OR die(mysql_error());
}
Also sieht das dann etwa so aus?

Ich kapiere eben dein SELECT Code nicht.
Und wieso AS amount?


MfG, matibaski

edit:
Also wenn ich den obigen Code ausprobiere, erhalte ich:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '21:37:36-Datum<24*60*60 AND IP=xxx.x.x.x LIMIT 1' at line 1

Da muss wohl etwas falsch sein, N43. Oder ist das an mir?!
 
Zuletzt bearbeitet von einem Moderator:
Hallo!
Auch wenn ich time(); verwende, kommt n Error raus.
Kann das sein, dass etwas an deinem MySQL Befehl falsch ist?
Ich kapier den Aufbau sowieso nich (deinen Befehl) :D

Also so sieht der Code aus:
PHP:
echo'<b>Besucherstatisik</b><br /><br />';
$now = time();
$ip = $_SERVER['REMOTE_ADDR'];
$auslese = "SELECT IP, Datum FROM Counter WHERE $now<24*60*60 AND IP=$ip LIMIT 1";
$result = mysql_query($auslese) OR die(mysql_error());

// Ausgabe:
$ausgabe = "SELECT COUNT(IP) AS amount FROM Counter";
$ausgabequery = mysql_query($ausgabe) OR die(mysql_error());
$row = mysql_fetch_assoc($ausgabe);

if($result)
{
$eintrag = "INSERT INTO Counter (IP, Datum) VALUES ('".$ip."', '".$now."')";
mysql_query($eintrag) OR die(mysql_error());
}
echo'Besucher seit Juli 2007: '.$row['amount'];
Und ich frage mich, wieso du die Spalte IP als amount setzt. Also COUNT(IP) AS amount.

Aber der Error bekomme ich vom obersten SQL-Befehl. Weiss da jemand etwas?
Bin für jede Hilfe dankbar.
 
Hallo,

Hast du Datum als INT mit Länge 11 gesetzt? Und welche Fehlermeldung kommt denn?

Von $now musst du im Query schon Datum abziehen, sonst liefert die Bedingung immer false.

EDIT: COUNT(IP) zählt die Einträge und AS amount weist der Anzahl im Result-Set "die Spalte" amount zu.

N43
 
In welchem Query?

Hatte VARCHAR(20) gesetzt, habs aber auf INT(11) gesetzt, doch trotzdem nur der Fehler.

Also es kommt:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1 LIMIT 1' at line 1

Also das ist bei deinem Query.
Das .0.1 ist die IP, wenn ich es auf dem localhost ausprobiere, der Schluss.

Sprich hier:
PHP:
$auslese = "SELECT IP, Datum FROM Counter WHERE $now-Datum<24*60*60 AND IP=$ip LIMIT 1";
$result = mysql_query($auslese) OR die(mysql_error());

Und wie ziehe ich beim Query (also das von dir) das Datum ab?
Ich kapier eben momentan nix. Mein Kopf ist so voll :(.

Den Code für mich schreiben musst du nich, denn ich will ja was lernen :D
 
PHP:
 $eintrag = "INSERT INTO Counter (IP, Datum) VALUES ('$ip', '$now')";
Hab ich gemacht, doch immernoch derselbe Fehler.

Oder hab ich dich da falsch verstanden mit $ip?
 
Also jetzt gehts, doch dass Problem ist, dass es den Counter immer 1 nach oben haut.
Also stimmt was bei der Überprüfung nicht, ob es in den letzten 24 Stunden schon einmal eingetragen worden ist.

Da ich deinen SQL nicht ganz kapiere, weiss ich nicht wie umändern.
Ich werde es weiterhin versuchen, aber hier sieht mal der Code so aus:
PHP:
echo'<b>Besucherstatisik</b><br /><br />';
$now = time();
$ip = $_SERVER['REMOTE_ADDR'];
$auslese = "SELECT IP, Datum FROM Counter WHERE $now-Datum<24*60*60 AND IP='$ip' LIMIT 1";
$result = mysql_query($auslese) OR die(mysql_error());

// Ausgabe:
$ausgabe = "SELECT COUNT(IP) AS amount FROM Counter";
$ausgabequery = mysql_query($ausgabe) OR die(mysql_error());
$row = mysql_fetch_assoc($ausgabequery);
echo'Besucher seit Juli 2007: '.$row['amount'];

if($result)
{
 $eintrag = "INSERT INTO Counter (IP, Datum) VALUES ('$ip', '$now')";
 mysql_query($eintrag) OR die(mysql_error());
}
 
Hallo,

$result liefert immer true, wenn der MySQL-Befehl ausgeführt werden konnte. Du musst prüfen, wie viele Einträge gefunden wurden. Wenn einer gefunden wurde, dann war der Besucher in den letzten 24h schon da.


N43
 
Wie denn?
Mit mysql_num_rows()? LoL

Hab echt kein Plan, wie ich das machen soll/abfragen soll.

Hast du mir evtl. nen Ansatz oder ein Schlagwort, nachdem ich suchen kann?
Also ich dachte schon irgendwie so:
PHP:
if($result < blabla)
{
 // Query
}
Doch wie, weiss ich echt nicht. Das ist das erste mal, dass ich mit MySQL solche sachen mache. Vorher einfach eintragen, evtl. ändern, ausgeben und löschen :D
 
Wie denn?
Mit mysql_num_rows()? LoL
Jap:)

Also ich dachte schon irgendwie so:
PHP:
if($result < blabla)
{
 // Query
}
Doch wie, weiss ich echt nicht. Das ist das erste mal, dass ich mit MySQL solche sachen mache. Vorher einfach eintragen, evtl. ändern, ausgeben und löschen :D
Du wählst mit dem Query alle Einträge aus, die die IP $ip haben und die in den letzten 24h Eingetragen wurden.

In Datum steht die Uhrzeit, zu der der Eintrag gemacht wurde (time() ). Wenn du von $now Datum abziehst bleiben die Sekunden, die seit dem Eintrag vergangen sind. Die Differenz muss < als 24*60*60 (24h in Sekunden) sein. Wenn so ein Eintrag gefunden wurde, dann war der Besucher in den letzten 24h schonmal da und muss nicht nochmal in die DB eingetragen werden.


N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben