Counter
#1
Ich arbeite gerade an meinem Coundown Hack fürs wbb2.1. Ich will auch einen Counter einbauen aber ich weiß nicht wie ich das mit der Ip Sperre lösen soll.

Bisher habe ich es so:
User geht auf Seite
wenn die Ip schon in der Datenbank steht wird nichts gezählt
ansonsten wird die Ip in einer Tabelle eingetragen.

Soweit ist klar nur bei 10.000 Usern hätte man 10.000 Zeilen in einer Datenbank.
Ich suche nach einer möglichkeit das er nach 100 Usern allen Zeilen löscht und den Counter Stand updatet.

ich zeige einfach mal das script Wink
Code:
<?php
require ("acp/lib/config.inc.php");
  $conn1 =  mysql_connect($sqlhost,$sqluser,$sqlpassword);
     mysql_select_db($sqldb,$conn1);

$query1 = "SELECT * FROM countdown_counter";
    $result1 =  mysql_query($query1,$conn1);
    
     $gesamt1 =  mysql_num_rows($result1);

while ($zeileholen1 =  mysql_fetch_array($result1,MYSQL_ASSOC))
      {
$counter_stand = $zeileholen1["stand"];
$status = $zeileholen1["status"];
$ziel = $zeileholen1["ziel"];
$ip = $zeileholen1["ip"];
$countdown_stand_z = $counter_stand + 1;

}
if($REMOTE_ADDR!=$ip){
$query3 = "INSERT into countdown_counter(status, ziel, Bezeichnung, Bezeichnung1, Bezeichnung2, stand, ip) values('$status','$ziel','/','//','///','$countdown_stand_z','$REMOTE_ADDR')";
$result3 = mysql_query($query3,$conn1);
mysql_close($conn1);
}
else{
}
echo"Es waren schon $counter_stand Leute auf der Seite";
echo"<br>Deine IP Adresse: $REMOTE_ADDR";

?>

Irgendwie müsste es doch gehen das er immer bei 100 alle Zeilen bis auf die erste löscht und den aktuellen Counter Stand in der ersten Zeile einträgt.

(ich denke das ist nicht das beste Script aber mir soll es reichen Big Grin)
Ich würde mich freuen wenn ihr wüsstet wie ich das machen könnte.

DANKE! Smile)

EDIT: Habe es jetzt erstmal so gelöst das die Ip adressen in einer extra Datei gespeichert werden. Funktioniert auch gut nur ich weiß nicht wie ich die dann löschen kann. Ich dachte vielleicht daran die Zeit mit einzutragen damit das Script überprüft wann er die Ip löschen kann.
so in etwa
if(zeit -2std == zeit der ip adresse){
lösche diese Ip Adresse
}
else{}
  Zitieren
#2
is die beste lösung für einen counter so wie du es jetzt hast i würds gar net ändern Wink
Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".

[Bild: 10_en_btn.gif]

Computer- und Mediensicherheit - FH Hagenberg
Hagenberger Kreis zur Förderung der digitalen Sicherheit
Security Forum
  Zitieren
#3
Ich denke auch das es eine beste Lösung ist.
Nur wie bekomme ich das mit der Ip Adresse hin?

Er trägt die jetzt ein in der Tabelle IP und zählt auch nicht weiter bei doppelten Adressen. Das Problem ist halt das die Adresse auch mal gelöscht werden muss Big Grin

Es wäre gut das man z.b. einstellen kann das nach 2 Stunden gelöscht werden soll und der das dann auch macht Smile)
  Zitieren
#4
Ich habe ein Problem und zwar

Zitat:// Counter
$query19 = "SELECT * FROM countdown_counter";
$result19 = mysql_query($query19,$conn1);

$gesamt19 = mysql_num_rows($result19);

while ($zeileholen19 = mysql_fetch_array($result19,MYSQL_ASSOC))
{
$counter_stand = $zeileholen19["stand"];
$status = $zeileholen19["status"];
$ziel = $zeileholen19["ziel"];
$Beschreibung = $zeileholen19["Bezeichnung"];
$countdown_stand_z = $counter_stand + 1;

}
$query20 = "SELECT * FROM ip";
$result20 = mysql_query($query20,$conn1);

$gesamt20 = mysql_num_rows($result20);

while ($zeileholen20 = mysql_fetch_array($result20,MYSQL_ASSOC))
{
$ip = $zeileholen20["IP"];
$datum3 = $zeileholen20["Zeit"];
}
if($REMOTE_ADDR!=$ip){
$query = "UPDATE countdown_counter SET stand = $countdown_stand_z";
$result = mysql_query($query,$conn1);
$datum = date("H:iConfused",time());
$datum5 = 5;
$datum2 = $datum - $datum5;
$datum4 = $datum3 + $datum5;
$query3 = "INSERT into ip(Zeit, IP) values('$datum','$REMOTE_ADDR')";
$result3 = mysql_query($query3,$conn1);
mysql_close($conn1);
}
elseif($datum2 == $datum4){
echo"ja";
}
else{
echo"nö";
}
$datum = date("H:iConfused",time());
$datum5 = "00:05:00";
$datum2 = $datum - $datum5;
$datum4 = $datum3 + $datum5;
$counter = "Es waren schon $counter_stand $Beschreibung auf der Seite";
$IP_Adresse = "Deine IP Adresse: $REMOTE_ADDR";
echo"<br>$datum4";

