Das darfst Du nicht machen.
Logisch... Danke.
Bleibt die Frage wie es sein kann dass die customer_id doppelt vergeben wird. Soweit ich mir das angeguckt habe, wird ein Eintrag in die customers gemacht und die daraus resultierende ID (welche per Autoincrement erzeugt wird), kommt zurück. Die wiederum wird dann benutzt um den address_book Eintrag zu füllen.
Aus der create_guest_account.php, bei mir Zeile 237
xtc_db_perform
(TABLE_CUSTOMERS
, $sql_data_array);$_SESSION['customer_id'] = xtc_db_insert_id
();$sql_data_array = array ('customers_id' => $_SESSION['customer_id'],Also geht quasi alles über die Session, da die Session für den Vorgang des Registrierens/Bestellens die customer_id (zwischen)speichert.
Und danach dann in das address_book (bei mir Zeile 270)
xtc_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);
An diesem Punkt muss der Fehler bereits bestehen, sonst wäre die customer_id ja in diesem Moment richtig und der Eintrag ebenfalls.
Wenn ich das jetzt zurück führe, kann entweder die Session schuld sein oder eben das
xtc_db_insert_id();
.
Und diese tut nichts anderes als
Es sieht für mich bei beiden Varianten nicht nach viel Spielraum für Fehler aus.
Was mir in diesem Moment nur einfällt und was ich auch gleich bei vorherigen Fällen nochmal überprüfen werde ist, dass der einzige Fehler, der soetwas verursachen könnte wäre, dass schlicht kein neuer customer angelegt wurde. Das würde vieles erklären, z.B. dass nur die Versandadresse vorhanden ist (aus dem address_book), beide anderen Werte, also Kunden- und Rechnungsadresse werden vom vorherigen Kunden geladen.
Edit: Ich habe es währenddessen überprüft, leider sind die alten Fälle(customer) schon gelöscht da ja die Option für das Löschen der Gastkonten aktiviert war...
Nochmal zu einem Lösungsansatz: das Problem scheint zu sein, dass eine falsche ID für den Eintrag in das address_book benutzt wird. Was wäre also, würde man dies wie folgt überprüft?
create_guest_account.php, ab Zeile 235:
xtc_db_perform
(TABLE_CUSTOMERS
, $sql_data_array); $_SESSION['customer_id'] = xtc_db_insert_id
(); $sql_data_array = array ( 'customers_id' => $_SESSION['customer_id'], wird zu:
xtc_db_perform
(TABLE_CUSTOMERS
, $sql_data_array); $_SESSION['customer_id'] = xtc_db_insert_id
(); $customer_id_check_query="SELECT customers_id
FROM
".TABLE_CUSTOMERS
."
WHERE
customers_firstname='".$firstname."'' and
customers_lastname='".$lastname."' and
customers_email_address='".$email_address."'"; $customer_id_check_query = xtDBquery
($customer_id_check_query); $db_customer_id = xtc_db_fetch_array
($customer_id_check_query,true); if($db_customer_id!==$_SESSION['customer_id']) die('Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie uns umgehend mit dem Codewort #mysteriöserfehler'); $sql_data_array = array ( 'customers_id' => $_SESSION['customer_id'], Oder gibt es einen besseren Vorschlag?
Edit: bzw. könnte man direkt das Resultat der Abfrage als neue customer_id integrieren. Das ist nicht sonderlich performant, sollte allerdings ein Fehler irgendwo vorher enstanden sein gibt es hier 1. entweder kein Ergebnis oder 2. genau das was gesucht wird.
Vielleicht prüft man auch einfach darauf ob überhaupt ein Kunde vorhanden ist.
Sollte ich nicht irgendetwas übersehen haben, ist dieser Punkt doch der einzige an dem ein Fehler entstehen könnte mit einer Ursache (kein customer angelegt) die auf die gesamte Problematik inkl. der Auswirkungen zutrifft.
Möglicherweise bin ich auch zu fixiert auf diesen Punkt, jeder Rat oder Denkanstoß ist sehr wünschenswert.