Nach String-Teilen in MySQL suchen

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

  • Nach String-Teilen in MySQL suchen

    Hallo liebe Community,
    ich brauche hilfe bei der erstellung einer Blacklist mit MySQL.
    Die verbotenen Namen stehen in der Datenbank unter 'names'.
    So, jetzt das Problem:
    Ich kann zwar wenn sich jemand registriert nach den Werten suchen, z.B. jemand versucht sich anzumelden mit dem Namen "Bösewicht".
    Jetzt sucht die Seite natürlich in der blacklist nach dem Wort Bösewicht und wenn es gefunden wird wird die Registrierung verweigert.
    Aber was ist wenn in meiner Blacklist nur das Wort "Böse" drin steht?
    Wie kann ich php sagen dass es auch den Namen nicht zulassen soll wenn nur Wortteile drin stehen?

    PHP-Code:
     
    $nickname 
    strtolower($_GET['nick']);
    $db_link mysql_connect($MYSQL_HOST$MYSQL_USER$MYSQL_PASS);

    $db_countuser mysql_query(" SELECT * FROM `blacklist` WHERE `usermail` = '%$nickname%' "
    or die(
    "Anfrage fehlgeschlagen: " mysql_error());
    $countuser mysql_num_rows($db_countuser);

    if ( 
    $countuser == "0" )
    {
        
    $status "Name ist ok!";
    }
    else
    {
        
    $status "Name ist auf der Blacklist!";

    Zuletzt geändert von Emarci; 03.04.2010, 21:49.

  • #2
    Hallo,

    willkommen im Forum.

    Du suchst nach LIKE.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Deine SQL-Abfrage ist anfällig für SQL-Injections, was eine der meist ausgenützen Sicherheitslücken sind.

      PHP: mysql_real_escape_string - Manual

      Kommentar


      • #4
        ich habe jetzt das = durch LIKE ersetzt, wenn ich aber nach [COLOR=Navy]?nick=bösewicht[/COLOR] navigiere kommt "[COLOR=DarkRed]Name ist ok![/COLOR]", obwohl das Wort "[COLOR=Navy]böse[/COLOR]" in der MySQL-blacklist ist.

        Ich werd mal im Internet weiter suchen und mich melden wenn ich was dazu gefunden habe. Wer was weis bitte sofort posten!

        Kommentar


        • #5
          Welchen Zeichensatz benutzt du für die DB-Spalte und für die DB-Verbindung? Ich vermute mal, nicht UTF-8. URLs kommen nämlich meist als UTF-8 an, werden dann aber nach meiner Vermutung als angebliches Latin an die DB übergeben. Kann das sein?
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Ich hab jetzt mal die Tabelle und die Spalte auf [COLOR=Navy]utf8_unicode_ci[/COLOR] gesetzt... funktioniert aber immer nocht nicht.

            Auch bei PhpMyAdmin findet er den Namen nur wenn es exakt gleich wie mein Suchbegriff ist.

            Muss ich vielleicht mit php jeden Wert aus MySQL auslesen und dann prüfen?
            Ich weiß auf jeden Fall dass es funktioniert weil ich es aus phpBB kenne.

            Kommentar


            • #7
              Zitat von Emarci Beitrag anzeigen
              Ich hab jetzt mal die Tabelle und die Spalte auf [COLOR=Navy]utf8_unicode_ci[/COLOR] gesetzt... funktioniert aber immer nocht nicht.
              Und was ist mit der Verbindung? Steht die vielleicht noch auf Latin?
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                irre ich mich oder kann "like bösewicht" garkein böse matchen

                umgekehrt sehr wohl

                Kommentar


                • #9
                  Jap, ich hab jetzt ein bisschen im Referenzhandbuch von MySQL gelesen.
                  Wenn ein Wert, z.B. "123456789" in einer Zeile steht kann man suchen, auch wenn man nur Teile hat, z.B. ... [COLOR=Navy]LIKE '%456%'[/COLOR] dann findet MySQL das auch, Aber umgekehrt geht das leider nicht.
                  Wenn man also nur 456 drin stehen hat und man sucht nach 123456789 (oder man hat böse in der Tabelle stehen und sucht nach bösewicht) muss man wohl leider jede Zeile auslesen und dann das mit PHP vergleichen.

                  Die umgekehrte Suche wär ne tolle Idee für die nächste MySQL Version.
                  Naja... ich schreib mal nachher das Script und poste es hier, dass andere User nicht die selben Probleme haben wie ich^^

                  Kommentar


                  • #10
                    Doch, man kann auch den Platzhalter mit in den Spalteninhalt schreiben, und dann mit LIKE quasi „umgekehrt“ suchen.
                    Dass das nicht besonders performant ist, ist natürlich klar.


                    Und dass das ganze Ansinnen von vornherein kein besonders sinnvolles ist, natürlich ebenso. Stupide Wortfilter, die einen daran hindern, etwas über sein Staat************amen zu schreiben, weil da vermeintlich was „Schmutziges“ drin steckt, sind eine nervende Ausgeburt technischer Dummheit.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar

                    Lädt...
                    X