Das Dick geschriebene ist das Problem. Er soll dort rechnen das Datum was in der Tabelle steht + die eingestellte IP sperre.
Bzw. Das jetzige Datum - der Ip Sperre.
Wenn das das gleiche ist soll er dann später die Einträge leeren.
Jetzt habe ich aber dort ein Problem.
Er rechnet nur mit Stunden und nicht mit Minuten..

In der Tabelle steht: 13:48:09
in der Ip Sperre steht: 00:05:00

Dann geht das aber nicht. Und wenn ich als IP Sperre 5 eingebe zeigt er mir bei echo an 18. (also 13std + 5)

wie kann ich denn das ausrechnen ?(

Danke im vorraus Smile)

edit: Er rechnet es schon richtig aus aber wie kann ich das denn besser machen und zuverlässig? Ich weiß jetzt nicht was passiert wenn es 23 Uhr ist. Ausserdem würde er es nur löschen wenn es genau 2 Stunden her ist. (ausser irgendwie mit größer und kleiner als)

mein aktueller code:
Code:
<?
$datum1 = date("H:i:s",time());
$datum10 =  date("H",time());
$datum11 =  date("i",time());
$datum12 = $datum10 * 60;
$datum = $datum12 + $datum11;
echo"$datum1<br>$datum";
?>

Ergebniss:
14:21:59
861
  Zitieren
#5
am betsen ist es glaube ich wenn du es in sekunden abspeicherst und dann bei der ausgabe einfach wieder in Minuten/Stunden umrechnest
  Zitieren
#6
dank jex-treme habe ich jetzt eine ip sperre gefunden (bei den codeschnipseln.

ess scheint sogar zu funktionieren 8o

Code:
// Counter
$query19 = "SELECT * FROM countdown_counter";
    $result19 =  mysql_query($query19,$conn1);
    
     $gesamt19 =  mysql_num_rows($result19);


while ($zeileholen19 =  mysql_fetch_array($result19,MYSQL_ASSOC))
      {
$counter_stand = $zeileholen19["stand"];
$status = $zeileholen19["status"];
$ziel = $zeileholen19["ziel"];
$Beschreibung = $zeileholen19["Bezeichnung"];
$countdown_stand_z = $counter_stand + 1;

}
$query20 = "SELECT * FROM ip";
    $result20 =  mysql_query($query20,$conn1);
    
     $gesamt20 =  mysql_num_rows($result20);
$tab = "ip";
$time_to_del = 30*60;

$diff = time()-$time_to_del;
$ip = $_SERVER['REMOTE_ADDR'];

$ver =  mysql_connect($sqlhost,$sqluser,$sqlpassword);
     mysql_select_db($sqldb,$conn1);

mysql_query("DELETE FROM `".$tab."` WHERE `Zeit` < ".$diff."");

$qdrin = "SELECT COUNT(*) FROM `".$tab."`";
$qdrin .= " WHERE `ip`='".$ip."'";
list($drin) = mysql_fetch_row(mysql_query($qdrin));

if($drin > 0) {

$query22 = "UPDATE `".$tab."` SET `Zeit`='".time()."'";
$query22 .= " WHERE `ip`='".$ip."'";
$result22 = mysql_query($query22,$conn1);


}
else{
$query111 = "INSERT INTO `".$tab."` SET";
$query111 .= " `Zeit`='".time()."',`ip`='".$ip."'";
$result111 = mysql_query($query111,$conn1);
$query = "UPDATE countdown_counter SET stand = $countdown_stand_z";
$result = mysql_query($query,$conn1);

}
$counter = "Es waren schon $counter_stand $Beschreibung auf der Seite";
$IP_Adresse = "Deine IP Adresse: $REMOTE_ADDR";

Bevor ich den Hack veröffentliche räume ich eh die Variablen auf Big Grin
Da der ganze Hack per ACP einstellbar ist frage ich mich wie ich das lösen kann:
$time_to_del = 30*60;

das heißt doch das er nach 1800 minuten löschen soll. Da müsste ich doch irgendwas einbauen wie:
$time_to_del = $acp_einstellung * 60;

?(
  Zitieren
#7
$time_to_del = 30*60; <-- sind sekunden! also 180 sekunden
  Zitieren
#8
Du meinst 1800 oder? Big Grin

Also 30 min


Ich probiere es gleich mal aus. Ginge es denn auch wenn man direkt 1800 da hin schreibt ohne 30*60? ?(
  Zitieren
#9
meinte ich ja Big Grin
normalerweise schon weil wenn du die variable aufrufst ja auch nur das ergebniss übermittelt wird
  Zitieren
#10
Danke Smile)
Werde es mal ausprobieren.

Smile
  Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste