Jump to content

[Résolu] Gros bug suite à changement de thème


Recommended Posts

Bonjour, 

 

J'ai tenté d'installer un nouveau thème sur ma boutique existante puis voyant qu'il ne fonctionnait pas, j'ai fais une restauration via le phpmyadmin.

Hors, depuis cette restauration, je ne peux plus naviguer dans mon frontoffice sans avoir de message d'erreur, par exemple pour l'installation d'un module, j'ai ce message d'erreur : 

 

[PrestaShopDatabaseException]

Db->executeS() must be used only with select, show, explain or describe queries
at line 488 in file classes/db/Db.php

482.
483.         // This method must be used only with queries which display results
484.         if (!preg_match('#^\s*\(?\s*(select|show|explain|describe|desc)\s#i', $sql))
485.         {
486.             if (defined('_PS_MODE_DEV_') && _PS_MODE_DEV_)
487.                 throw new PrestaShopDatabaseException('Db->executeS() must be used only with select, show, explain or describe queries');
488.             return $this->execute($sql, $use_cache);
489.         }
490.
491.         $this->result = false;
492.         $this->last_query = $sql;
  • DbCore->executeS - [line 78 - modules/shopymind/shopymind.php] - [1 Arguments]
    72.      //Suppression doublons
    73.      Db::getInstance()->Execute('ALTER IGNORE TABLE `' . _DB_PREFIX_ . $infos[0] . '` ADD UNIQUE INDEX ('.$infos[1].')');
    74.      Db::getInstance()->Execute('ALTER TABLE `' . _DB_PREFIX_ . $infos[0] . '` DROP INDEX '.$infos[1].'');
    75.      Db::getInstance()->Execute('ALTER TABLE `' . _DB_PREFIX_ . $infos[0] . '` ADD PRIMARY KEY ('.$infos[1].')');
    76.     }
    77.     Db::getInstance()->ExecuteS('UPDATE `' . _DB_PREFIX_ .'spmcartoorder` SET `date_upd` = "'.date('Y-m-d H:i:s').'" WHERE `date_upd` = "0000-00-00 00:00:00";');
    78.
    79. if ((is_array($this->_errors) && count($this->_errors)) || !parent::install() || !$this->registerHook('header') || !$this->registerHook('footer') || !$this->registerHook('paymentConfirm') || !$this->registerHook('updateOrderStatus'))
    80. return false;
    81.
    82. return true;
  • ShopyMind->install - [line 805 - controllers/admin/AdminModulesController.php]
    799.                         // We check if method of module exists
    800.                             if (!method_exists($module, $method))
    801.                                 throw new PrestaShopException('Method of module cannot be found');
    802.
    803.                             // Get the return value of current method
    804.                             $echo = $module->{$method}();
    805.
    806.                             // After a successful install of a single module that has a configuration method, to the configuration page
    807.                             if ($key == 'install' && $echo === true && strpos(Tools::getValue('install'), '|') === false && method_exists($module, 'getContent'))
    808.                                 Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&configure='.$module->name.'&conf=12');
    809.                         }
  • AdminModulesControllerCore->postProcessCallback - [line 1045 - controllers/admin/AdminModulesController.php]
    1039.                     $ppmReturn = $this->$ppm();
    1040.             }
    1041.
    1042.         // Call appropriate module callback
    1043.         if (!isset($ppmReturn))
    1044.             $this->postProcessCallback();
    1045.
    1046.         if ($back = Tools::getValue('back'))
    1047.             Tools::redirectAdmin($back);
    1048.     }
    1049.
  • AdminModulesControllerCore->postProcess - [line 171 - classes/controller/Controller.php]
    165.             // setMedia MUST be called before postProcess
    166.             if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
    167.                 $this->setMedia();
    168.
    169.             // postProcess handles ajaxProcess
    170.             $this->postProcess();
    171.
    172.             if (!empty($this->redirect_after))
    173.                 $this->redirect();
    174.
    175.             if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
  • ControllerCore->run - [line 373 - classes/Dispatcher.php]
    367.             // Execute hook dispatcher
    368.             if (isset($params_hook_action_dispatcher))
    369.                 Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
    370.
    371.             // Running controller
    372.             $controller->run();
    373.         }
    374.         catch (PrestaShopException $e)
    375.         {
    376.             $e->displayMessage();
    377.         }
  • DispatcherCore->dispatch - [line 54 - admin/index.php]
    48.     $_POST['controller'] = strtolower($_POST['tab']);
    49. if (!isset($_REQUEST['controller']) && isset($_REQUEST['tab']))
    50.     $_REQUEST['controller'] = strtolower($_REQUEST['tab']);
    51.
    52. // Prepare and trigger admin dispatcher 
    53. Dispatcher::getInstance()->dispatch();
 
savez vous ce qu'il faut faire ?
 
Link to comment
Share on other sites

Bonjour,

L'erreur décrite pour l'installation de ton module n'a à priori rien à voir avec l'installation de ton thème.

