Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 
 

[Code] Counter mit MySQL

Sie befinden sich: Home > Webmaster News

Im Folgenden wollen wir uns einen eigenen Counter für unsere Webseiten programmieren, der den Zählerstand in einer MySQL-Tabelle verwaltet.

Diese Tabelle müssen wir zunächst erzeugen:


CREATE TABLE `counter` (
`id` INT NOT NULL AUTO_INCREMENT ,
`ipadresse` varchar(15) NOT NULL ,
`letzter_besuch` int(10) unsigned NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

INSERT INTO `counter` ( `ipadresse` , `letzter_besuch` )
VALUES ('zaehlerstand', '0');

Wie Sie sehen, haben wir sofort auch eine Zeile erzeugt, in der der Zählerstand gespeichert wird. Wir nutzen hier die Tatsache, dass wir einen varchar-Key und einen numerischen Wert brauchen und beides in dieser Struktur vorfinden. Als 'IP-Adresse' speichern wir das Wort 'zaehlerstand' und als Anfangswert für den Zählerstand den Wert 0. Dies spart uns eine weitere Tabelle, in der nur eine einzige Zeile verwaltet würde.

In dieser Hilfsdatei legen wir die Zugangsdaten für die Datenbank fest und zugleich eine Variable für die Zeitangabe einer Reloadsperre.


<?php
// connect.php

$cfg = array();

$cfg['zeitsperre'] = 4;

$cfg['host']='localhost';
$cfg['datenbank']='datenbankname';
$cfg['login']='username';
$cfg['passwort']='...passwort...';

$conn=mysql_connect($cfg['host'],$cfg['login'],$cfg['passwort']);
$db=mysql_select_db($cfg['datenbank']);
?>

Im folgenden gehen wir davon aus, dass connect.php schon per include-Anweisung ausgeführt wurde, es eine Verbindung zur datenbank gibt, und die $cfg[]-Variablen existieren.

Hier nun der erste Entwurf eines Counters, noch Ohne Reloadsperre:


<?php
// Zaehlerstand um 1 erhöhen

$sqlc = "UPDATE counter SET letzter_besuch = letzter_besuch+1 WHERE ipadresse='zaehlerstand'";
mysql_query($sqlc) OR die(mysql_error());

$sqlc = "SELECT letzter_besuch FROM counter WHERE ipadresse='zaehlerstand'";
$ergc = mysql_query($sqlc);
$rowc = mysql_fetch_assoc($ergc);

echo 'Anzahl Besucher bisher '.$row['letzter_besuch'];
?>

Wenn wir diesen Code einbauen so stellen wir fest, dass mit jedem Aufruf der Seite der Zähler um 1 erhöht wird. Wir wollen nun aber noch erreichen, dass jeder besucher nur einmal gezählt wird. Diese Sperre soll nach Ablauf von 4 Minuten, also der in $cfg['zeitsperre'] gespeicherten Zahl wieder aufgehoben werden. Einen bestimmten User erkennen wir an seiner IP-Adresse. Wir speichern also die erkannte IP zusammen mit der Zeit in die Datenbank. Der Ablauf des Zählens verändert sich nun wie folgt: a) alle Zeilen aus der tabelle löschen, die älter sind als 4 Minuten b) Nachsehen, ob ein Eintrag zur ermittelten IP-Adresse vorliegt b1) Wenn nein: IP-Adresse mit aktuellem Zeitstempel speichern und Counter erhöhen b2) Wenn ja: nichts machen c) neuen Counter auslesen und anzeigen


<?php
// Ermitttle Zeit(jetzt) und Zeit(vor 4 Minuten)
$jetzt = time();
$alt = $jetzt - 60 * $cfg['zeitsperre'];

// Alte Zeiten löschen
$sql = "DELETE FROM counter WHERE ipadresse != 'zaehlerstand' AND letzter_besuch < '$alt'";
mysql_query($sql) OR die(mysql_error());

// IP ermitteln
if ($_SERVER['HTTP_X_FORWARDED_FOR']) { 
$realip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
$realip = $_SERVER['REMOTE_ADDR']; 
}

// Tabellenzeile zu IP suchen
$sql = "SELECT letzter_besuch FROM counter WHERE ipadresse = '$realip'";
$erg = mysql_query($sql);
$row = mysql_fetch_assoc($erg);
if(mysql_num_rows($erg) == 0) { // IP nicht gefunden
// $realip mit $jetzt eintragen
$ins = "INSERT INTO counter (ipadresse,letzter_besuch) VALUES ('$realip',$jetzt)";
mysql_query($ins) OR die(mysql_error());
// Counter erhöhen
$sqlc = "UPDATE counter SET letzter_besuch = letzter_besuch+1 WHERE ipadresse='zaehlerstand'";
mysql_query($sqlc) OR die(mysql_error());
}
// Aktuellen Counter lesen und anzeigen
$sqlc = "SELECT letzter_besuch FROM counter WHERE ipadresse='zaehlerstand'";
$ergc = mysql_query($sqlc);
$rowc = mysql_fetch_assoc($ergc);

echo 'Anzahl Besucher bisher '.$row['letzter_besuch'];
?>

(Autor: WolfgangWolfgang), Eingetragen am 30.07.2008


Kommentare (1)

Sven kommentierte am 31.12.2011 um 14:04 Uhr

hi, da ist ein kleiner fehler auf deiner seite! am ende des tutorials steht diese zeile: echo 'Anzahl Besucher bisher '.$row['letzter_besuch']; an dem row fehlt ein c, sonst wird immer die letzte gespeicherte Zeit ausgegeben. mit dem rowc funktioniert es wunderbar! vlg Sven

Schreib ein Kommentar

Name
Mail
Webseite
Kommentar