Fehlerbehebung

PrestaShopException: Invalid address diagnostizieren

Geprüft am 4 Min. Lesezeit Datenbank Fehler PrestaShop

Die Exception Invalid address #ID bedeutet, dass PrestaShop für diese Kennung keine gültige Adresse laden konnte. Anhand des Stacktraces lässt sich feststellen, ob sie von einem Warenkorb, einer Bestellung oder einem Modul stammt; gehen Sie nicht davon aus, dass sich alle Fälle beheben lassen, indem man eine Adresse auf null setzt.

Den Verweis finden

Notieren Sie ID, Aktion, URL und Stacktrace. Arbeiten Sie zuerst mit einer Kopie. Ersetzen Sie PREFIX_ durch das tatsächliche Präfix und <ID> durch die geprüfte Nummer:

SELECT id_address, deleted, active
FROM PREFIX_address
WHERE id_address = <ID>;

SELECT c.id_cart, c.id_address_delivery, c.id_address_invoice, o.id_order
FROM PREFIX_cart c
LEFT JOIN PREFIX_orders o ON o.id_cart = c.id_cart
WHERE c.id_address_delivery = <ID>
   OR c.id_address_invoice = <ID>;

Wenn die Adresse existiert, prüfen Sie ihren Status und die Logik, die sie verwendet, bevor Sie sie ändern. Gibt es eine Bestellung, bewahren Sie deren historische Adresse. Ein nicht existierender Verweis kann erfordern, die Adresse aus einem Backup wiederherzustellen und die Integrität der Bestellung zu prüfen.

Eingeschränkter Fall: Warenkorb ohne Bestellung und nicht existierende Adresse

Nur wenn der Stacktrace diesen Fall bestätigt, ermitteln Sie einen bestimmten Warenkorb und das betroffene Feld. Dieses Beispiel betrifft ausschließlich die Lieferadresse des ausgewählten Warenkorbs, der keine Bestellung hat und dessen Adresse nicht existiert. Ersetzen Sie auch <ID_CARRITO>:

START TRANSACTION;

UPDATE PREFIX_cart c
LEFT JOIN PREFIX_orders o ON o.id_cart = c.id_cart
LEFT JOIN PREFIX_address a ON a.id_address = c.id_address_delivery
SET c.id_address_delivery = 0
WHERE c.id_cart = <ID_CARRITO>
  AND c.id_address_delivery = <ID>
  AND o.id_order IS NULL
  AND a.id_address IS NULL;

SELECT id_cart, id_address_delivery, id_address_invoice
FROM PREFIX_cart
WHERE id_cart = <ID_CARRITO>;

ROLLBACK;

Die Simulation setzt transaktionale Tabellen wie InnoDB und dieselbe Verbindung für alle Anweisungen voraus. Prüfen Sie, dass sich nur die vorgesehene Zeile ändert und ROLLBACK den vorherigen Wert wiederherstellt. Bei MyISAM ist das keine Garantie für ein Zurücksetzen.

Um das Verhalten der Anwendung zu prüfen, bestätigen Sie die Änderung nur im Klon und spielen dort den Warenkorb nach. Eine Webanfrage über eine andere Verbindung sieht die noch nicht bestätigten Änderungen Ihrer Transaktion normalerweise nicht. Der Benutzer muss seine Adresse möglicherweise erneut auswählen.

Ist das fehlerhafte Feld die Rechnungsadresse, bereiten Sie die entsprechende Anweisung vor und testen Sie sie; ändern Sie nicht routinemäßig beide. Behalten Sie in der Produktion ein weiteres, unmittelbar vorher erstelltes Backup und vermeiden Sie gleichzeitige Schreibvorgänge, bevor Sie nur die geprüfte Änderung ausführen. Leeren Sie keine Warenkörbe und normalisieren Sie nicht alle verwaisten Verweise des Shops.

Wenn Sie keine eindeutige Beziehung und ihre Auswirkung ermitteln können, geben Sie den Stacktrace und die Kennungen an den Support oder den Entwickler weiter, ohne personenbezogene Adressdaten beizufügen.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.