Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo.

Folgendes. Wenn ich eine Datenbank für Usernamen habe und es existiert z.B. ein "a b c" in dieser Datenbank, ein anderer aber will sich als "a_b_c" registrieren und anmelden.

Dann spinnt aber die Datenbank, für die das " _ " als Wildcard dient.

Wie kann ich das umgehen??

PS:

Ich habe leider keinen Code zur Verfügung^^. Ich hoffe, ihr könnt es mir auch so beantworten.

Thx.

Geschrieben

"eine datenbank" ... welche datenbank? das wildcard _ gibts häufig.

welcher felddatentyp hat das feld mit dem usernamen?

welches frontend (php-script, scriptlet, applet)?

ohne die informationen ist leider nicht viel anzufangen.

s'Amstel

Geschrieben

verwende das für deine datenbank gültige Escapezeichen

am häufigsten wird das \ verwendet.

da du sagst user anmelden registrieren geh ich ma von ner webanwendung aus und du verwendest php und mysql.

http://de.php.net zeigt sicher irgendwo welches Escape-Zeichen mysql verwendet.

das kommt aufs gleiche wie wenn du in php in einem String " verwenden möchstest, muss auch ein \ davor.

Wenn der User dann alles eingegeben hat und auf "Abschicken" geklickt hat, dann, is doch klar, musst du seine gesamten eingaben überprüfen, ob er zB eine gültige eMailadresse angegeben hat, oder html-tags rausfiltern. Genau da wird auch das Escape-Zeichen eingefügt. Mit ereg_replace kannst du dann nach den Wildcarts suchen und dann mit dem Escapezeichen ersetzen.

Geschrieben

Ich weiss nur, dass mit "Like" die Namen verglichen werden, und bei Like dient ein "_" ja als Platzhalter. Wenn ich dann ein "\" davorsetze, wird das umgangen? oder hab ich das falsch verstanden?

Geschrieben

Genau so ist es.

Ein Escape-Zeichen dient dazu, ein Zeichen das eine Funktion erfüllt zu "escapen", also die Funktion zu deaktivieren.

echo "Gestern hat man mich gelobt. "Sehr gute Arbeit!" hat mein Chef gesagt"

haut so ja nich ganz hin, also muss ich die " escapen:

echo "Gestern hat man mich gelobt. \"Sehr gute Arbeit\" hat mein Chef gesagt"

Geschrieben
Also, wäre der Name a_b_c dann in der Datenbank als a\_b\_c zu finden/einzutragen, damits richtig funktioniert?
Nein, wäre er nicht.

In der Datenbank steht weiterhin a_b_c. Auch in die Datenbank kann ich diesen Wert hzineinschreiben, ein Statement wie

INSERT INTO X (field1) VALUES ('a_b_c')

funktioniert wunderbar.

Auch beim Auslesen erhälst du ebenfalls, diesen Wert, nur bei einer LIKE Query musst du den Underscore escapen.

Das heisst sowas hier funktioniert:

SELECT * FROM X WHERE field1 = 'a_b_c'

sowas hier allerdings wird dir nicht das gewünschte Ergebnis bringen:

SELECT * FROM X WHERE field1 LIKE 'a_b_c'

sondern durch so etwas ersetzt werden:

SELECT * FROM X WHERE field1 LIKE 'a\_b\_c'

Du solltest dich allerdings generell mit ein paar Grundkonzepten, sowohl was SQL, als auch was Datenbanken generell angeht, vertraut machen, sonst wirst du immer wieder vor solche Arten von Fehlern laufen.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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