Geht etwas einfacher, wobei wie in deinem Code Voraussetzung ist, dass immer ein Port angegeben ist:
list($ip, $port) = explode(":", $_POST['Proxy']);
$ip_arr = explode('.', $ip);
Ja, es muss immer ein Port angegeben sein. Habs im neuen Code berücksichtigt.
Kennst du das Kurzschluss-Verfahren? Wenn für einen booleschen Ausdruck bereits feststeht, dass der Rest am Ergebnis nichts mehr ändern kann, wird er nicht weiter ausgewertet.
if ($ip_arr[0]<=255 && $ip_arr[1]<=255 && $ip_arr[2]<=255 && $ip_arr[3]<=255 && count($ip_arr) <= 4 &&
Hab ich verstanden, wenn 1 schon murks ist ist der Rest auch murks ;)
Du solltest hier zuerst auf die Länge 4 testen, und zwar nicht nur kleiner oder gleich, sondern genau 4. Wenn das nicht der Fall ist, kann sich PHP den Rest sparen und greift auch nicht auf dann nicht vorhandene Elemente in $ip_arr zu (spart Notice-Meldungen).
Im neuen Code brücksichtigt.
is_numeric($ip_arr[0]) && is_numeric($ip_arr[1]) && is_numeric($ip_arr[2]) && is_numeric($ip_arr[3]) && is_numeric($port) && $port <= 9999 &&
Als zweites ist die is_numeric()-Prüfung sinnvoll. is_numeric() lässt aber auch Zahlen in ungewünschter Darstellung durch, wesewgen es nur begrenzt sinnvoll ist. Hier würde ich dann doch zu einem Regexp greifen, da der die Zeichen in einem Rutsch prüfen kann.
preg_match("!^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$!",$ip_port[0])) {
Hast du ja schon drin, also kann die is_numeric-Prüfung weg. Der Port geht übrigens bis 65535. [0-9] kann zu \d abgekürzt werden, die Gruppierung kann entfallen.
Hab die Regexp mal nach vornegesetzt und die is_nummeric rausgenommen.
Oder aber, du lässt sie drin und nimmst (ohne die explode()s) die Reg-Exp-Prüfung als erste (inklusive 1-5 Ziffern für den Port). Die stellt sicher, dass nur Ziffern enthalten sind und die IP nebst Port strukturell richtig ist. Mit den Gruppen kannst du anschließend die Grenzwerteinhaltung prüfen.
Irgend wie krieg ich es nicht hin in den Regexp Code noch den Port einzubauen, hab noch mal nachgelesen aber kp, da wäre ein wenig Hilfe vll ganz gut ;)
So sieht das ganz nun aus:
list($ip, $port) = explode(":", $_POST['Proxy'.$count]);
$ip_arr = explode('.', $ip);
if(count($ip_arr) == 4){
if (preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$!",$ip)&&
$ip_arr[0]<=255 && $ip_arr[1]<=255 && $ip_arr[2]<=255 && $ip_arr[3]<=255 && $port <= 65535){
echo "Ihre IPeingabe ist in Ordnung!<br>";
}else{
echo= "Ihre IPeingabe ist fehlerhaft.<br>";
}
}else{
$errors[]= "Die IPeingabe ist nicht korrekt.<br>";
}