Groß-/ Kleinschreibung in der DB

  • Hallo zusammen,

    ich habe da ein kleines Problem.
    Ich gebe ueber ein Formular via $_POST meine Daten an die datenbank.

    PHP
    // INSERT INTO					
    mysql_query("INSERT INTO enn_usr (honorific, firstname, surname, known)
    VALUES('$_POST[honorific]','$_POST[firstname]','$_POST[surname]','0')");

    Die naechste seite wird mit folgender URL aufgerufen:
    http://www.domain.de/Vorname.Nachname <- Das ist eigentlich https://www.forum-hilfe.de/www.domain.de/…urname=Nachname (mod_rewrite)

    in der Datei werden dann als erstes die Parameter uebergeben:

    Das problem ist hierbei: $firstname = $_REQUEST['firstname']; & $surname = $_REQUEST['surname']; gibt mir aus Vorname & Nachname. Wenn jemand seine Eintragung in das Formular aber mit kleinbuchstaben gemacht hat werden die Daten komischerweise in der Datenbank nicht empfangen.

    PHP
    $firstname = strtolower($firstname);
    	$surname = strtolower($surname);
    
    	$firstname = ucfirst($firstname);
    	$surname = ucfirst($surname);

    Das war meine loesung bislang. Das geht aber auch nicht wenn dann wer ankommt und NUR in Gr.Buchstaben geschrieben hat oder heißt: Marc-Andre

    Dann saehe das so aus: Marc-Andre -> marc-andre -> Marc-andre RESULTAT: es wird in der DB nicht gefunden weil in der DB steht: marc-andre

    Wo ist da bitte das problem? Das hatte ich noch nie!

    Was moechte ich genau?

    Ich moechte gerne in mein Formular schreiben koennen:
    Vorname: Hansi
    Nachname: schröder

    die URL soll heißen koennen: http://www.domain.de/Hansi.Schröder ABER AUCH http://www.domain.de/hansi.schröder ABER AUCH http://www.domain.de/haNsi.schröDer

    die Ausgabe wäre dann nach abruf: Hallo Hansi schröder


    Vielen Dank und Gruß

    naggison

    2 Mal editiert, zuletzt von naggison (25. August 2010 um 12:43)

  • Lege einfach alles kleingeschriieben in der Datenbank ab.
    Alle Vergleiche erfolgen mit der kleingeschriebenen Variante.
    Vor der Ausgabe machst du die ersten Buchstaben einfach groß.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Lege einfach alles kleingeschriieben in der Datenbank ab.
    Alle Vergleiche erfolgen mit der kleingeschriebenen Variante.
    Vor der Ausgabe machst du die ersten Buchstaben einfach groß.



    Und wie ist das mit dem Namen: Marc-Andre ?

    Ich gebe ein in das Formular: Marc-Andre
    gebe das klein in die DB und bevor ich das wieder ausgebe mache ich den ersten Buchstaben groß... -> Marc-andre

    Das wird nicht klappen. Dieses Problem ist echt komisch..

  • Normalerweise unterscheidet die Datenbank schon zwischen Klein- und Großschreibung...
    Das sind unterschiedliche ASCII-Werte:
    A: 01000001
    a: 11000001

    Deswegen leg ALLES klein ab.
    Und mahc dann den ersten Buchstaben groß und alle Buchstaben nach '-' und ' '.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • *falsch*Benutze halt bei der Suche "like" statt "=".
    Like ist nicht case-sensitive.*falsch*

    Edit: Das war natürlich Unfug. Case-Sensitivity ist abhängig vom Zeichensatz, nicht von der Benutzung von "=" oder "like".

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    Einmal editiert, zuletzt von SinnlosS (25. August 2010 um 16:53)

  • Normalerweise unterscheidet die Datenbank schon zwischen Klein- und Großschreibung...


    MySQL unterscheidet bei varchar-Spalten nicht zwischen Klein- und Großschreibung!

  • Warum utf8_bin???



    Ein Warum kann ich nicht beantworten. Weil ich es so eingestellt hatte. Was soll ich nehmen?

    Edith: Also ich habe gerade noch andere Charsets versucht. Es geht damit auch nicht. Also das macht wirklich keinen unterschied.
    das ganze erst wieder in klein dann in groß und dann mit 10 if abfragen &/oder switch case zu machen finde ich unsinnig.

    Ich raff es nur nicht weil es ja sonst immer geklappt hat bei Abfragen!

    Einmal editiert, zuletzt von naggison (25. August 2010 um 16:31)

  • utf8_bin ist case-sensitive, utf8_general_ci nicht.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Würde ich aber nicht als sauberste und performanteste Lösung bezeichnen.

    @ naggison: Sicher, dass du auch beide Felder auf utf8-general-ci (wie case-insensitive) gesetzt hast, also surname und firstname? Falls ja muss der Fehler woanders liegen.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Ich denke mal er meint damit das du viel mit PHP rumfrickeln musst obwohl es eigentlich gar nicht nötig bzw die Aufgabe hier ist (von PHP)

    Die schlauste Lösung wäre es schon so reinzuspeichern wie der STRING von PHP auch kommt, mach mal einen MYSQL DUMP weiß auch nicht gerade woran es liegz

    Lass dir auch mal das Ausgeben was PHP an Mysql schickt, vllt stimmt da was nicht also an den Requests

  • Also, Fehler gibt es soweit keine. Es schreibt sich alles wunderbar in die Datenbank rein etc.
    Beide Felder sind auf utf8_general_ci gestellt und es geht trotzdem nicht.
    Zu der Loesung mit: Im string suchen nach "-" oder " " und dann explode und dann ucfirst() und dann wieder implode... das klappt nicht. Weil:

    1. Ich gebe Vor und Nachname in 2 Felder ein (egal wie es eingegeben wurde, so soll auch die ausgabe lauten - Wenn sich jemand vertippt und mit "Hallo mustermann" anstatt anstatt "Hallo Mustermann" angesprochen wird ist es eigene Schuld - Wobei man sich dann ueberlegen kann ob man das mit der Umwandlung in Großbuchstaben versucht.)

    2. Ich gebe oben ein: http://www.domain.de/Max.Mustermann
    Wenn "Max" & "Mustermann" so eingetragen wurden findet man ihn nicht wenn man schreibt: http://www.domain.de/max.mustermann <- Das soll aber auch gehen.

    Felder:
    // Max
    // Mustermann
    Zu DB -> firstname= Max - surname = Mustermann

    Adresse (Soll beides den Namen ausgeben - tut es aber nicht // Die Domain trage ich entweder von Hand oben ein oder generiere Sie nach dem eintragen.):
    http://www.domain.de/Max.Mustermann (= Kappt!! )
    Ausgabe: Sehr geehrter Herr Mustermann

    http://www.domain.de/max.mustermann (= Klappt NICHT! )
    Ausgabe:

    Dieses Problem besteht auch wenn ich die Daten von Hand in die Datenbank eintrage.
    Trage ich direkt in die DB vor und nachname ein passiert nach dem domainaufruf genau das selbe.

    Gruß und Danke

    3 Mal editiert, zuletzt von naggison (26. August 2010 um 08:58)

  • Wenn du die Daten per Hand einträgst , stehen sie dann mit Groß und Kleinbuchstaben drin oder genau so wie du sie eingetragen hast

    Welches Charset hat die Tabelle?