Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

versuchs mal damit

where muster regexp 'test';

das findet soweit ich weiss jedes vorkommen von "test" egal ob in einem wort oder groß oder klein. soll exakt das vorkommen von z.B. "TeSt" gefunden werden gehts so:

where muster regexp binary 'test';

Geschrieben

sorry, hatte dich glaube ich eh falsch verstanden. was willst du denn nun genau. also wenn du nach "test" suchst, was soll dann gefunden werden? nur das alleinstehende wort "test", oder auch z.b. "testbogen", "testverfahren", "test123"? oder alles genannte bis auf "test" gefolgt von irgendwelchen zahlen?

vielleicht hilft ja auch die instr funktion?

where instr(muster, 'test');

Geschrieben

Hallo,

das hilft mir auch nicht so richtig weiter. Folgender Hintergrund. Ich programmiere gerade ein kleines Forum für unser Intranet und ich kann Loginnamen sperren. Z. B. den Loginnamen test. Wenn jetzt aber jemand bei der Registrierung test123 eingibt, dann wird meine bisherige SQL Abfrage keine Treffer liefern und den Loginnamen annehmen. Das möchte ich natürlich verhindern.

Jetzt möchte ich gernen eine SQL Abfrage haben, die alle möglichen Kombinationen aus test123 in der Datenbank überprüft und dann sagt das der Loginname gesperrt ist.

Frank

Geschrieben
Original geschrieben von palvoelgyi

Wir reden an einander vorbei.

Das test123 gibt ein Benutzer ein. Ich will jetzt die Benutzereingabe test123 in der Datenbank überprüfen.

Frank

worauf denn?

Geschrieben

Ich erklär es nochmal.

Ich programmiere gerade ein Forum. Dort können sich leute anmelden. Jetzt habe ich eine Tabelle wo Benutzernamen drin stehen, die nicht verwendet werden dürfen. Dort steht z. B. test drin.

Wenn jetzt ein Benutzer z.B. test123 als Benutzername eingibt. Dann soll das Skript in der Tabelle überprüfen ob der Benutzername geperrt ist. Wenn ich jetzt WHERE name LIKE "test123" mache, dann erhalte ich 0 Ergebnisse, da nur der Benutzername test gesperrt ist. Ich möchte jetzt aber alle Benutzernamen die irgendwie das Wort test drin haben sperren.

Wie muss ich jetzt eine SQL Abfrage schreiben, die mir zu test123 sagt, das der gesperrt ist, weil test in der Tabelle steht.

Ich hoffe Ihr habt es jetzt verstanden.

Frank

Geschrieben

Hallo,

mit der Volltextsuche wirst du da auch nicht weiterkommen, da da nur nach ganzen Worten gesucht werden kann.

Ohne Programmierlogik wird das imho nicht gehen.

Also alle gesperrten Worte aus der Datenbank holen und mit PHP dann die Worte in den Usernamen suchen.

Gruß Jaraz

Geschrieben
Original geschrieben von Jaraz

mit der Volltextsuche wirst du da auch nicht weiterkommen, da da nur nach ganzen Worten gesucht werden kann.

Bist du sicher? Nach dem ersten Beispiel in dem Link oben, sieht es so aus, als ob auch Teilworte gefunden werden (hab es aber selber noch nicht ausprobiert).

Geschrieben
Original geschrieben von Wolle

Bist du sicher? Nach dem ersten Beispiel in dem Link oben, sieht es so aus, als ob auch Teilworte gefunden werden (hab es aber selber noch nicht ausprobiert).

Ja, bin ich. Näheres ist unter anderem auch hier zu lesen: http://www.dclp-faq.de/q/q-mysql-volltextsuche.html

Das erste Beispiel hat nichts mit der Volltextsuche von Mysql zu tun. Man kann natürlich das erste Beispiel erweitern.

Als erstes werden alle verbotenen Wörter ausgelesen und dann wird das SQL Statement zusammengebaut. Da ein SQL Statement aber nicht unendlich lang sein darf, ist irgendwann eine maximale Anzahl an verbotenen Wörtern erreicht.

Beispiel: select name from site where name regexp 'foo' or name regexp 'bar';

Vielleicht geht es auch noch kürzer.

Gruß Jaraz

Geschrieben
Original geschrieben von palvoelgyi

Wenn jetzt ein Benutzer z.B. test123 als Benutzername eingibt. Dann soll das Skript in der Tabelle überprüfen ob der Benutzername geperrt ist. Wenn ich jetzt WHERE name LIKE "test123" mache, dann erhalte ich 0 Ergebnisse, da nur der Benutzername test gesperrt ist. Ich möchte jetzt aber alle Benutzernamen die irgendwie das Wort test drin haben sperren.


SELECT Word FROM Badwordtable WHERE POSITION (Badwordtable.Word IN Loginwunsch) > 0;

Wenn dieser Query >= 1 Row zurückliefert enthält der Wunsch-Login ein böses Wort. Ausserdem gibt der Query alle bösen Worte aus, die du dem User an den Kopf werfen kannst.

Wo ist das Problem? :D

Getestet auf mysql 3.22.30

Ich hoffe ich hab die Aufgabenstellung korrekt verstanden =)

Geschrieben

Das klappt ja tatsächlich. Wieder was gelernt. :D

Es geht übrigens auch:

SELECT Word FROM Badwordtable WHERE LOCATE(Badwordtable.Word, login) > 0;

Ich glaube ich sollte mir mal die ganzen Funktionen, die Mysql bietet, anschauen. :rolleyes:

Gruß Jaraz

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...