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: Kundennummer-Vergabe im Shop hängt bei 1000

    web0null

    • Experte
    • Beiträge: 1.998
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #15 am: 23. Oktober 2015, 14:38:08
    Als Notlösung, mach mal aus
    Code: PHP  [Auswählen]
    $cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);
     

    das,
    Code: PHP  [Auswählen]
    $cid_query = xtc_db_query("SELECT MAX(CAST(customers_cid AS UNSIGNED)) AS maxnr FROM ".TABLE_CUSTOMERS);
     

    Ganzer Code,
    Code: PHP  [Auswählen]
    //Automatisch Kundennummer fortlaufend erzeugen
    /// Erste Kundennummer festlegen
    $start_cid = 1;
    /// Letzte Kundennummer auslesen
    $cid_query = xtc_db_query("SELECT MAX(CAST(customers_cid AS UNSIGNED)) AS maxnr FROM ".TABLE_CUSTOMERS);
    $cid       = xtc_db_fetch_array($cid_query);
    /// Neue Kundennummer generieren
    if (($maxnr = (int)$cid['maxnr']) >= $start_cid) {
      $start_cid = ++ $maxnr;
    }
    $sql_data_array['customers_cid'] = $start_cid;
    //Automatisch Kundennummer fortlaufend erzeugen
     

    Besser wäre aber der richtige Type in der DB.
    Werbung / Banner buchen

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #16 am: 23. Oktober 2015, 14:40:57
    Wie ja bereits festgestellt ist die Spalte customers_cid kein Zahlenfeld und kan Text enthalten. Ist dort irgendwo ein Buchstabe drin, dan wird u.U. diese Feld als MAXimal angesehen. Aber was ist "CUST01" + 1 ?

    Damit greift die if-Abfrage nicht und $start_cid bleibt auf dem Startwert. Wer unbedingt mit automatischer Kundennumemrvergabe arbeiten will, sollte als erstes mal den Datentyp für die Spalte customers_cid auf INT ändern, damit dort nur Integerwerte stehen können.

    GOOD-TASTE

    • Fördermitglied
    • Beiträge: 10
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #17 am: 23. Oktober 2015, 14:45:27
    So wir haben probiert in der Datenbank den Wert der customers_cid auf "INT (32)" zu ändern.
    Das wird vom System gar nicht akzeptiert.
    Es kommt eine Fehlermeldung..
    Siehe Anhang...

    GOOD-TASTE

    • Fördermitglied
    • Beiträge: 10
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #18 am: 23. Oktober 2015, 15:05:48
    Problem gelöst mit dem Eintrag:

    //Automatisch Kundennummer fortlaufend erzeugen
    /// Erste Kundennummer festlegen
    $start_cid = 1;
    /// Letzte Kundennummer auslesen
    $cid_query = xtc_db_query("SELECT MAX(CAST(customers_cid AS UNSIGNED)) AS maxnr FROM ".TABLE_CUSTOMERS);
    $cid       = xtc_db_fetch_array($cid_query);
    /// Neue Kundennummer generieren
    if (($maxnr = (int)$cid['maxnr']) >= $start_cid) {
      $start_cid = ++ $maxnr;
    }
    $sql_data_array['customers_cid'] = $start_cid;
    //Automatisch Kundennummer fortlaufend erzeugen

    Vielen Lieben Dank... an alle natürlich...
    Sehr toll das es geklappt hat...

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #19 am: 23. Oktober 2015, 15:17:22
    Ihr habt einen Volltext-Index auf der customers_cid? Wofür? Wenn, dann macht da ein normaler Index Sinn, damit der MAX()-Wert schneller gefunden wird. Dann klappt auch die Umstellung auf INT.

    Roberto75

    • Viel Schreiber
    • Beiträge: 836
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #20 am: 23. Oktober 2015, 17:09:31
    Wenn man auch Gastkunden hat müssen die Kundennummer auch unbedingt für diese automatisch erzeugt werden, sonst entstehen Lücken und die Nummernvergabe fängt wieder mit der im Script hinterlegten Nummer an. Ich hatte mich auch gewundert, warum plötzlich wieder alte Nummern vergeben wurden. Bei der Nummernvergabe dürfen keine Lücken entstehen.

    Bei 10000 ist übrigens Schluss und man muss dann in der Datenbank das Feld glaube ich auf INT umstellen. Dann werden aber nur Ziffern akzeptiert.

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #21 am: 23. Oktober 2015, 17:28:10
    Wieso sollten da Lücken entstehen? Er holt sich jedes Mal erneut die höchste Nummer, also kann es keine Lücken und keine doppelten geben (wenn sie wie mit unseren fixes als INT betrachtet werden)
    Außerdem: Wieso sollen keine Lücken entstehen DÜRFEN? Niemand ist verpflichtet durchgängige Kundennummern zu generieren, es sind nichteinmal durchgängige Rechnungsnummern (nur eindeutige) gesetzlich notwendig.

    Kannst du mir noch sagen, warum bei 10.000 schluss ist? In das varchar(32)-Feld passen doch deutlich mehr "Buchstaben"?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 14.000
    • Geschlecht:
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #22 am: 23. Oktober 2015, 18:15:20
    Das ist alles ein wenig Gefrickel hier, nicht ?
    GOOD-TASTE, du brauchst keine Angst zu haben etwas kaputt zu machen.

    • Das Feld customers_cid sollte unbedingt den Type INT(11) bekommen.
    • Der FULLTEXT-Index auf das Feld customers_cid muß weg, statt dessen einen normalen Index setzen (Erklärung, s.u. *1)
    • Den Code einfach halten, s.u. *2
    • Nebenbei gesagt ist die Idee von web0null die customers_cid gleich der customers_id zu setzen eine kluge Idee. Will man Gästen jedoch keine Kundennummer vergeben (ansonsten müsste man ja auch die /create_guest_account.php anpassen) geht es natürlich nicht.

    *1
    In phpMyAdmin die Tabelle customers_cid anklicken.
    Oben auf "Struktur" klicken.
    Unter der Liste der Spalten auf "Index" Klicken.
    Den FULLTEXT-Index bei customers_cid löschen.
    Oben in der Liste der Spalten bei customers_cid rechts in der Reihe auf "Index" klicken.
    Bestätigen.
    Fertig.

    *2
    Imho ist die Zeile
    Code: PHP  [Auswählen]
    if ($cid['maxnr'] >= $start_cid) {
        $start_cid = $cid['maxnr']+1;
    }
    völlig überflüssig, da diese Abfrage ohnehin immer zutrifft.
    Der Code könnte/sollte also einfach so aussehen:
    Code: PHP  [Auswählen]
    $start_cid = 1; //oder womit immer man starten möchte
    $cid_query = xtc_db_query("SELECT MAX(customers_cid) AS maxnr FROM ".TABLE_CUSTOMERS);
    $cid = xtc_db_fetch_array($cid_query);
    $start_cid = $cid['maxnr']+1;
    $sql_data_array['customers_cid'] = $start_cid;
    Da die Implementation schon eine Weile läuft ist der Startwert, also $start_cid = 1;, nur noch marginal.

    Gruß,
    noRiddle

    web0null

    • Experte
    • Beiträge: 1.998
    Re: Kundennummer-Vergabe im Shop hängt bei 1000
    Antwort #23 am: 23. Oktober 2015, 18:19:22
    Zitat
    also kann es keine Lücken [...] geben
    Nicht ganz, Lücken können immer entstehen, z.B. wenn man Kunden löscht.
    Mit dem Rest stimme ich aber überein.

    Das einzige "Problem" was ich sehe ist, ...wenn der letzte Kunde gelöscht wird, denn diese Nummer würde sich das System wieder holen.

    Wobei es auch hier im Prinzip keine Probleme geben dürfte, denn die eindeutige Kunden Identifizierung geht immer über die customers_id.

    Gruß

    NACHTRAG:
    Zitat
    Das ist alles ein wenig Gefrickel
    Joo das stimmt, deshalb fragte ich auch, wo er den Code her hat.
    Eigentlich kann der ganze Code weg und weiter unten einfach die customers_cid anhand der customers_id setzen.

    Statt,
    Code: PHP  [Auswählen]
    xtc_db_query("UPDATE ".TABLE_CUSTOMERS." SET customers_default_address_id = '".(int)$address_id."' WHERE customers_id = '".(int)$_SESSION['customer_id']."'");
     

    folgendes,
    Code: PHP  [Auswählen]
    $sql_data_array = array (
      'customers_cid'                => (int)$_SESSION['customer_id'],
      'customers_default_address_id' => (int)$address_id,
    );
    xtc_db_perform(TABLE_CUSTOMERS, $sql_data_array, 'update', 'customers_id = ' . (int)$_SESSION['customer_id']);
     

    Gruß
    3 Antworten
    3039 Aufrufe
    11. Dezember 2013, 22:44:15 von alphoss
    3 Antworten
    2386 Aufrufe
    01. Februar 2018, 18:21:27 von Timm
    1 Antworten
    2065 Aufrufe
    13. März 2016, 11:59:17 von pawie
    1 Antworten
    1720 Aufrufe
    14. Dezember 2012, 15:12:45 von biotob
               
    anything