Le module shopymind a une coquille dans son code, vous pouvez soit demander au développeur de la corriger, soit le faire vous même. Dans le principe, il faut ouvrir le fichier "modules/shopymind/shopymind.php", aller à la ligne 78

et remplacer :

Db::getInstance()->ExecuteS('UPDATE `' . _DB_PREFIX_ .'spmcartoorder` SET `date_upd` = "'.date('Y-m-d H:i:s').'" WHERE `date_upd` = "0000-00-00 00:00:00";');

par

Db::getInstance()->Execute('UPDATE `' . _DB_PREFIX_ .'spmcartoorder` SET `date_upd` = "'.date('Y-m-d H:i:s').'" WHERE `date_upd` = "0000-00-00 00:00:00";');

Quel est le problème côté front ?

Edited by Fabien Serny (see edit history)
  • Like 1
Link to comment
Share on other sites

Bonjour Sandra,

 

En effet, vous avez un bug avec votre module shopymind.

Comme indiqué dans le message d'erreur, le module souhaite mettre à jour une donnée dans la base via la méthode ExecuteS().

Cette méthode ne peut servir qu'à récupérer des données, non à les mettre à jour.

 

Je vous invite à contacter le développeur du module afin de corriger le problème.

Une solution rapide consiste à modifier le fichier 'modules/shopymind/shopymind.php' et enlever le 'S' à ExecuteS(). Il ne devrait alors rester que : Db::getInstance()->execute('UPDATE `' . _DB_PREFIX_ .'spmcartoorder` ...

 

Bonne journée Sandra.

  • Like 1
Link to comment
Share on other sites

2 choses:

- Un theme qui plante, pas besoin de toucher à phpmyadmin , juste passez au thème par défaut et supprimer celui qui pose problème

- L'erreur décrite ici vient du module "shopymind" qui a une erreur de codage. A voir avec son développeur...

Link to comment
Share on other sites

Bonjour, 

 

Merci à vous tous..

Le soucis est que j'ai des messages d'erreur à chaque installations de module depuis que j'ai installé le nouveau thème, je ne peux plus accéder à mon site.. 

J'ai donc fais une restauration afin de passer sur l'ancien et le problème persiste..

Je suis débutante et je n'y comprends absolument rien !

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

Voilà ce que j'obtiens quand j'essaye d'aller sur ma boutique www.choupachou.com

 

[PrestaShopDatabaseException]

Table 'db546367164.xarqi5zp0_wpblocktopmenu' doesn't exist
 

SELECT * FROM `xarqi5zp0_wpblocktopmenu` order by `order`
at line 635 in file classes/db/Db.php

 

629.             WebserviceRequest::getInstance()->setError(500, '
 '.$this->getMsgError().'. From '.(isset($dbg[3]['class']) ? $dbg[3]['class'] : '').'->'.$dbg[3]['function'].'() Query was : '.$sql, 97);
630.         }
631.         else if (_PS_DEBUG_SQL_ && $errno && !defined('PS_INSTALLATION_IN_PROGRESS'))
632.         {
633.             if ($sql)
634.                 throw new PrestaShopDatabaseException($this->getMsgError().'<br /><br /><pre>'.$sql.'</pre>');
635.             throw new PrestaShopDatabaseException($this->getMsgError());
636.         }
637.     }
638.
639.     /**
  • DbCore->displayError - [line 325 - classes/db/Db.php] - [1 Arguments]
    319.         if ($sql instanceof DbQuery)
    320.             $sql = $sql->build();
    321.
    322.         $this->result = $this->_query($sql);
    323.         if (_PS_DEBUG_SQL_)
    324.             $this->displayError($sql);
    325.         return $this->result;
    326.     }
    327.
    328.     /**
    329.      * Execute an INSERT query
  • DbCore->query - [line 501 - classes/db/Db.php] - [1 Arguments]
    Argument [0]
    SELECT * FROM `xarqi5zp0_wpblocktopmenu` order by `order`
  • DbCore->executeS - [line 463 - modules/blank_blocktopmenu/blank_blocktopmenu.php] - [1 Arguments]
    457.
    458.
    459. private function getMenuItems()
    460. {
    461.
    462. $items=Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'wpblocktopmenu` order by `order`');
    463. $results=array();
    464.
    465. /* $this->reorderItems($items,$results);*/
    466.
    467. return $items;
  • blank_blocktopmenu->getMenuItems - [line 570 - modules/blank_blocktopmenu/blank_blocktopmenu.php]
    564.
    565. private function makeMenu()
    566. {
    567.         global $cookie, $page_name;
    568.          $curr_level=1;
    569. foreach($this->getMenuItems() as $key=>$item)
    570. {
    571. extract($item);
    572.
    573.
    574. if ($depth>$curr_level) {$this->_menu.='<ul>';}
  • blank_blocktopmenu->makeMenu - [line 706 - modules/blank_blocktopmenu/blank_blocktopmenu.php]
    700.     }
    701.     
    702. public function hooktop($param)
    703. {
    704.         global $smarty;
    705.         $this->makeMenu();
    706.         
    707.         $smarty->assign('MENU_SEARCH', Configuration::get('MOD_wpblocktopmenu_SEARCH'));
    708.         $smarty->assign('MENU', preg_replace('~>\s+<~', '><', $this->_menu));
    709.         $smarty->assign('this_path', $this->_path);
    710. return $this->display(__FILE__, 'blank_blocktopmenu.tpl');
  • blank_blocktopmenu->hooktop - [line 509 - classes/Hook.php] - [1 Arguments]
    503.
    504.                 // Call hook method
    505.                 if ($hook_callable)
    506.                     $display = $moduleInstance->{'hook'.$hook_name}($hook_args);
    507.                 elseif ($hook_retro_callable)
    508.                     $display = $moduleInstance->{'hook'.$retro_hook_name}($hook_args);
    509.                 // Live edit
    510.                 if (!$array_return && $array['live_edit'] && Tools::isSubmit('live_edit') && Tools::getValue('ad') && Tools::getValue('liveToken') == Tools::getAdminToken('AdminModulesPositions'.(int)Tab::getIdFromClassName('AdminModulesPositions').(int)Tools::getValue('id_employee')))
    511.                 {
    512.                     $live_edit = true;
    513.                     $output .= self::wrapLiveEdit($display, $moduleInstance, $array['id_hook']);
  • HookCore::exec - [line 448 - classes/controller/FrontController.php] - [1 Arguments]
    442.         {
    443.             // These hooks aren't used for the mobile theme.
    444.             // Needed hooks are called in the tpl files.
    445.             $this->context->smarty->assign(array(
    446.                 'HOOK_HEADER' => Hook::exec('displayHeader'),
    447.                 'HOOK_TOP' => Hook::exec('displayTop'),
    448.                 'HOOK_LEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayLeftColumn') : ''),
    449.                 'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ''),
    450.             ));
    451.         }
    452.         else
  • FrontControllerCore->initContent - [line 37 - controllers/front/IndexController.php]
    31.      * Assign template vars related to page content
    32.      * @see FrontController::initContent()
    33.      */
    34.     public function initContent()
    35.     {
    36.         parent::initContent();
    37.         $this->addJS(_THEME_JS_DIR_.'index.js');
    38.
    39.         $this->context->smarty->assign(array('HOOK_HOME' => Hook::exec('displayHome'),
    40.             'HOOK_HOME_TAB' => Hook::exec('displayHomeTab'),
    41.             'HOOK_HOME_TAB_CONTENT' => Hook::exec('displayHomeTabContent')
  • IndexControllerCore->initContent - [line 180 - classes/controller/Controller.php]
    174.
    175.             if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
    176.                 $this->initHeader();
    177.
    178.             if ($this->viewAccess())
    179.                 $this->initContent();
    180.             else
    181.                 $this->errors[] = Tools::displayError('Access denied.');
    182.
    183.             if (!$this->content_only && ($this->display_footer || (isset($this->className) && $this->className)))
    184.                 $this->initFooter();
  • ControllerCore->run - [line 373 - classes/Dispatcher.php]
    367.             // Execute hook dispatcher
    368.             if (isset($params_hook_action_dispatcher))
    369.                 Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
    370.
    371.             // Running controller
    372.             $controller->run();
    373.         }
    374.         catch (PrestaShopException $e)
    375.         {
    376.             $e->displayMessage();
    377.         }
  • DispatcherCore->dispatch - [line 28 - index.php]
    22. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
    23. * International Registered Trademark & Property of PrestaShop SA
    24. */
    25.
    26. require(dirname(__FILE__).'/config/config.inc.php');
    27. Dispatcher::getInstance()->dispatch();
Link to comment
Share on other sites

Oulà! avant de tout restaurer/supprimer il faut trouver d'où vient le problème

De plus vous avez activé l'affichage des erreurs (mode dev) ce qui peut effectivement vous bloquer.

 

Si vous voulez, envoyez-moi un accès bo/ftp en MP et je regarderai

  • Like 1
Link to comment
Share on other sites

Bonjour,

 

A priori la restauration a fait des dégâts si des tables manquent :-( 

Dans ce cas précis il faut réinstaller le module blocktopmenu mais il y a surement plein d'autre problème.

 

Ce genre de choses, installation de nouveau modules/thèmes devraient toujours se faire en premier sur une boutique de test. http://www.prestashop.com/blog/fr/serveur-de-test-pour-une-boutique-en-ligne/

 

Là c'est trop tard évidemment va falloir improviser.

 

Bon courage

Link to comment
Share on other sites

Bonjour,

 

Nous venons de voir vos messages concernant l'erreur avec notre module.

 

Nous avons développé le module en interne.

Sachez qu'une mise à jour corrective est disponible sur le site Addons depuis le 11 août 2014. Il vous suffit simplement de mettre à jour le module en le téléchargeant sur notre site ou sur le site Addons.

 

Je reste à votre disposition,

Jean-Sébastien Couvert

Edited by ShopyMind (see edit history)
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...