Hallo Ariste,
ich bin mir gerade dabei einen eigenen PHP Counter zumachen. Es scheint nur, dass der Counter nie mehr als ein zählt bzw. wird nur mein IP Adresse in die MySQL Datenbank eingetragen.
wenn ich Dich richtig verstehe, ist Deine Logik wie folgt:
a) Du speicherst
- IP-Adressen und
- einen zugehörigen Zeitpunkt
b) Jede IP-Adresse darf nur einmal in der Tabelle vorkommen.
Dazu wird der Zeitpunkt des letzten Zugriffes gespeichert.
c) Die Anzahl der Tabelleneinträge ist der Counterwert
d) Deine Tabelle wird täglich zu einem bestimmten Zeitpunkt geleert.
Habe ich das richtig verstanden?
Zu a)
Für IP-Adressen bietet sich eine VARCHAR-Spalte an (CHAR ginge auch).
Für den Zeitpunkt ist es sinnvoll, sich beim Sortiment von MySQL zu bedienen:
Du benötigst automatische Aktualisierung, nimm daher TIMESTAMP.
Verzichte auf Dein selbst gewähltes Format!
Zu b)
Wenn Du eine Spalte mit einem eindeutigen Index versiehst, so verhindert
das Datenbankmanagementsystem, dass Werte doppelt eingetragen werden können.
Versieh' also die IP-Spalte mit einem solchen Index, hier bietet sich sogar
ein PRIMARY KEY an.
Versuche einfach ein INSERT, schlägt dieses wegen Indexverletzung fehl, so
aktualisiere den Datensatz. Ist eine vernünftige Strategie, dafür gibt es
[link:http:
Zu c)
Um die Datensätze zu zählen, bietet sich die Funktion COUNT() an:
SELECT COUNT(*) Anzahl FROM zaehler
Dies ergibt *immer* genau einen Datensatz mit einer Spalte, die den Namen Anzahl trägt, in der die Anzahl der Datensätze steht, die Zahl, an der Du interessiert bist. Es ist keine gute Idee, PHP alle Datensätze abholen zu lassen, nur um ihre Anzahl zu ermitteln.
Zu d)
Wenn Du *nicht* die InnoDB-Engine verwendest - bei Shared Hosting hat man
fast immer nur die MyISAM-Engine zur Verfügung - böte sich
[link:http:
dafür an.
Nochmals zur Zusammenfassung: Vereinfache Deinen PHP-Code aufgrund meiner Ausführungen:
1. Baue Verbindung zur DB auf.
2. Führe das INSERT ... ON DUPLICATE KEY UPDATE aus.
3. Führe SELECT COUNT(*) aus.
4. Gib das Ergebnis von Schritt 3 aus.
Allgemein:
Kümmere Dich noch um die Fehlerbehandlung (Datenbanken stehen nicht immer zur Verfügung, SQL-Abfragen können auch fehlschlagen) und die Behandlung von Eingabedaten im SQL-Kontext.
Freundliche Grüße
Vinzenz