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: Adressfeld wird unvollständig ausgefüllt

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #30 am: 13. Januar 2016, 16:40:54
    Ganz sicher ;)

    Wenn ich die Zeile rausnehme, dann kommt auch keine Fehlermeldung mehr:
    Code: PHP  [Auswählen]
    $street_address = (substr_count($street_address, '0') > 0 && !preg_match('#[1-9]#', $street_address)) ? str_replace('0', '', $street_address) : $street_address;

    Kann substr_count vielleicht keine Zahlen lesen?

    p3e

    • Experte
    • Beiträge: 2.424
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #31 am: 13. Januar 2016, 16:52:07
    Richtig, hier liegt der Fehler! In der Lösung von noRiddle werden erst die Nullen gelöscht und dann wird erst überprüft, ob eine Null vorhanden ist. Die ist dann aber ja bereits gelöscht :D

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #32 am: 13. Januar 2016, 16:54:39
    Genau das ist mein Verständnis. Die Frage ist nun, wie bekomme ich es korrekt hin? :D

    Grüße
    Dominik

    p3e

    • Experte
    • Beiträge: 2.424
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #33 am: 13. Januar 2016, 17:06:42
    Wie gesagt bin ich unterwegs und habe die /create_account.php nicht vor Augen. Du könntest mal versuchen, die Zeilen
    Code: PHP  [Auswählen]
    if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH || !preg_match('#[0-9]#', $street_address)) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
    }
    direkt unter
    Code: PHP  [Auswählen]
    $street_address = xtc_db_prepare_input($_POST['street_address']);
    zu verschieben. Das wäre aber nicht so sauber und es kann sein, dass $messageStack vor dem Befüllen weiter unten gelöscht wird, was die Fehlermeldung löschen würde (ohne den Code stochre ich im Dunkeln).

    Alternative:

    Füge direkt unter:
    Code: PHP  [Auswählen]
    $street_address = xtc_db_prepare_input($_POST['street_address']);
    folgendes ein:
    Code: PHP  [Auswählen]
    $street_address = $street_address_mit_null;
    und ersetze
    Code: PHP  [Auswählen]
    if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH || !preg_match('#[0-9]#', $street_address)) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
    }
    mit
    Code: PHP  [Auswählen]
    if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH || !preg_match('#[0-9]#', $street_address_mit_null)) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
    }

    EDIT: Die Alternative gefällt mir besser.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #34 am: 13. Januar 2016, 17:49:30
    Upps, kommt davon wenn man nicht testet.
    Ich denke p3es Idee geht auch nicht.
    Der Knackpunkt ist, daß man, wenn die Hausnummer nur aus Nullen besteht, die Strasse ja ohne die 0 (oder die Nullen) in die DB speichern möchte aber nicht schon vorher die Null rausnehmen möchte.
    Also:
    Das erste, wo $_POST['street_address'] in die Variable $street_address gespeichert wird so lassen und nicht erweitern.
    Das zweite aber schon machen, also
    Suche
    Code: PHP  [Auswählen]
    if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
    }
    ersetze mit
    Code: PHP  [Auswählen]
    if (strlen($street_address) < ENTRY_STREET_ADDRESS_MIN_LENGTH || !preg_match('#[0-9]#', $street_address)) {
        $error = true;
        $messageStack->add('create_account', ENTRY_STREET_ADDRESS_ERROR);
    }

    und dann weiter unten das suchen
    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()'
    );
    und hier das str_replace machen
    Code: PHP  [Auswählen]
    $street_address_withoutsinglenull = (substr_count($street_address, '0') > 0 && !preg_match('#[1-9]#', $street_address)) ? str_replace('0', '', $street_address) : $street_address;
    $sql_data_array = array (
          'customers_id' => $_SESSION['customer_id'],
          'entry_firstname' => $firstname,
          'entry_lastname' => $lastname,
          'entry_street_address' => $street_address_withoutsinglenull,
          'entry_postcode' => $postcode,
          'entry_city' => $city,
          'entry_country_id' => $country,
          'address_date_added' => 'now()',
          'address_last_modified' => 'now()'
    );

    Der Fehlertext für die Konstante ENTRY_STREET_ADDRESS_ERROR müsste dann irgendwie so lauten:
    "Haben Sie Ihre Hausnummer vergessen ?, Bitte noch eintragen. Wenn Sie keine Hausnummer haben tragen Sie bitte 0 ein."

    In Worten:
    Wir prüfen im ersten Schritt ob Zahlen im input-Feld anwesend sind,
    wenn nicht, werfen wir die Fehlermeldung aus,
    wenn der Kunde nun keine Hausnummer hat trägt er 0 ein
    und beim Speichern in die DB löschen wir alle Nullen, wenn keine weiteren Zahlen zwischen 1 und 9 (inkl. der beiden genannten) vorhanden sind, raus.

    Immer noch nicht getestet !!, aber dafür haben wir ja dich, voodoopupp ;-)

    Gruß,
    noRiddle

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #35 am: 13. Januar 2016, 19:50:07
    Genau so muss es sein: nun funktioniert es, getestet erstmal am Falle der create_account.php :thumbs:

    So ähnlich hatte ich das schon versucht, aber ich hatte das direkt ins $sql_data_array geschrieben und nicht über einer vorher definierte Variable gemacht. Das hatte dann nicht funktioniert.

    Mit dieser Lösung von noRiddle funktioniert es nun also perfekt.

    Vielen Dank für die Ideen und die Umsetzung, ich kann leider immer nur mit Testen dienen ;)

    Grüße
    Dominik

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #36 am: 14. Januar 2016, 08:57:36
    So, nun auch noch mit der address_boo_process.php getestet: alles paletti!

    Die create_guest_account hab ich nicht geprüft, da wir diese nicht im Einsatz haben. Da aber der Aufbau quasi identisch mit der create_account ist, sollte das auch ohne Probleme funktionieren!

    Läuft nun richtig rund :D

    Somit haben wir eine relativ sichere und saubere Möglichkeit fehlerhafte Straßenangaben abzufangen. Vor allem finde ich es gut, dass auch hiermit nicht zwingend eine "falsche" Hausnummer gespeichert wird (also eine "0").

    Danke nochmals für die hilfreichen Tips!

    Grüße
    Dominik

    Kneumi

    • Fördermitglied
    • Beiträge: 134
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #37 am: 14. Januar 2016, 10:36:43
    Das klingt nach einer sehr guten Lösung. Wollte es gerade einbauen und habe dabei bemerkt, dass die STREET_ADRESS_ERROR in der german.php ja bisher einen Fehler ausgibt, wenn der unter Konfiguration/Minimum-Werte angegebene Wert für die Anzahl von Zeichen bei der Straße unterschritten wird:

    Code: PHP  [Auswählen]
    define('ENTRY_STREET_ADDRESS_ERROR', 'Strasse/Nr. muss aus mindestens ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' Zeichen bestehen. ');

    Bei mir steht dieser Wert bisher auf "5". Würdet ihr nach dem Einbau des obigen Hausnummern-Checks zusätzlich auf eine Minimum-Straßenlänge checken, oder den Wert in der Konfiguration auf "0" stellen?

    Wenn man beides lässt müsste die Fehlermeldung ja lauten:

    Code: PHP  [Auswählen]
    define('ENTRY_STREET_ADDRESS_ERROR', 'Strasse/Nr. muss aus mindestens ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' Zeichen bestehen und es muss eine Hausnummer angegeben werden. Wenn Sie keine Hausnummer haben geben Sie bitte eine 0 ein.');

    p3e

    • Experte
    • Beiträge: 2.424
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #38 am: 14. Januar 2016, 10:48:42
    ... Ich denke p3es Idee geht auch nicht. ...
    :’-( Doch, zumindest meine zweite Version habe ich gerade getestet und es funktioniert. :-D

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #39 am: 14. Januar 2016, 11:01:33
    Bei mir steht dieser Wert bisher auf "5".

    Also lieferst du nicht nach Mannheim Innenstadt?

    Die Adressen werden nur durch die Quadratbezeichnungen mit zugehörigen Hausnummern gebildet, beispielsweise D 6, 2.

    Stelle den Wert auf 2! So sollte der Default Wert für einen deutschen Shop aussehen! In Modified wird aber immer noch irgendein unsinniger Wert irgendeiner Uraltversion mitgeschleppt.

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #40 am: 14. Januar 2016, 11:11:33
    Ebenso müssten noch diese beiden Dateien angepasst werden, hab ich mir aber noch nicht genauer angeschaut:
    checkout_payment_address.php
    checkout_shipping_address.php

    Ansonsten schleicht sich hier wieder der gleiche Fehler ein, oder?

    Grüße
    Dominik

    Kneumi

    • Fördermitglied
    • Beiträge: 134
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #41 am: 14. Januar 2016, 11:22:40
    Also lieferst du nicht nach Mannheim Innenstadt?

    Die Adressen werden nur durch die Quadratbezeichnungen mit zugehörigen Hausnummern gebildet, beispielsweise D 6, 2.

    Stelle den Wert auf 2! So sollte der Default Wert für einen deutschen Shop aussehen! In Modified wird aber immer noch irgendein unsinniger Wert irgendeiner Uraltversion mitgeschleppt.

    Okay das überzeugt. "D 6, 2" sind zwar auch schon 6 Zeichen (ich nehme an Leerzeichen zählen auch?!), aber wenn jemand "D6,2" angibt wären es nur 4 Zeichen. Wenn man den Minimum-Straßenwert entsprechend runterstellt erledigt sich meine Frage von oben.

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #42 am: 14. Januar 2016, 15:33:52
    Ebenso müssten noch diese beiden Dateien angepasst werden, hab ich mir aber noch nicht genauer angeschaut:
    checkout_payment_address.php
    checkout_shipping_address.php

    Ansonsten schleicht sich hier wieder der gleiche Fehler ein, oder?

    Grüße
    Dominik

    Sooo, also hierfür ist wohl die Datei includes/modules/checkout_address_store.php zuständig.
    Wenn man hier dieselben Einstellungen vornimmt wie oben schon beschrieben, funktioniert es (fast) auch schon perfekt im Checkout.

    Was nicht ganz so gut gelöst wird mit meiner Anpassung dort: im Checkout wird die Fehlermeldung über ein "Popup" eingeblendet. Hier funktioniert das mit der Ausgabe des Fehlers leider noch nicht korrekt, so dass bei irgendeiner Art von Eingabe bei der Straße der Fehlercode schon umgangen wird.

    Erst bei der tatsächlichen Absendung der Adresse über den Button wird wohl dann die "checkout_address_store.php" durchlaufen und spuckt dann den Fehler aus.

    Das ist besser als nichts, wäre aber noch schöner, wenn hier schon im "Popup" auf eine Hausnummer gepocht wird.

    Eventuell müsste der Code dann aber doch an eine andere Stelle/Datei!?

    Hat dazu einer ne Idee?

    Grüße
    Dominik

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #43 am: 14. Januar 2016, 18:10:08
    ... Ich denke p3es Idee geht auch nicht. ...
    :’-( Doch, zumindest meine zweite Version habe ich gerade getestet und es funktioniert. :-D

    Okay, :sorry:, dann nehme ich alles zurück ;-).

    Allerdings verstehe ich einerseits das nicht
    Code: PHP  [Auswählen]
    $street_address = $street_address_mit_null;
    denn die Variable $street_address_mit_null ist zu dem Zeitpunkt nicht definiert
    und andererseits: Wo wird die evtl. eingebenene 0 bei nicht vorhandener Hausnummer gelöscht bevor sie in die DB geschrieben wird ?,
    denn das war ja Bedingung für automatisiert erstellte Paketaufkleber.

    @voodoopupp
    Da ist noch eine Javascript-Formprüfung enthalten.
    Entweder du deaktivierst die indem du in /includes/form_check.js.php die folgende Zeile auskommentierst
    Code: PHP  [Auswählen]
    check_input("street_address", <?php echo ENTRY_STREET_ADDRESS_MIN_LENGTH; ?>, "<?php echo xtc_js_lang(ENTRY_STREET_ADDRESS_ERROR); ?>");
    oder du mußt die Funktion check_input() in selbiger Datei anpassen, denn die prüft nur auf ENTRY_STREET_ADDRESS_MIN_LENGTH.

    Da die genannte Funktion jedoch für mehrere Felder benutzt wird, fällt mir dazu momentan nur ein der Funktion einen weiteren Parameter zu verleihen und mittels diesem die Prüfung zu machen die wir auch in PHP machen.
    Aus dem Stegreif kann ich dir da jetzt keine Anleitung zu schreiben.
    ...ich versuche es mal:
    Code: Javascript  [Auswählen]
    function check_input(field_name, field_size, message, no=false) {
        if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) {
            var field_value = form.elements[field_name].value,
                 countnull = (field_value.match(/0/g) || []).length,
                 countothers = (field_value.match(/[1-9]/g) || []).length,
                 countall = (field_value.match(/[0-9]/g) || []).length;

            if (field_value == '' || field_value.length < field_size || (no===true && ((countnull > 0 && countothers < 1) || countall < 1)) {
                error_message = error_message + "* " + message + "\n";
                error = true;
            }
        }
    }
     
    (das || [] ist nötig für den Fall, daß nichts gefunden wird, dann gäbe es nämlich einen Error bei Abfrage nach ().length)

    und in der zuerst genannten Zeile müsste dann der neue Parameter auf true gesetzt werden
    Code: Javascript  [Auswählen]
    check_input("street_address", <?php echo ENTRY_STREET_ADDRESS_MIN_LENGTH; ?>, "<?php echo xtc_js_lang(ENTRY_STREET_ADDRESS_ERROR); ?>", true);

    Ich bezweifele zwar, daß das aus dem Stegreif hingeschriebene Javascript funktioniert,
    aber, wie bereits gesagt, du bist der Tester :-D.

    Gruß,
    noRiddle

    *EDIT*
    Da fehlt noch was, nämlich der Test ob überhaupt eine Zahl vorkommt.
    Habe versucht es oben in den Code einzubauen..., wobei ich fast wette eine Klammer vergessen oder verkehrt gesetzt zu haben... :-)

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Adressfeld wird unvollständig ausgefüllt
    Antwort #44 am: 14. Januar 2016, 18:16:30
    Wenn ihr da gerade bastelt .....

    Eine JS Lösung die beim Absenden eine Kapitalisierung vorschlägt habe ich seit Monaten auf dem Schirm ... ich komme nur nie dazu.

    Also Kunde gibt ein:
    max mustermann

    Kunde will Formular abschicken und wird gefragt ob er max mustermann behalten möchte oder Max Mustermann

    Wenn man die Kundendaten zur Wawi schaufelt, dann muss man dann nicht mehr so oft händisch eingreifen.
    2 Antworten
    1109 Aufrufe
    08. Dezember 2019, 14:44:22 von Bonner
    4 Antworten
    4549 Aufrufe
    29. April 2016, 11:04:40 von bigi100
    0 Antworten
    1244 Aufrufe
    14. August 2017, 04:29:20 von rayban
    0 Antworten
    1793 Aufrufe
    06. Februar 2013, 19:19:12 von Yoshmobile