Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: ANLEITUNG: Erster Buchstabe als Großbuchstabe bei Name, Vorname, Stadt

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Imm wieder nervt es mich, dass sich Kunden mit kleingeschriebenen Namen und kleingeschriebener Anschrift im Shop anmelden. Problematisch wird es immer hinterher, wenn man mit Rechnungstools oder einer WaWi arbeitet.

    Damit zukünftig die Daten, wie Name, Vorname und Stadt mit Großbuchstaben am Anfang in der Datenbank stehen sind nur kleine Änderungen nötig.

    create_account.php

    Suche (ca. Zeile 262 )

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_vat_id' => $vat,
      'customers_vat_id_status' => $customers_vat_id_status,
      'customers_status' => $customers_status,
      'customers_firstname' => $firstname,
      'customers_lastname' => $lastname,
      'customers_email_address' => $email_address,
      'customers_telephone' => $telephone,
      'customers_fax' => $fax,
      'customers_newsletter' => $newsletter,
      'customers_password' => xtc_encrypt_password($password),
      'customers_date_added' => 'now()',
      'customers_last_modified' => 'now()',
    );

    Ersetze mit:

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_vat_id' => $vat,
      'customers_vat_id_status' => $customers_vat_id_status,
      'customers_status' => $customers_status,
      'customers_firstname' => mb_convert_case($firstname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'customers_lastname' => mb_convert_case($lastname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'customers_email_address' => $email_address,
      'customers_telephone' => $telephone,
      'customers_fax' => $fax,
      'customers_newsletter' => $newsletter,
      'customers_password' => xtc_encrypt_password($password),
      'customers_date_added' => 'now()',
      'customers_last_modified' => 'now()',
    );

    Suche (ca. Zeile 288)

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_id' => $_SESSION['customer_id'],
      'entry_firstname' => $firstname,
      'entry_lastname' => $lastname,
      'entry_street_address' => $street_address,
      'entry_postcode' => $postcode,
      'entry_city' => $city,
      'entry_country_id' => $country,
      'address_date_added' => 'now()',
      'address_last_modified' => 'now()'
    );

    Ersetze mit

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_id' => $_SESSION['customer_id'],
      'entry_firstname' => mb_convert_case($firstname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_lastname' => mb_convert_case($lastname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_street_address' => mb_convert_case($street_address, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_postcode' => $postcode,
      'entry_city' => mb_convert_case($city, MB_CASE_UPPER, $_SESSION['language_charset']),
      'entry_country_id' => $country,
      'address_date_added' => 'now()',
      'address_last_modified' => 'now()'
    );

    create_guest_account.php

    Suche (ca. Zeile 229):

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_vat_id' => $vat,
      'customers_vat_id_status' => $customers_vat_id_status,
      'customers_status' => $customers_status,
      'customers_firstname' => $firstname,
      'customers_lastname' => $lastname,
      'customers_email_address' => $email_address,
      'customers_telephone' => $telephone,
      'customers_fax' => $fax,
      'customers_newsletter' => $newsletter,
      'account_type' => '1',
      'customers_date_added' => 'now()',
      'customers_last_modified' => 'now()',
    );

    Ersetze mit:

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_vat_id' => $vat,
      'customers_vat_id_status' => $customers_vat_id_status,
      'customers_status' => $customers_status,
      'customers_firstname' => mb_convert_case($firstname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'customers_lastname' => mb_convert_case($lastname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'customers_email_address' => $email_address,
      'customers_telephone' => $telephone,
      'customers_fax' => $fax,
      'customers_newsletter' => $newsletter,
      'account_type' => '1',
      'customers_date_added' => 'now()',
      'customers_last_modified' => 'now()',
    );

    Suche (ca.Zeile 256)

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_id' => $_SESSION['customer_id'],
      'entry_firstname' => $firstname,
      'entry_lastname' => $lastname,
      'entry_street_address' => $street_address,
      'entry_postcode' => $postcode,
      'entry_city' => $city,
      'entry_country_id' => $country
    );

    Ersetze mit:

    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_id' => $_SESSION['customer_id'],
      'entry_firstname' => mb_convert_case($firstname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_lastname' => mb_convert_case($lastname, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_street_address' => mb_convert_case($street_address, MB_CASE_TITLE, $_SESSION['language_charset']),
      'entry_postcode' => $postcode,
      'entry_city' => mb_convert_case($city, MB_CASE_UPPER, $_SESSION['language_charset']),
      'entry_country_id' => $country
    );

    /includes/modules/checkout_address_store.php

    Suche (ca. Zeile 116):

    Code: PHP  [Auswählen]
          $sql_data_array = array ('customers_id' => $_SESSION['customer_id'],
                                   'entry_firstname' => $firstname,
                                   'entry_lastname' => $lastname,
                                   'entry_street_address' => $street_address,
                                   'entry_postcode' => $postcode,
                                   'entry_city' => $city,
                                   'entry_country_id' => $country);

    Ersetze mit:

    Code: PHP  [Auswählen]
          $sql_data_array = array ('customers_id' => $_SESSION['customer_id'],
                                   'entry_firstname' => mb_convert_case($firstname, MB_CASE_TITLE, $_SESSION['language_charset']),
                                   'entry_lastname' => mb_convert_case($lastname, MB_CASE_TITLE, $_SESSION['language_charset']),
                                   'entry_street_address' => mb_convert_case($street_address, MB_CASE_TITLE, $_SESSION['language_charset']),
                                   'entry_postcode' => $postcode,
                                   'entry_city' => mb_convert_case($city, MB_CASE_TITLE, $_SESSION['language_charset']),
                                   'entry_country_id' => $country);

    Nun wäre das Problem bei den Neuregistrierungen gelöst. Vielleicht hat ja einer der PHP und MySQL Experten eine Idee, wie man die Sache mit den Großbuchstaben beim Straßennamen löst.

    Nun geht's in die vollen und die bisherigen "Kleinschreiberkunden" werden in der Datenbank auf Vordermann gebracht.

    WICHTIG!!! VORHER EIN BACKUP ERSTELLEN

    Mit phpMyAdmin in der Datenbank folgende Funktion erstellen.

    Code: SQL  [Auswählen]
    DELIMITER ||
    DROP FUNCTION IF EXISTS ucwords||
    CREATE FUNCTION ucwords(s VARCHAR(255)) RETURNS VARCHAR(255) BEGIN
       DECLARE cont INT UNSIGNED DEFAULT 0;
       DECLARE flag TINYINT UNSIGNED DEFAULT 1;
       DECLARE cadena VARCHAR(255) DEFAULT '';
     
       WHILE(cont <= LENGTH(s)) DO
          IF(SUBSTRING(s,cont,1) = ' ') THEN
             SET cadena = CONCAT(cadena,' ');
             SET cont = cont + 1;
             SET flag = 1;
          ELSE
             SET flag = 0;
          END IF;
          IF flag = 1 THEN
             SET cadena = CONCAT(cadena,UCASE(SUBSTRING(s,cont,1)));
          ELSE
             SET cadena = CONCAT(cadena,LCASE(SUBSTRING(s,cont,1)));
          END IF;
          SET cont = cont + 1;
       END WHILE;
     
       RETURN LTRIM(cadena);
    END;
    ||
    DELIMITER ;

    Nun ist diese Funktion gespeichert und mit den folgenden Zeilen werden alle Namen, Straßen und Städte jeweils so umgewandelt, dass der erste Buchstabe eine Großbuchstabe ist

    Code: SQL  [Auswählen]
    UPDATE customers SET customers_firstname = ucwords(customers_firstname);
    UPDATE customers SET customers_lastname = ucwords(customers_lastname);
    UPDATE address_book SET entry_firstname = ucwords(entry_firstname);
    UPDATE address_book SET entry_lastname = ucwords(entry_lastname);
    UPDATE address_book SET entry_street_address = ucwords(entry_street_address);
    UPDATE address_book SET entry_city = ucwords(entry_city);

    Gruß
    Ronny

    [EDIT Tomcraft 03.11.2011: Korrigierten Code eingefügt, Danke an Webkiste aka Ronny.]
    [EDIT franky_n 04.11.2011: Korrigierten Code eingefügt.]
    [EDIT Tomcraft 06.01.2022: Anleitung erweitert, Danke an scooterama.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=16460.0

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Hallo Ronny,

    das ist aber nicht idiotensicher !

    Beispiel

    Kundendetails:

    Zitat
    Markus von Bergen
    Hauptstr. 1
    80808 Au in der Hallertau

    daraus wird:

    Zitat
    Markus Von Bergen
    Haupstr. 1
    80808 Au In Der Hallertau

    noch ein Beispiel:

    Zitat
    özlem ürgit

    daraus wird :

    Zitat
    özlem ürgit

    Gruss Gerhard

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Ok mit den Doppelnamen im Namen und der Stadt habe ich ich nicht beachtet. Verbesserungsvorschlag?

    Wieso bleibt der türkische Name denn weiterhin kleingeschrieben?

    Gruß
    Ronny

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    da "ucfirst" keine Umlaute kann.

    Alternative:

    Code: PHP  [Auswählen]
    mb_convert_case('özlem ürgit', MB_CASE_TITLE, 'UTF-8');

    dann funktioniert das auch mit Umlauten als Anfangsbuchstabe.

    Gruss Gerhard

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Dann müssen also einfach nur alle ucfirst() mit mb_convert_case('', MB_CASE_TITLE, 'UTF-8') ersetzt werden?
    Durch das MB_CASE_TITLE wäre ja auch gleichzeitig das Problem beim Straßennamen gelöst, oder?
    Für die Städtenamen würde ich dann auf MB_CASE_UPPER wechseln, dann wird der Stadtname eben in der Rechnung in Großbuchstaben dargestellt ist ja auch keine Seltenheit.

    Gruß
    Ronny

    P.S.: Leider kann ich meine Anleitung jetzt nicht mehr korrigieren.

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    man kann das auch noch dynamisch machen mit:

    Code: PHP  [Auswählen]
    mb_convert_case($string, MB_CASE_TITLE, $_SESSION['language_charset']);

    Gruss Gerhard

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    [...]
    P.S.: Leider kann ich meine Anleitung jetzt nicht mehr korrigieren.

    Poste es einfach nochmal als Korrektur, dann ändere ich das in Beitrag 1 entsprechend! :!:

    Grüße

    Torsten

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Sei so lieb und teste vorher nochmal alle Eventualitäten.

    Ich weiss nur, dass "ucfirst" immer wieder Probleme macht und in solchen fällen "mb_convert_case" flexibler ist.

    Gruss Gerhard

    ps

    • Fördermitglied
    • Beiträge: 205
    Ihr seit einfach großartig, Jungs,

    wie ihr eine Nerverei nach der andern aus der Welt schafft, oder es zumindest versucht-

    Vielen Dank !
    Susanne

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    So, nach ausgiebigen Tests hier nun die fehlerkorrigierte Variante.
    Die Städtenamen werden nun komplett groß geschrieben, gar nicht einmal so unüblich bei Rechnungen.
    Probleme bereiten weiterhin Straßennamen wie In der kleinen Kuhle, daraus wird nun In Der Kleinen Kuhle. Wem das nicht gefällt, der kann die Änderung für $street_address weglassen.
    Ansonsten klappt alles mit den Umlauten und aus einem karl-heinz wird nun auch ein Karl-Heinz.

    [...]
    [...]
    [...]

    Danke nochmal an Gerhard für den Denkanstoß.

    Gruß
    Ronny

    [EDIT Tomcraft 03.11.2011: Code in Beitrag 1 korrigiert.]

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Danke Ronny! :thx:

    Grüße

    Torsten

    Matt

    • Experte
    • Beiträge: 4.241
    Ich finde es ja wichtig, dass ich sehe, dass der Kunde alles kleingeschrieben hat. Erhöht nämlich gleich mal den "Achtung: Schwieriger Kunde"-Score...

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    [...] "Achtung: Schwieriger Kunde"-Score...

    Das wäre doch mal eine Idee. Es werden während des gesamten Besuchs auf der Seite Infos über das Verhalten des Users gesammelt und daraus ein Score erstellt...

    Gruss Gerhard

    online-beobachter

    • Schreiberling
    • Beiträge: 417
    Hab es gerade mal eben eingebaut und es werden bei den Namen und dem Ort die Umlaute geklaut?

    Konkret wurde aus Günter -> Gnter und aus München -> Mnchen

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo online-beobachter,

    mach mal überall wo:

    Code: PHP  [Auswählen]
    'UTF-8'

    steht

    Code: PHP  [Auswählen]
    $_SESSION['language_charset']

    rein.

    Viele Grüße

    Franky
    Werbung / Banner buchen
    4 Antworten
    3381 Aufrufe
    31. Januar 2010, 22:39:29 von bq2210
    12 Antworten
    5078 Aufrufe
    10. März 2014, 18:38:02 von Aragorn45
    2 Antworten
    2934 Aufrufe
    15. Dezember 2010, 11:05:07 von Thomas
               
    anything