| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

30-09-2001, 20:09
|
|
Mosef
Newbie
|
|
Registriert seit: Apr 2001
Beiträge: 11
|
|
Hi,
folgenden Code benutze ich um klicks zu zählenund zu dokumentieren.
Nebenbei alles hier gesammelt.
Aber dielogs werden schnell grösser!
Kann mir jemand schreiben, wie ich einen sperre für dauerklicker reinkriege?
habe bereits mehrere beiträge zu den verschiedenen methoden gelesen, aber bin mir nicht sicher!!
<?php
require "config.php";
$mysql_link = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
$sql = "UPDATE $mysql_table SET reinklick=reinklick+1 WHERE id = '$id'";
$insert = mysql_db_query($mysql_base, $sql, $mysql_link);
mysql_close($mysql_link);
}
if ( isset( $id)) {
$ref = dirname(__FILE__)."/referer/$id";
if (!file_exists($ref)) {
$fp = fopen($ref, "w");
fwrite($fp, "");
}
if ($REMOTE_ADDR == "") $ip = "IP-Adresse";
else $ip = $REMOTE_ADDR;
if ($HTTP_USER_AGENT == "") $user_agent = "wat";
else $user_agent = $HTTP_USER_AGENT;
if ($HTTP_REFERER == "") $referer = "Keine Herkunftsadresse";
else $referer = $HTTP_REFERER;
$date = gmdate($date_format);
$log = "|$date|$id|$referer|$ip|$user_agent\n";
if($fd = @fopen($ref, "a")) {
fputs($fd, $log);
fclose($fd);
} }
header("Location: $mainurl");
?>
|

01-10-2001, 07:16
|
|
JoelH
Registrierter Benutzer
|
|
Registriert seit: Jul 2001
Beiträge: 2.740
|
|
in welchen intervallen sollen sie denn gesperrt sein ?
Naja ich würde einfach eine Tabelle anlegen mit den IPs der letzten 10 sec. (ist beliebig, je nach Sperrzeit) und wenn dann eine IP wiederkehrt dann wird sie nicht gezählt, ist natürlich kein floodingschutz aber immerhin wird der klick nicht gezählt.
|

01-10-2001, 21:23
|
|
Mosef
Newbie
|
|
Registriert seit: Apr 2001
Beiträge: 11
|
|
Die Sperrzeit ist egal, aber so um die 2h sollten es schon sein.
Hat jemand noch eine bessere Idee??
habs jetzt so gelöst--->
<?php
// Adminbereichseinstellungen übernehmen
require "config.php";
// ID ermitteln
if ( isset( $id)) {
//Pfad zur Logdatei bestimmen
$ref = dirname(__FILE__)."/referer/$id";
// Existenz überprüfen ==> falls nicht vorhanden erstellen
if (!file_exists($ref)) {
$fp = fopen($ref, "w");
fwrite($fp, "");
}
// Anzahl der Einträge ermitteln und den letzten auslesen
$file_content = file ($ref);
for ($i=0; $i<count($file_content);$i++)
$data= explode ('|', $file_content[$i]);
$Var1 = $data[1];
$Var2 = $data[2];
$Var3 = $data[3];
$Var4 = $data[4];
$Var5 = $data[5];
// IP-Adresse mit der zuletzt gespeicherten vergleichen und die Einstellung im Adminbereich überprüfen
if (($REMOTE_ADDR != $data[4]) || ($IP_Sperre != "an")) {
$mysql_link = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
$sql = "UPDATE $mysql_table SET reinklick=reinklick+1 WHERE id = '$id'";
$insert = mysql_db_query($mysql_base, $sql, $mysql_link);
mysql_close($mysql_link);
// Daten zum Speichern in der Log-datei feststellen und speichern
$date_format = "H:i:s, d/M/Y";
if ($REMOTE_ADDR == "") $ip = "IP-Adresse";
else $ip = $REMOTE_ADDR;
if ($HTTP_USER_AGENT == "") $user_agent = "wat";
else $user_agent = $HTTP_USER_AGENT;
if ($HTTP_REFERER == "") $referer = "Keine Herkunftsadresse";
else $referer = $HTTP_REFERER;
$date = date($date_format);
$log = "|$date|$id|$referer|$ip|$user_agent\n";
if($fd = @fopen($ref, "a")) {
fputs($fd, $log);
fclose($fd);
} }}
// Zur Chartsliste
header("Location: $mainurl");
?>
Oder dauert das zu lange???
mfg
Mosef
|

02-10-2001, 12:53
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Das Problem ist wohl weniger dass es zu lange dauert, als dass du Probleme bekommst, wenn zwei Leute gleichzeitig auf das Skript zugreifen.
Außerdem fehlen da geschweifte Klammern um die Schleife.
Da du anscheinend eine DB zur Verfügung hast, würde ich die auch nutzen. Erstelle folgende Tabelle:
CREATE TABLE ZUGRIFF (
IP varchar(15) NOT NULL,
ZEIT datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
PRIMARY KEY (IP)
);
Um IPs zu sperren, packst du einfach einen Datensatz mit den IPs in die Tabelle, ohne eine ZEIT anzugeben.
Mit der folgenden Abfrage kannst du sogar komplette IP-Gruppen sperren: 192.% sperrt alle IPs, die mit 192. anfangen.
Code:
//IP-Sperre abfragen:
$q = mysql_query ("select * from ZUGRIFF
where '$REMOTE_ADDR' like IP
and ZEIT='0000-00-00 00:00:00'");
if (mysql_num_rows($q)) $IP_SPERRE=true;
//Counter erhöhen?
$q = mysql_query ("select ZEIT from ZUGRIFF where IP='$REMOTE_ADDR'");
$ok = true;
if ($t = mysql_fetch_row($q))
{
if (date('Y-m-d h:i:s', time()+7200) <= $t[0])
$ok = false;
}
if ($ok)
{
$date = date('Y-m-d H:i:s');
if ($t)
mysql_query ("update ZUGRIFF set ZEIT='$date' where IP='$REMOTE_ADDR'");
else
mysql_query ("insert into ZUGRIFF (IP,ZEIT) values ('$REMOTE_ADDR', '$date')");
//jetzt den Counter hochzählen
(mußt du noch einbauen)
}
|

27-09-2002, 15:16
|
|
creative4web
Newbie
|
|
Registriert seit: Feb 2002
Beiträge: 119
|
|
Ein Nachzügler kommt :)
Hallo,
hab den Code gerade mal ausprobiert. Funzt alles wunderbar. Wie kann ich jetzt eine Zeit eintragen die $ok wieder auf true setzt. Z.B einen Tag oder eine Stunde ??
Kann mir da jemand helfen....
THANX A LOT
|

02-10-2002, 21:11
|
|
creative4web
Newbie
|
|
Registriert seit: Feb 2002
Beiträge: 119
|
|
Nach oben schieb :)
Hallo zusammen,
hat jemand vielleicht doch ne Idee ??
THANX A LOT
|

03-10-2002, 11:52
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
time()+7200
da versteckt sich das "jetzt + 7200 Sekunden" = "jetzt + 2 Stunden"
Mach draus, was du gerne hättest.
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|