IP Bann System

Hallo,
ich habe mir mal ein IP Bann script mal rausgesucht und möchte das verändern.

Da ich mir es zu blöd ist, die IP’s von Hand in die DAtei zu schreiben, wollte ich das ganze mit einer effizienten online-Lösung Handhaben:
Eine IP wird in einer Datenbank eingespeichert. Die Datenbank wird abgefragt und in eine Variable gepackt.
So nun sollte man eigentlich eine Meldung bekommen, dass man gebannt worden ist. Hier erstmal das Script:
[PHP]

<?php $userIP = $_SERVER['REMOTE_ADDR']; $aUserIP = explode(".", $userIP); $connection = mysql_pconnect("localhost","Kica","******"); mysql_select_db("Kica"); $banned = false; $abfrage = "SELECT * FROM bann ORDER BY ip"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $bannIP = $row->ip. $bannedIP = array(); $bannedIP[] = $bannIP; foreach($bannedIP as $ip){ $aBanIP = explode(".", $ip); for($i = 0; $i < 4; $i++){ if(($aBanIP[$i] == $aUserIP[$i]) or $aBanIP[$i] == "*"){ $countPart++; } } if($countPart >= 4){ $banned = true; } $countPart = 0; } if($banned){ echo "Sorry, du hast gegen die Regeln verstoßen und bist gebannt."; exit; } // content } ?>

[/PHP]Ich habe mal die IP’s ausgeben lassen. Funktioniert einwandfrei, nur mit einem hässlichen „Array“ dahinter.
Da liegt wohl das Problem?

Freue mich schon auf Hilfe :smiley:

Du kannst auch direkt per Mysql Strings splitten, sodass du auch nur die ersten x Stellen im String miteinander vergleichen kannst. Denke das wäre effektiver hier. Dann musst du dir auch keine probleme mehr um das PHP Script machen. Editiere gleich den Post hier. Mit der Mysql Funktion die du brauchst :wink:


Edit:

http://dev.mysql.com/doc/refman/5.1/de/string-functions.html

Such mal nach LEFT. Sollte dir weiterhelfen :slight_smile:

Ich sollte noch Anmerken, dass ich ein neuer Hase in Sachen PHP bin, und somit fast nur Bahnhof verstanden habe oO

Ich frage mal anders. Denn meine Methode mit dem Left hätte eh nicht funktioniert.
Wo hapert es denn bei deiner Methode?
Und als Tipp: Lass dir zwischen durch doch einfach mal ein paar Werte ausgeben, dann siehst du ob das alles passt oder nicht :slight_smile:
Als Beispiel:
[php]

<?php $userIP = $_SERVER['REMOTE_ADDR']; echo "User Ip ist: ".$userIp."
"; $aUserIP = explode(".", $userIP); .. $bannIP = $row->ip. echo "Banned Ip: ".$bannIp." und User Ip: ".$userIp."
"; $bannedIP = array(); for($i = 0; $i < 4; $i++){ echo "Ist ".$aBanIP[$i]." == ".$aUserIP[$i]; if(($aBanIP[$i] == $aUserIP[$i]) or $aBanIP[$i] == "*"){ echo " -> Ja ist es"; $countPart++; } } echo "
"; if($countPart >= 4){ echo "Account ist gebannt
"; $banned = true; } echo "

"; $countPart = 0; ?>

[/php]So hast du eine komplette Übersicht, was alles durchgelaufen wird. Und so kriegst du dann jeden Schritt mit. teste es einfach mal aus :wink: