Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] IP Adresse mit Wildcard als Filter in einer SQL Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] IP Adresse mit Wildcard als Filter in einer SQL Abfrage

    Hallo Forum,
    ich möchte ein Formular zur Datenerfassung entwerfen. Das Formular funktioniert auch schon in der Grundfassung einwandfrei. Nun möchte ich vorab die Kundennummer anhand der IP Adresse (IP Adressen sind bis auf die letzten 3 dez Stellen fix) in dieses Formular einbauen. Tabelle mit IP Adressen und Kundendaten existiert. Die IP Adresse in der Tabelle ist mit Wildcard (z.B. 127.0.0.*) als Varchar 15 eingetragen.

    Also hole ich mir die IP mit
    PHP-Code:
    $ip $_SERVER["REMOTE_ADDR"]; 
    und packe die Variable dann in meine SQL Abfrage für die Kundennummer.

    Das Ganze funktioniert auch solange die IP Adresse ohne Wildcard in der Tabelle steht.

    Meine Fragen sind nun:
    Bin ich auf dem richtigen Weg?
    Was muss ich tun damit die Wildcard als solche erkannt wird?
    Oder gibt es eine viel elegantere Lösung?

    Vielen Dank für eure Hilfe

    Lefitz

  • #2
    Das macht nicht wirklich Sinn. Du speicherst sowieso alle 15 Digits, und soweit ich weiß gibt es in MYSQL auch keine Möglichkeit, sowas durchzuziehen. Warum der Humbug mit diesem "Platzhalter"?

    Warum nicht einfach nur den Teil speichern, der dynamisch ist? Oder wenn's die komplette IP sein soll ip2long() benutzen, das gibt einen Integer mit 4 Byte und läßt sich mit long2ip() umkehren?

    Kommentar


    • #3
      Möglicherweise hilft dir das weiter:

      PHP-Code:
      // Teile der anhand der Punkte der Ip Adresse aufteilen
      $ip explode('.'$_SERVER['REMOTE_ADDR']);
      // den letzen Teil der Ip abschneiden
      $ipCut substr($_SERVER['REMOTE_ADDR'], 0, - strlen($ip[3]));

      $result mysql_query("SELECT * FROM tabelle WHERE ip LIKE '".$ipCut."%'" ); 

      Kommentar


      • #4
        Äääh - ABFRAGEN? Schande über mich, das hab ich geflissentlich übersehen. Ich dachte, es ginge ums Speichern ...

        Kommentar


        • #5
          Es gibt nur die Möglichkeit, alle gespeicherten IP-Fragmente sequentiell durchzugehen und die zu prüfende IP-Adresse in dieser Schleife zu prüfen. Man kann nicht gezielt mit der zu prüfenden IP die Wildcard-Einträge selektieren.

          Idee:
          PHP-Code:
          $gefunden false;
          $sql "SELECT ip FROM ipliste";
          $erg mysql_query($sql);
          while ( 
          $row mysql_fetch_assoc($erg) ) {
            
          $fragment str_replace('*','',$row['ip']);
            
          $laenge strlen($fragment);
            if ( 
          substr($pruef_ip,0,$laenge) == substr($fragment,0,$laenge) ) {
              
          $gefunden true;
              break;
            }
            

          Das funktioniert nur, wenn der * als Wildcard die gespeicherte IP abschließt. Wenn der auch mittendrin oder am Anfang stehen kann, dann muss man die Prüfung verfeinern.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            mal abgesehen davon,daß ich die verbindung ip<->kdnr etwas fragwürdig finde:
            Warum wird denn die Wildcard überhaupt in die db geschrieben?
            Einfach die Spalte auf varchar(11) ändern und gut ist.

            Kommentar


            • #7
              Wenn man das korrekte Wildcard-Zeichen nimmt, dann kann man auch einfach mit LIKE vergleichen.
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Wenn das % in der Needle ist, dann ja. In diesem Fall ist es im Haystack.
                [PHP]if ($var != 0) {
                $var = 0;
                }[/PHP]

                Kommentar


                • #9
                  Zitat von Wolla Beitrag anzeigen
                  Wenn das % in der Needle ist, dann ja. In diesem Fall ist es im Haystack.
                  Dann tauscht man die Reihenfolge von Needle und Haystack ...
                  [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php
                    $ip  
                    $_SERVER["REMOTE_ADDR"];
                    $ip  mysql_real_escape_string($ip);
                    $sql "SELECT * FROM ipliste WHERE '$ip' LIKE REPLACE(ip, '*', '%')";
                    ?>
                    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                    Kommentar


                    • #11
                      Das ist ja mal ne verquere Query
                      Das mit den vertauschten Argumenten hab ich vorher noch nie gesehen.
                      [PHP]if ($var != 0) {
                      $var = 0;
                      }[/PHP]

                      Kommentar


                      • #12
                        Nice one vielen Dank für eure Hilfe

                        Kommentar

                        Lädt...
                        X