23.05.2007, 11:22
Textcounter mit IP Sperre (MySQL)
Ein Textcounter mit MySQL ist die schwierigste Form eines Counters aber immerhin noch die beste Bei der Cookie Methode kann man mit deaktivierten Cookies die Sperre umgehen mit einer MySQL-Datenbank hingegen wird dieses zunehmend erschwert leider gibt es eine Schwachstelle da dieses Script die IP-Adresse des benutzers speichert könnte sich der Benutzer mit einen Reconnect eine neue IP-Adresse beim provider holen und er kann wieder einen Count produziern eine andere Variante ist mit PHP nicht Möglich. man könnte das sicher vereinen einen MySQL, Cookie IP-Sperren Counter aber diesen Aufwand sind die meisten Scripte nicht wert.
Ich habe den kompletten Sourcecode geschrieben und ausgiebig kommentiert.
Ihr solltet über Grundlegende Kentnisse PHP und MySQL verfügen.
Wir führen zunächst einen SQL-Befehl in phpMyAdmin oder ähnlichen aus.
Kommen wir zum eigentlichen Script, hier müsst Ihr zunächst die MySQL-Verbindungsdaten eures Servers eintragen.
[code=php]<?php
#############################################
# Netccode Forum :: PHP/Tutorial. #
# Textcounter mit IP Sperre (MySQL) #
#############################################
# MySQL Host
$db_host = "";
# MySQL Benutzer
$db_user = "";
# MySQL Passwort
$db_pass = "";
# MySQL Tabelle
$db_data = "";
# Wir ermitteln die IP-Adresse des benutzers.
$ip = $_SERVER[REMOTE_ADDR];
# Zeit wann Alte Daten gelöscht werden sollen
$diff = time()-86400; // Ergibt aktuelle Zeit - 24 Std.
# Verbindung zur Datenbank herstellen und Tabelle auswählen.
$ver = mysql_connect("$db_host", "$db_user", "$db_pass");
mysql_select_db("$db_data");
# Zunächst werden alte MySQL Werte gelöscht die schon länger als 24 Std her sind.
mysql_query("DELETE FROM `tutorial_counter_sperre` WHERE time < ".$diff."");
$result = mysql_query("SELECT * FROM `tutorial_counter_sperre` WHERE `ip`='".$ip."'");
if(mysql_num_rows($result))
{
# IP-Adresse steht in Datebank.
}
else
{
# IP-Adresse steht noch nicht in Datenbank.
mysql_query("INSERT INTO `tutorial_counter_sperre` SET time='".time()."',`ip`='".$ip."'");
mysql_query("UPDATE `tutorial_counter` SET wert = (wert + 1)");
}
# Auslesen des aktuellen Counterstandes.
$ausgabe = mysql_fetch_assoc(mysql_query("SELECT * FROM `tutorial_counter`"));
# Aktuelle Counterstand wird ausgegeben
echo $ausgabe["wert"];
# Wir schließen die MySQL-Verbindung wieder.
mysql_close($ver);
?>[/code]
Ich hoffe es hat euch wie immer spaß gemacht und Feedback ist wie immer erwünscht ;-)
Ein Textcounter mit MySQL ist die schwierigste Form eines Counters aber immerhin noch die beste Bei der Cookie Methode kann man mit deaktivierten Cookies die Sperre umgehen mit einer MySQL-Datenbank hingegen wird dieses zunehmend erschwert leider gibt es eine Schwachstelle da dieses Script die IP-Adresse des benutzers speichert könnte sich der Benutzer mit einen Reconnect eine neue IP-Adresse beim provider holen und er kann wieder einen Count produziern eine andere Variante ist mit PHP nicht Möglich. man könnte das sicher vereinen einen MySQL, Cookie IP-Sperren Counter aber diesen Aufwand sind die meisten Scripte nicht wert.
Ich habe den kompletten Sourcecode geschrieben und ausgiebig kommentiert.
Ihr solltet über Grundlegende Kentnisse PHP und MySQL verfügen.
Wir führen zunächst einen SQL-Befehl in phpMyAdmin oder ähnlichen aus.
Code:
CREATE TABLE `tutorial_counter` (
`wert` int(11) NOT NULL default '0'
)
INSERT INTO `tutorial_counter` (`wert`) VALUES
(1)
CREATE TABLE `tutorial_counter_sperre` (
`ip` varchar(15) collate latin1_german1_ci NOT NULL default '0',
`time` int(15) NOT NULL default '0'
)
Kommen wir zum eigentlichen Script, hier müsst Ihr zunächst die MySQL-Verbindungsdaten eures Servers eintragen.
[code=php]<?php
#############################################
# Netccode Forum :: PHP/Tutorial. #
# Textcounter mit IP Sperre (MySQL) #
#############################################
# MySQL Host
$db_host = "";
# MySQL Benutzer
$db_user = "";
# MySQL Passwort
$db_pass = "";
# MySQL Tabelle
$db_data = "";
# Wir ermitteln die IP-Adresse des benutzers.
$ip = $_SERVER[REMOTE_ADDR];
# Zeit wann Alte Daten gelöscht werden sollen
$diff = time()-86400; // Ergibt aktuelle Zeit - 24 Std.
# Verbindung zur Datenbank herstellen und Tabelle auswählen.
$ver = mysql_connect("$db_host", "$db_user", "$db_pass");
mysql_select_db("$db_data");
# Zunächst werden alte MySQL Werte gelöscht die schon länger als 24 Std her sind.
mysql_query("DELETE FROM `tutorial_counter_sperre` WHERE time < ".$diff."");
$result = mysql_query("SELECT * FROM `tutorial_counter_sperre` WHERE `ip`='".$ip."'");
if(mysql_num_rows($result))
{
# IP-Adresse steht in Datebank.
}
else
{
# IP-Adresse steht noch nicht in Datenbank.
mysql_query("INSERT INTO `tutorial_counter_sperre` SET time='".time()."',`ip`='".$ip."'");
mysql_query("UPDATE `tutorial_counter` SET wert = (wert + 1)");
}
# Auslesen des aktuellen Counterstandes.
$ausgabe = mysql_fetch_assoc(mysql_query("SELECT * FROM `tutorial_counter`"));
# Aktuelle Counterstand wird ausgegeben
echo $ausgabe["wert"];
# Wir schließen die MySQL-Verbindung wieder.
mysql_close($ver);
?>[/code]
Ich hoffe es hat euch wie immer spaß gemacht und Feedback ist wie immer erwünscht ;-)