Sascha: Vergleich ist es ein gültige zahl oder ein string

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.

  1. 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

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
    1. 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

      1. 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

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        ->Alles ist gut wenn es aus Schokolade ist
        1. 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

          1. 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

  2. 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

  3. 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


    1. 0-9 ↩︎

  4. Hallo nochmal!

    so viel resonanz.. da muss ich erstmal tüffteln gehen ;-)

    vielen dank erstmal euch allen

    gruß

    Sascha