Fehlerbehebung
PrestaShopException: Invalid address diagnostizieren
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
- Fehler „Argument X passed OrderProductForViewing must be of the type string“ Ermitteln Sie das genaue Argument und die genaue Zeile, die beim Anzeigen einer PrestaShop-Bestellun...
- Fehler „Shop not found at line xxx in file classes/shop/Shop.php“ Finden Sie die Ursache von Shop not found, indem Sie die angeforderte URL, shop_url und den Geltungs...
- PrestaShop, übermäßige Größe der Tabelle layered_filter_block Messen und leeren Sie den Cache der Facettensuche, unterscheiden Sie ihn vom Preisindex und aktualis...
- Zeitzonenfehler von GLPI mit MariaDB oder MySQL Unterscheiden Sie zwischen nicht geladenen Zeitzonendaten und der Berechtigung, die nur GLPI-Version...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.