Herr_der_Ringe Geschrieben 20. Juni 2005 Geschrieben 20. Juni 2005 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.
Amstelchen Geschrieben 20. Juni 2005 Geschrieben 20. Juni 2005 "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
SNOWMAN Geschrieben 20. Juni 2005 Geschrieben 20. Juni 2005 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.
Herr_der_Ringe Geschrieben 20. Juni 2005 Autor Geschrieben 20. Juni 2005 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?
SNOWMAN Geschrieben 20. Juni 2005 Geschrieben 20. Juni 2005 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"
Herr_der_Ringe Geschrieben 20. Juni 2005 Autor Geschrieben 20. Juni 2005 Also, wäre der Name a_b_c dann in der Datenbank als a\_b\_c zu finden/einzutragen, damits richtig funktioniert? Danke für die Antworten.
perdian Geschrieben 20. Juni 2005 Geschrieben 20. Juni 2005 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.
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden