Ip Adresse nach Formulareingabe auf Richtigkeit prüfen
IP Adresse nach Eingabe im formular prüfen
Hallo
Ich habe ein Formular mit einem Feld "IP-Adresse", nun schicke ich die eingegebene IP zur Datenbank, indem ich den submit button drücke, klappt alles wunderbar.
Nun kann ich leider auch eine IP Adresse die so aussieht (1921.12.1234.54) zur DB senden, was natürlich dann keine IP mehr ist.
Der Datentyp in der Datenbank ist VARCHAR(15), Frage:
Ist der datentyp richtig gewählt ?
Er ist begrenzt auf 15 Stellen, was ja auch Sinn macht.
Wie kann ich die Eingabe der IP im Formular einer Prüfung unterziehen, die mir prüft ob:
Kleiner <256
4 Werte mit . dazwischen
Man kann die Ip Eingabe natürlich auch in 4 Felder machen die mit Punkten getrennt werden
Wert1.Wert2.Wert3.Wert4
Und dann mit $IP =Wert1.Wert2.Wert3.Wert4 kombinieren.
Ist mein Lösungsansatz grundsätzlich falsch ? Oder bin ich da schon auf dem richtigen Weg ?
Freue mich auf Eure Antworten.
Gruß Burmy
Hallo
Ich habe ein Formular mit einem Feld "IP-Adresse", nun schicke ich die eingegebene IP zur Datenbank, indem ich den submit button drücke, klappt alles wunderbar.
Nun kann ich leider auch eine IP Adresse die so aussieht (1921.12.1234.54) zur DB senden, was natürlich dann keine IP mehr ist.
Der Datentyp in der Datenbank ist VARCHAR(15), Frage:
Ist der datentyp richtig gewählt ?
Er ist begrenzt auf 15 Stellen, was ja auch Sinn macht.
Wie kann ich die Eingabe der IP im Formular einer Prüfung unterziehen, die mir prüft ob:
Kleiner <256
4 Werte mit . dazwischen
Man kann die Ip Eingabe natürlich auch in 4 Felder machen die mit Punkten getrennt werden
Wert1.Wert2.Wert3.Wert4
Und dann mit $IP =Wert1.Wert2.Wert3.Wert4 kombinieren.
Ist mein Lösungsansatz grundsätzlich falsch ? Oder bin ich da schon auf dem richtigen Weg ?
Freue mich auf Eure Antworten.
Gruß Burmy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45445
Url: https://administrator.de/contentid/45445
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
also grundsätzlich möglich ist es schon das alles in einem string zu platzieren. Mit php kannst du mit Strings viel machen, die Punkte auslesen und schauen, ob sie an der richtigen Stelle sind usw.
Aber ich denke der einfachere Weg ist 4 Felder als Int zu erstellen, diesen dann ein maximalwert von 255 zuzuweisen.
mfg, brc
also grundsätzlich möglich ist es schon das alles in einem string zu platzieren. Mit php kannst du mit Strings viel machen, die Punkte auslesen und schauen, ob sie an der richtigen Stelle sind usw.
Aber ich denke der einfachere Weg ist 4 Felder als Int zu erstellen, diesen dann ein maximalwert von 255 zuzuweisen.
mfg, brc
Ich meine die Datenbankengine prüfen zu lassen, ob die Werte korrekt sind ist (aus Ressourcensicht) der falsche Weg. Besser wäre die geposteten Daten durch PHP auf Korrektheit prüfen zu lassen und falsche Werte erst gar nicht an die DB zu übergeben sondern erneut das Formular senden mit einer Fehlermeldung.
Wenn die IP mit einem einzelnen String übergeben wird reicht ein einfaches explode um die vier Zahlen in ein Array zu schreiben. Danach kann ein noch einfacheres if testen, ob alle vier im gültigen Bereich liegen. Wenn ja dann wird die DB angesprochen, wenn nicht zurück zum Absender...
Manuel
Wenn die IP mit einem einzelnen String übergeben wird reicht ein einfaches explode um die vier Zahlen in ein Array zu schreiben. Danach kann ein noch einfacheres if testen, ob alle vier im gültigen Bereich liegen. Wenn ja dann wird die DB angesprochen, wenn nicht zurück zum Absender...
Manuel
Ich wette mit dir, dass ne -1.-1.-1.-1 geht :D
na sowas ?
na sowas ?
<?php
$IP1 = "-1.-1.-1.-1";
$IP2 = "222.457.110.99";
function IP($IP) {
if (is_string($IP))
{
$part = preg_split('/\./', $IP, -1, PREG_SPLIT_OFFSET_CAPTURE);
if ($part <= 255 && $part[1] <= 255 && $part[2] <= 255 && (isset($part[3]) && $part[3] <= 255))
{ //echo $part." <= 255 && ".$part[1]." <= 255 && ".$part[2]." <= 255 && (isset(".$part[3].") && ".$part[3]." <= 255";
return "TRUE";
}
}
return "FALSE";
}
echo "$IP1 = ".ip($IP1);
echo "<BR>";
echo "$IP2 = ".ip($IP2);
?>
Hallo,
vielleicht nicht direkt eine Antwort auf das Problem, aber soll zufällig die IP-Adresse des Clients gespeichert werden? Wenn dem so ist, kann man sie einfach mit $_SERVER['REMOTE_ADDR'] auslesen und in der Datenbank speichern, die 1. richtiges Format hat und 2. vom Benutzer nicht so einfach gefälscht werden kann.
Dies kommt jedoch darauf an, um welche IP-Adresse es sich handelt, u. U. ist dieser Lösungsvorschlag in diesem Falle völlig unbrauchbar.
Gruß,
Ahnenforscher
vielleicht nicht direkt eine Antwort auf das Problem, aber soll zufällig die IP-Adresse des Clients gespeichert werden? Wenn dem so ist, kann man sie einfach mit $_SERVER['REMOTE_ADDR'] auslesen und in der Datenbank speichern, die 1. richtiges Format hat und 2. vom Benutzer nicht so einfach gefälscht werden kann.
Dies kommt jedoch darauf an, um welche IP-Adresse es sich handelt, u. U. ist dieser Lösungsvorschlag in diesem Falle völlig unbrauchbar.
Gruß,
Ahnenforscher