IP-Adressen täglich löschen

D

DanBue

Also eigentlich geht es mehr um MySQL als PHP aber ich habe kein passendes Topic gefunden.
Und zwar möchte für eine Umfrage und ein Gästebuch eine Ip-Adressen-Sperre einbauen. Da sich die meisten IP-Adressen ja täglich ändern, soll diese Sperre für einen Tag gültig sein. Kann ich in MySQL direkt einstellen, dass die gepeicherten Daten täglich um z.B. 1:00 Uhr gelöscht werden sollen?

Daniel
 
Nicht dass ich wüsste...
Aber du kannst das Problem anders lösen.

Du machst dir eine Tabelle "vote_ip" mit den Spalten "ip" und 'timestamp'.
"ip" machst du als Index.

Wenn jemand votet, guckst du in der Tabelle, ob seine IP-Adresse heute bereits gevotet hat.
Code:
 SELECT COUNT(*) FROM vote_ip WHERE ip='12.5.8.231' AND 'timestamp' <  (UNIX_TIMESTAMP() - 60*60*24 )
Hat sie nicht trägt, du seine ip in die tabelle ein inklusive des aktuellen timestamps.
Code:
REPLACE INTO vote_ip ('ip','timestamp') VALUES('157.152.175.44',UNIX_TIMESTAMP )
Damit mit die Tabelle nicht zu voll wird, kannst du sie mit diesem Befehl leeren ( jeden Monat oder so ):
Code:
DELETE * FROM vote_ip WHERE 'timestamp' < (UNIX_TIMESTAMP() - 60*60*24 )
 
Wahrscheinlich werde ich das wohl machen müssen. Obwohl es mir nicht so richtig gefällt, weil ich manuell den Aufruf machen müsste um die Tabelle zu löschen oder jedesmal bei einen Useraufruf ausführen lassen und das wäre viel zu lästig für den User. Schade.
Trotzdem Danke. Wenn Jemand weiß, wie man das automatisch machen kann bitte melden!
 
Obwohl es mir nicht so richtig gefällt, weil ich manuell den Aufruf machen müsste um die Tabelle zu löschen oder jedesmal bei einen Useraufruf ausführen lassen und das wäre viel zu lästig für den User. Schade.
Trotzdem Danke. Wenn Jemand weiß, wie man das automatisch machen kann bitte melden!
Da hast du es doch o_O Der Code muss nicht wirklich manuel augerufen werden, bau ihn einfach ins Gästebuch bzw. in das Voting ein, oder wenn jemand was Eintragen will...
Dann wird er jedesmal aufgerufen wenn jemand ins Gästebuch schaut bzw. schreibt. Hat für den User überhaupt keinen Effekt.
 
Einen Cron Job halte ich für diesen Fall für unnötig, da das Problem auch anders gelöst werden kann.
 
Da hast du es doch o_O Der Code muss nicht wirklich manuel augerufen werden, bau ihn einfach ins Gästebuch bzw. in das Voting ein, oder wenn jemand was Eintragen will...

Ich meinte das löschen jeden Monat. Wenn ich das da mit einbauen würde, wäre das sicherlich schlecht für die Performance.


Aber irgendwie klappt das nicht so ganz. Meinte Tabelle "saveip" hat folgende Struktur
PHP:
`ip` varchar(128) collate latin1_general_ci NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`ip`)

Jetzt will ich, dass der User nur alle 2 Stunden einen neuen Aufruf machen kann.

PHP:
$ip = getenv("REMOTE_ADDR");
$zeitlimit= time()-(60*60*2);
$sql = "SELECT COUNT(*) FROM saveip WHERE ip='$ip' AND time >'$zeitlimit'";
$user = mysql_fetch_row(mysql_query($sql));
if($user[0]==0){//Daten werden hochgeladen und IP gespeichert}
else{//fehlermeldung }

So wenn ich jetzt aber die Zeit mal etwas zurückdrehe in meiner Datenbank berücksichtigt er meine zweite Bedingung " time >'$zeitlimit' " so wie es aussieht nicht, weil er immer die Fehlermeldung ausgibt.
 
Nimm die einfachen Anführungszeichen ( die um $zetilimit drumherum ) weg:
Code:
SELECT COUNT(*) FROM saveip WHERE ip='$ip' AND time >$zeitlimit
 
Nimm die einfachen Anführungszeichen ( die um $zetilimit drumherum ) weg:

Habs Probiert. Allerdings ist das anscheinend nicht der Fehler gewesen, denn die Zeit wird weiterhin nicht berücksichtigt. Das der Datentyp in der Tabelle Timestamp ist, ist aber richtig oder welchen Datentyp muss ich nehmen um mit dem Unix-Timestamp der Funktion time() zu vergleichen?

> Ich habe es jetzt ich muss noch die Funktion UNIX_TIMESTAMP() benutzen. Da ich mich noch als Anfänger bezeichnen würde bitte ich diesen Fehler zu verzeihen. Das ganze sieht jetzt so aus:
PHP:
$ip = getenv("REMOTE_ADDR");
$zeitlimit= time()-(60*60*2);
$sql = "SELECT COUNT(*) FROM ipguestbook WHERE ip='$ip' AND UNIX_TIMESTAMP(time) > '$zeitlimit'";
$user = mysql_fetch_array(mysql_query($sql));
if(current($user) == 0)
   //EIntrag wird hochgeladen
else
   //Fehlermeldung
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück