Jump to content

Error 500 La propiedad Address->id_country está vacía. PS 1.7.1.1


ales699

Recommended Posts

Ya llevo semanas con este error y no soy capaz de solucionarlo. He probado a cambiar permisos, modificar el address.php... y sigue dandome este error, he buscado y buscado, estoy desesperado...

 

El error ocurre cuando cubro los datos de dirección a la hora de realizar un pedido después de pulsar en el botón "continuar".

[PrestaShopException]

La propiedad Address->id_country está vacía.
at line 944 in file classes/ObjectModel.php

939.             }
940. 
941.             $message = $this->validateField($field, $this->$field);
942.             if ($message !== true) {
943.                 if ($die) {
944.                     throw new PrestaShopException($message);
945.                 }
946.                 return $error_return ? $message : false;
947.             }
948.         }
949. 
ObjectModelCore->validateFields - [line 272 - classes/ObjectModel.php]
267.      * @return array All object fields
268.      * @throws PrestaShopException
269.      */
270.     public function getFields()
271.     {
272.         $this->validateFields();
273.         $fields = $this->formatFields(self::FORMAT_COMMON);
274. 
275.         // For retro compatibility
276.         if (Shop::isTableAssociated($this->def['table'])) {
277.             $fields = array_merge($fields, $this->getFieldsShop());
ObjectModelCore->getFields - [line 683 - classes/ObjectModel.php]
678. 
679.         if (Shop::checkIdShopDefault($this->def['table']) && !$this->id_shop_default) {
680.             $this->id_shop_default = (in_array(Configuration::get('PS_SHOP_DEFAULT'), $id_shop_list) == true) ? Configuration::get('PS_SHOP_DEFAULT') : min($id_shop_list);
681.         }
682.         // Database update
683.         if (!$result = Db::getInstance()->update($this->def['table'], $this->getFields(), '`'.pSQL($this->def['primary']).'` = '.(int)$this->id, 0, $null_values)) {
684.             return false;
685.         }
686. 
687.         // Database insertion for multishop fields related to the object
688.         if (Shop::isTableAssociated($this->def['table'])) {
ObjectModelCore->update - [line 202 - classes/Address.php] - [1 Arguments]
197. 
198.         if (Validate::isUnsignedId($this->id_customer)) {
199.             Customer::resetAddressCache($this->id_customer, $this->id);
200.         }
201. 
202.         return parent::update($null_values);
203.     }
204. 
205.     /**
206.      * @see ObjectModel::delete()
207.      */
AddressCore->update - [line 219 - classes/Address.php]
214.         if (!$this->isUsed()) {
215.             return parent::delete();
216.         } else {
217.             $this->deleted = true;
218. 
219.             return $this->update();
220.         }
221.     }
222. 
223.     /**
224.     * Returns fields required for an address in an array hash
AddressCore->delete - [line 73 - classes/form/CustomerAddressPersister.php]
68. 
69.         if ($address->isUsed()) {
70.             $old_address = new Address($address->id);
71.             $address->id = $address->id_address = null;
72. 
73.             return $address->save() && $old_address->delete();
74.         }
75. 
76.         return $address->save();
77.     }
78. 
CustomerAddressPersisterCore->save - [line 163 - classes/form/CustomerAddressForm.php] - [2 Arguments]
158.         $this->address = $address;
159. 
160.         return $this->persister->save(
161.             $this->address,
162.             $this->getValue('token')
163.         );
164.     }
165. 
166.     public function getAddress()
167.     {
168.         return $this->address;
CustomerAddressFormCore->submit - [line 111 - classes/checkout/CheckoutAddressesStep.php]
106.             'firstname' => $this->getCheckoutSession()->getCustomer()->firstname,
107.             'lastname' => $this->getCheckoutSession()->getCustomer()->lastname,
108.         ));
109. 
110.         if (isset($requestParams['saveAddress'])) {
111.             $saved = $this->addressForm->fillWith($requestParams)->submit();
112.             if (!$saved) {
113.                 $this->step_is_current = true;
114.                 $this->getCheckoutProcess()->setHasErrors(true);
115.                 if ($requestParams['saveAddress'] === 'delivery') {
116.                     $this->show_delivery_address_form = true;
CheckoutAddressesStepCore->handleRequest - [line 57 - classes/checkout/CheckoutProcess.php] - [1 Arguments]
52.     }
53. 
54.     public function handleRequest(array $requestParameters = array())
55.     {
56.         foreach ($this->getSteps() as $step) {
57.             $step->handleRequest($requestParameters);
58.         }
59. 
60.         return $this;
61.     }
62. 
CheckoutProcessCore->handleRequest - [line 202 - controllers/front/OrderController.php] - [1 Arguments]
197.         }
198. 
199.         $this->restorePersistedData($this->checkoutProcess);
200.         $this->checkoutProcess->handleRequest(
201.             Tools::getAllValues()
202.         );
203. 
204.         $presentedCart = $this->cart_presenter->present($this->context->cart);
205. 
206.         if (count($presentedCart['products']) <= 0 || $presentedCart['minimalPurchaseRequired']) {
207.             Tools::redirect('index.php?controller=cart');
OrderControllerCore->initContent - [line 205 - classes/controller/Controller.php]
200.             if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className))) {
201.                 $this->initHeader();
202.             }
203. 
204.             if ($this->viewAccess()) {
205.                 $this->initContent();
206.             } else {
207.                 $this->errors[] = $this->trans('Access denied.', array(), 'Admin.Notifications.Error');
208.             }
209. 
210.             if (!$this->content_only && ($this->display_footer || (isset($this->className) && $this->className))) {
ControllerCore->run - [line 369 - classes/Dispatcher.php]
364.             if (isset($params_hook_action_dispatcher)) {
365.                 Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
366.             }
367. 
368.             // Running controller
369.             $controller->run();
370. 
371.             // Execute hook dispatcher after
372.             if (isset($params_hook_action_dispatcher)) {
373.                 Hook::exec('actionDispatcherAfter', $params_hook_action_dispatcher);
374.             }
DispatcherCore->dispatch - [line 28 - index.php]
23.  * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
24.  * International Registered Trademark & Property of PrestaShop SA
25.  */
26. 
27. require(dirname(__FILE__).'/config/config.inc.php');
28. Dispatcher::getInstance()->dispatch();

Utilizo una plantilla comprada y cuando la tengo de fábrica parece que funciona pero en cuanto edito el theme.css o el custom.css para cambios menores(como tamaño de la fuente, colores, iconos...) aparece de nuevo este error, ¿estará relacionado?

 

Muchas gracias!!

post-1390849-0-46696400-1495447468_thumb.png

Link to comment
Share on other sites

1º Yo comprobaria en el bug tracker: http://forge.prestashop.com/secure/Dashboard.jspa  a ver si alguien le ha salido el mismo error, no sea que sea un bug de tu version.

 

2º ¿Dices que usas una plantilla distinta a la de por defecto y con esa no te va pero con la de por defecto no te funciona? (¿Has contactado con el desarrollador de la plantilla?)

 

3º Por otro lado en stackoverflow he visto esto: https://stackoverflow.com/questions/42413535/prestashop-1-7-unable-to-save-order-address pero no me tienta mucho, de todos modos miralo

Link to comment
Share on other sites

1º Yo comprobaria en el bug tracker: http://forge.prestashop.com/secure/Dashboard.jspa  a ver si alguien le ha salido el mismo error, no sea que sea un bug de tu version.

 

2º ¿Dices que usas una plantilla distinta a la de por defecto y con esa no te va pero con la de por defecto no te funciona? (¿Has contactado con el desarrollador de la plantilla?)

 

3º Por otro lado en stackoverflow he visto esto: https://stackoverflow.com/questions/42413535/prestashop-1-7-unable-to-save-order-address pero no me tienta mucho, de todos modos miralo

 

Hola, gracias por contestar!

 

1º Ya he mirado varias veces y he publicado mi error pero no he tenido respuesta.

 

2º No, con la de defecto del prestashop si funciona. A ver, explico con calma:

 

He montado una nueva tienda con esta plantilla: https://addons.prestashop.com/es/temas-coches-motos/25894-air-tools-store.html

Cuando estoy con los productos de muestra del prestashop todo funciona correctamente (incluso con mis css editados), pero en cuanto importo mis productos y pruebo a hacer una compra ocurre este error.

 

He probado a instalar la plantilla air tools de fabrica y importar los productos, y ahí si me han funcionado, pero en cuanto edito o toco lo más mínimo, este error aparece de nuevo.

 

No he hablado aun con el desarrollador porque se me ha acabado el periodo soporte, pero si no me queda otra lo haré.

 

3º Lo he mirado pero no me ha sacado de nada, ya que no se donde tengo que tocar para arreglarlo.

 

Os dejo el dominio donde estoy haciendo pruebas: http://www.jgprofessional.com/es/pedido

 

La verdad es que me está volviendo loco este error... Agradecería muchísimo la ayuda  :(

Link to comment
Share on other sites

  • 3 months later...
  • 5 months later...
  • 2 weeks later...

Hola a todos, tenía el mismo problema, pero con el campo "ciudad", encontré la solución, que es bastante sencilla en realidad y sin necesidad de meterse en el código, y la comparto en el foro por si fuese de utilidad para alguien más. También he visto foros en inglés que tenían el mismo problema para el campo "phone", e imagino que puede servir también.

  1. Prestashop en modo "debug":

El modo "debug" permite identificar cuál es el campo que está originando el problema

A partir de PrestaShop v1.5.3 (fuente original en francés):

    Abrir config/defines.inc.php

    En la línea 28 (o cercana) encontrar define('_PS_MODE_DEV_', false);

    Cambiarlo por define('_PS_MODE_DEV_', true);

2. Identificar el campo vacío:

Puede ser "ciudad" o "país", por ejemplo.

3. Agregar el campo que falta:

Para este paso, ir al back-office -> Ubicaciones Geográficas -> Países y, darle click sobre el país que estés editando, agregando el campo faltante en la lista, tal como se muestra en la imagen a continuación (fuente, mucho más extensa y muy útil: modificar campos en el formulario de registro en Prestashop)

Eso es todo, espero les sea de utilidad.

 

captura-de-pantalla.jpg

Edited by Fremont (see edit history)
Link to comment
Share on other sites

59 minutes ago, Fremont said:

Hola a todos, tenía el mismo problema, pero con el campo "ciudad", encontré la solución, que es bastante sencilla en realidad y sin necesidad de meterse en el código, y la comparto en el foro por si fuese de utilidad para alguien más. También he visto foros en inglés que tenían el mismo problema para el campo "phone", e imagino que puede servir también.

  1. Prestashop en modo "debug":

El modo "debug" permite identificar cuál es el campo que está originando el problema

A partir de PrestaShop v1.5.3 (fuente original en francés):

    Abrir config/defines.inc.php

    En la línea 28 (o cercana) encontrar define('_PS_MODE_DEV_', false);

    Cambiarlo por define('_PS_MODE_DEV_', true);

2. Identificar el campo vacío:

Puede ser "ciudad" o "país", por ejemplo.

3. Agregar el campo que falta:

Para este paso, ir al back-office -> Ubicaciones Geográficas -> Países y, darle click sobre el país que estés editando, agregando el campo faltante en la lista, tal como se muestra en la imagen a continuación (fuente, mucho más extensa y muy útil: modificar campos en el formulario de registro en Prestashop)

Eso es todo, espero les sea de utilidad.

 

captura-de-pantalla.jpg

Como curiosidad comento.

Que en mi paso particular tenia el formato de dirección correctamente y fue por un tema especifico de la plantilla que tuve que arreglar comparando la plantilla por defecto con la que se estaba usando.

No es la primera vez que me ha ocurrido teniendo bien el formato de dirección, muchas veces te encuentras con cada plantilla que da espanto.

Link to comment
Share on other sites

Muchachos el problema de la dirección es por el phone_mobile (creo que es un bug)

 

Agréguenlo al sitio y verán que funciona...

firstname lastname
address1
address2
postcode city
Country:name
phone
phone_mobile

 

Yo tampoco puedo actualizar desde la versión 1.7.2.4 a 1.7.3 ... me da error

  • Thanks 1
Link to comment
Share on other sites

  • 1 month later...
  • 3 months later...
On 18/4/2018 at 4:16 AM, ITIS-Commerce.com said:

Hi,
It is a bug in Prestashop, please replace \classes\form\CustomerAddressPersister.php with my attached one to fix it.
Best regards.

CustomerAddressPersister.zip

 

Hello I´replaced the file, and the issue persists, PS1.7.4.1, HTTP 500 Error, when a customer try add a new address from Account Dashboard and/or Checkout. If the customer reload the webpage the address is registered correctly. Any ideas?

Link to comment
Share on other sites

  • 1 month later...

Ejem, no sé si será vuestro caso, pero en el mío se ha arreglado con una chorrada TAN GRANDE como simplemente definir el país por defecto. He mirado lo del id_country vacío y todo eso, pero las zonas internacionales estaban bien definidas, el formulario de la dirección también estaba bien. Pero al ir a mirar el país por defecto he visto que me tenía puesto Argelia (el primer país de la lista), ha sido ir a Internacional/Localización y establecer el país predeterminado ahí y... funciona perfectamente. Ah, sí, por si acaso no estaba hecho también he importado la configuración y datos de España. Ahora me muestra el formulario correctamente y me deja pasar a la siguiente pantalla.

Espero que esto os ayude.

Link to comment
Share on other sites

He hablado demasiado rápido, si entras como invitado TIENES que poner CONTRASEÑA si Prestashop te la tiene que crear entonces no deja pasar de esa pestaña. Ahora sólo tengo que ver cómo decirle al cliente que la contraseña es obligatoria...

Link to comment
Share on other sites

  • 4 weeks later...
6 hours ago, RubenMing said:

Hola el problema parece relacionado con el archivo CustomerAddressPersister.php ya que falta una instrucción para que guarde correctamente la dirección. He encontrado aquí una solución, que por lo menos a mi me ha funcionado, espero ayude.

En la rama de desarrollo de la 1.7.5 https://github.com/PrestaShop/PrestaShop/blob/1.7.5.x/classes/form/CustomerAddressPersister.php no viene aplicado ese cambio que propones de colocar => $address->save(); antes de $address->id_customer = $this->customer->id; en la función public function save(Address $address, $token)

¿Seguro que tu cambio no provoca que se salten los campos obligatorios que no están metidos en el formato de dirección? Lo digo porque si fuera así,  es peligroso.

En mi caso el error mencionado en el título (no tengo la 1.7.1, tengo una más avanzada) era porque no tenia el país metido (en mi caso el país, en otros casos depende el campo que de error) en el formato de dirección, tal como menciona => https://www.prestashop.com/forums/topic/611008-error-500-la-propiedad-address-id_country-está-vacía-ps-1711/?do=findComment&comment=2696763

Edited by Sergio Ruiz (see edit history)
Link to comment
Share on other sites

  • 2 years later...
On 3/1/2018 at 1:04 PM, Fremont said:

Hola a todos, tenía el mismo problema, pero con el campo "ciudad", encontré la solución, que es bastante sencilla en realidad y sin necesidad de meterse en el código, y la comparto en el foro por si fuese de utilidad para alguien más. También he visto foros en inglés que tenían el mismo problema para el campo "phone", e imagino que puede servir también.

captura-de-pantalla.jpg

 

GRACIAS! Me sirvió el dato. En mi caso, en mi país no se utiliza Código Postal, así que lo eliminé, pero no me di cuenta que estaba pegado con "CIUDAD" y que también borré ese campo. Gracias a tu respuesta pude observar que ese campo me faltaba y ahora que lo agregué por separado no tengo problemas.

Consejo: VERIFIQUEN QUE TENGAN TODOS LOS DATOS OBLIGATORIOS EN EL PANEL DE FORMATO.

Saludos!

Link to comment
Share on other sites

  • 5 months later...

Tenía este mismo problema y después de revisar todas las posibles soluciones aquí. Encontre la solución para mi problema con la mención de Ruben Ming. Encontré una publicación de referencia para modificar el archivo donde el indica. https://rubenming.com/errores-bugs-prestashop/error-prestashop-property-address-id_country-empty-al-crear-direccion/

Mi problema era al igual que varios, que al dar de alta la dirección el usuario, al llegar a este punto en el checkout, al momento de dar de alta la dirección te redirecciona al 500 Error en lugar de seguir al tipo de envio, pero si daba de alta la dirección realmente al regresar página. el Error fue eliminado modificando el archivo CustomerAddressPersister.php como indicado en la publicación indicada arriba

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...