Suchfunktion mit Wildcards

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

  • Suchfunktion mit Wildcards

    Hallo zusammen,

    ich habe mal wieder ein Problem, bei dem ich eure Hilfe brauche.
    Es geht darum, das der User diverse Daten suchen können soll. Nehmen wir mal den Fall, das Kunden gesucht werden sollen. Wenn ich nun nach dem Nachname suchen will funktioniert das auch soweit. Allerdings nur dann, wenn ich den Nachnamen genauso angebe, wie er in der DB steht.
    Schön wäre es nun, wenn man mit dem* arbeiten könnte, sprich man gibt z.B. Ma* ein und bekommt dann alle Datensätze in denen der Nachname mit Ma beginnt. Also alle Mayer, Maier usw.

    Wie kann man sowas realisieren ? So einen wirklich Ansatz habe nämlich noch nicht. Gegoogelt und gesucht habe ich schon, aber nicht wirklich was gefunden.

    Danke !


    Gruß

    Michael
    Gruß

    Michael

  • #2
    Code:
    $_POST['suchen'] = 'Bla *';
    if (strpos ($_POST['suchen'],'*'))
    {
      $search = trim (str_replace('*','', $_POST['suchen']));
      $query  = 'SELECT
                bla,
                blubb
              FROM
                blubber
              WHERE bla LIKE \\''.$search.'%\\'';
    }
    so in der art. verhindert derzeit ein '* bla';

    peter
    Zuletzt geändert von Kropff; 26.03.2009, 21:27.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      alternativ ginge auch
      Code:
      $search = str_replace('*','%', $_POST['suchen']));
      $query  = 'SELECT
                bla,
                blubb
              FROM
                blubber
              WHERE bla LIKE \\''.$search.'\\'';
      funktioniert aber nicht bei zusätzlichen leerzeichen.

      peter
      Zuletzt geändert von Kropff; 26.03.2009, 21:27.
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Guten Morgen,

        PHP-Code:
        $query "SELECT bla, blub FROM blubber WHERE bla LIKE '".strtolower($_POST['bla'])."%'"
        funktioniet auch, allerdings braucht man dann keine Wildcard mehr einzugeben, man gibt nur die Anfangsbuchstaben soweit man will ein und startet die Suche. Das Ergebnis passt zumindest.
        Gibts irgendwelche Einwände das auf diese doch recht einfache Art abzuwickeln?

        Dank und Gruß

        Michael
        Gruß

        Michael

        Kommentar


        • #5
          Bis auf die Tatsache, dass das Beispiel anfällig für SQL-Injections ist, sicher nicht.

          Naja, und natürlich ist strtolower() nur sinnvoll, wenn die zu durchsuchenden Datenfelder auch nur Kleinbuchstaben enthalten und diese genauso kodiert sind, wie die locale-Einstellungen nach denen sich strtolower() richtet. Im dümmsten Fall ist das auf den ASCII-Bereich beschränkt. Beispielsweise deutsche Umlaute und das ß fielen dann unter den Tisch.

          LIKE akzeptiert (zumindest in MySQL) sowohl Groß- als auch Kleinschreibung.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            Der Charakterset wird ganz am Anfang auf utf-8 gestellt und alles was in die DB kommt wird auf Kleinbuchstaben konvertiert.
            Somit bliebe eigentlich noch das Problem der injections und das kriege ich ja mit mysql_real_escape_string.


            Gruß

            Michael
            Gruß

            Michael

            Kommentar

            Lädt...
            X