Vergleich ist es ein gültige zahl oder ein string
Sascha
- php
0 romy0 Chipsy0 Andreas Korthaus0 sascha
Hallo Forum!
Ich habe ein kleines Problem mit der logik *dreh fast durch*.
Es geht immernoch um ein Eingabefeld. In dieses Feld wird entweder ein 'Gerätename' oder eine 'IP-Addresse' (www.xxx.yyy.zzz) eingeben. Dieser Eingabewert wird Übertragen und vom script verarbeitet.
Nun zum Problem:
Es muss voher vom Skript unterschieden werden, ob es sich hierbei um eine 'gültige' IP oder einen Gerätenamen handelt, bevor in der Datenbank überprüft werden kann ob der Eintrag überhaupt Existent ist.
Die Abfrage s.u. kann mein Problem nicht lösen, da ab einen bestimmte IP-Addresse die Umrechnung in long Negativ wird.. und greift die Abfrage falsch.
Kann mir jemand sagen wie ich es geschickter Anstellen kann, und überprüfen kann ob es sich um einen 'normalen' String handelt oder eine IP(www.xxx.yyy.zzz).
vielen dank für eure hilfe
der hilflose sascha
[...]
// $tmp = is_numeric(ip2long($efeld));
// $tmp = ip2long($efeld);
$tmp2= is_numeric($efeld);
if($tmp2>0)
{
$bool = isIPExist($efeld);
}
else
{
$bool = isHostExist($efeld);
}
if($bool>0)
{
formTwo();
}
else
{
echo("Eintrag '<b>$efeld</b>' konnte nicht in der Datenbank gefunden werden!<br>
Bitte erneute Eingabe");
formOne();
}
Achso die Funktionen isIPExist()usw. geben bei true '1' und bei false '-1' zurück.
HI,
warum fragst Du nicht einfach ab, ob der String drei Punkte enthält und wenn die das nicht reicht, ob die Zeichen dazwischen Zahlen sind.
xxx.yyy.zzz.www
$neu = explode(".",$deineingabestring)
if(count($neu) == 3) {
//Abfragen ob die werte zwischen den Punkten zahlen sind
// Zugriff it $neu[0], $neu[1] usw.
}
ansonsten ist es ein Gerätename
ciao
romy
Hallo romy,
$neu = explode(".",$deineingabestring)
if(count($neu) == 3) {
da muss stehen '...==4', weil explode() ja am Punkt trennt und dann 4 Teile Zurückgibt
//Abfragen ob die werte zwischen den Punkten zahlen sind
das könnte man mit regulären Ausdrücken machen z.B. [0-9]{1,3} für jeden Teil. (kann man natürlich auch in einen Ausdruck packen, aber so genau kenne ich mich mit denen nicht aus :-))
alternativ könnte man auch
if(substr_count($deineingabestring,".")==3){ echo "IP"; }
else { echo "Gerät"; }
verwenden.
Grüße aus Nürnberg
Tobias
Hi Tobias,
$neu = explode(".",$deineingabestring)
if(count($neu) == 3) {
da muss stehen '...==4', weil explode() ja am Punkt trennt und dann 4 Teile »» Zurückgibt
die Zaunslatten machen mich immer ganz wirr, aber Du hast natürlich recht
ciao
romy
Hallo,
und noch mehr Senf: :-))
1. $ip=explode(".",$leitweg);
2. if(count($ip)==4)
3. $ipnum=intval($ip[0];
if($ipnum>0 and $ipnum<255)
4. ...Für jedes Oktett den erlaubten Bereich überprüfen.
5. wenn alles sitmmt, ist es eine gültige IP.
Man könnte natürlich auch ganz brutal vorgehen und einfach eine Socketfunktion auf die IP ausführen, nachdem man festsgestellt hat, dass eine sein könnte. Da bekommt man dann eine Fehlernummer und die gibt einem Aufschluss darüber, ob es eine war...
Oder?
Grüße
Tom
Hi
[...]
(Senf *g*)
Man könnte natürlich auch ganz brutal vorgehen und einfach eine Socketfunktion auf die IP ausführen, nachdem man festsgestellt hat, dass eine sein könnte. Da bekommt man dann eine Fehlernummer und die gibt einem Aufschluss darüber, ob es eine war...
Oder?
Jein, denn die könnte man in der Form beeinflussen, alsda man eine fremde und gültige nimmt, und die kann ja u.U. so gewählt sein, dass das Script annehmen muss, sie sei korrekt, ist sie aber nicht, andererseits aber auch _falsch_, man steht also vor dem Problem der menschlichen Komponente: Wenn der Anwender zu doof ist hilft dir die tollste Abfrage nix.
Fabian
warum verarbeitest du die Information nicht als String und prüfst, ober der String nur 3 Punkte hat, wenn ja die einzelnden abschnitte zwischen den Punkten Zahlen sind, mit max 3 Stellen?
wenn die prüfung false liefert, prüfe auf Gerät
wenn true, prüfe ob die IP-Adresse bei dir existiert!
chipsy
Hallo!
Vielleicht sowas:
unset($ip);
unset($typ);
unset($name);
if (preg_match("/[1]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$/"),trim($_POST['efeld'])) {
$ip = trim($_POST['efeld']);
$typ = "ip";
}
else if (prüfung_ob_gültiger_gerätename(trim($_POST['efeld']))) {
$name = trim($_POST['efeld']);
$typ = "name";
}
else {
echo "ungültige Eingabe";
exit;
}
// hier dann DB-Abfrage...
So würde ich das in etwa machen.
Grüße
Andreas
0-9 ↩︎
Hallo nochmal!
so viel resonanz.. da muss ich erstmal tüffteln gehen ;-)
vielen dank erstmal euch allen
gruß
Sascha