ales699 Posted May 22, 2017 Share Posted May 22, 2017 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!! Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted May 22, 2017 Share Posted May 22, 2017 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 More sharing options...
ales699 Posted May 23, 2017 Author Share Posted May 23, 2017 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 More sharing options...
V4Z!LY Posted August 24, 2017 Share Posted August 24, 2017 Hello Did you find a way to make it work? I have exacty the same problem. Thank's in advance Ruben Link to comment Share on other sites More sharing options...
franky.martin Posted February 20, 2018 Share Posted February 20, 2018 Hola, yo tengo el mismo error en las páginas de pedido al darle al botón pasar por caja., ¿alguna solución? Link to comment Share on other sites More sharing options...
Fremont Posted March 1, 2018 Share Posted March 1, 2018 (edited) 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. 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. Edited March 1, 2018 by Fremont (see edit history) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted March 1, 2018 Share Posted March 1, 2018 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. 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. 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 More sharing options...
Diego Galma Posted March 8, 2018 Share Posted March 8, 2018 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 1 Link to comment Share on other sites More sharing options...
ITIS-Commerce.com Posted April 18, 2018 Share Posted April 18, 2018 Hi, It is a bug in Prestashop, please replace \classes\form\CustomerAddressPersister.php with my attached one to fix it. Best regards. CustomerAddressPersister.zip 1 Link to comment Share on other sites More sharing options...
SMALLJIM Posted July 27, 2018 Share Posted July 27, 2018 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 More sharing options...
Vict0r Posted August 29, 2018 Share Posted August 29, 2018 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 More sharing options...
Vict0r Posted August 29, 2018 Share Posted August 29, 2018 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 More sharing options...
kolmen Posted September 3, 2018 Share Posted September 3, 2018 do you fix this? Link to comment Share on other sites More sharing options...
RubenMing Posted October 1, 2018 Share Posted October 1, 2018 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. 1 Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted October 1, 2018 Share Posted October 1, 2018 (edited) 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 October 1, 2018 by Sergio Ruiz (see edit history) Link to comment Share on other sites More sharing options...
JR1000 Posted November 6, 2020 Share Posted November 6, 2020 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. 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 More sharing options...
Arnoldo Tapia Posted April 7, 2021 Share Posted April 7, 2021 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now