Votre base clients Prestashop est-elle 100% valide ?

Depuis déjà un certain temps, je remarque que chez beaucoup de clients utilisant Prestashop, les données ne sont pas toujours 100% intègre. Cela signifie que dans la base de données certaines valeurs ne sont pas correctes.

Erreur sous Prestashop

Des erreurs invisibles

Un des cas rencontrés par exemple récemment, c’est un client d’une boutique qui ne pouvait plus se connecter sur sur la page d’identification. Celui-ci mentionne au marchand qu’il n’arrive pas à se connecter, car Prestashop affiche une erreur lors de la connexion. Plus tard en analysant la base de données du marchand, je constate que certaines valeurs dans la base de données ne sont pas approuvées par Prestashop et causent différents blocages.

Difficile de localiser une erreur dans la base de données, le plus souvent c'est à l'utilisation ou lorsqu'un client fait une remarque qu'on se doute qu'il doit y avoir un bug quelque part.
Difficile de localiser une erreur dans la base de données, le plus souvent c’est à l’utilisation ou lorsqu’un client fait une remarque qu’on se doute qu’il doit y avoir un bug quelque part.

Comment expliquer l’origine de ces problèmes

Ce qu’il faut comprendre, c’est que Prestashop utilise un modèle de validation des données, c’est-à-dire qu’au moment de sauver un enregistrement les données sont contrôlées pour être 100% valide selon leurs exigences. Malgré tout, ce contrôle peut-être outrepassé pour les raisons suivantes :

  • Migration d’une plateforme externe ex. OScommerce, Magento (etc…) vers Prestashop.
  • Mise à jour d’une ancienne version Prestashop vers une version courante.
  • Importation de données dans Prestashop (depuis le back-office ou via un outil tiers).
  • Utilisation de modules n’utilisant pas forcément les classes natives de Prestashop.
  • Opérations manuelles SQL sur la base de données.
Si toutes les règles affichées ici ne sont pas respectées pour le client à charger ou à sauver, Prestashop va provoquer une erreur fatale. L'erreur critique peut même se produire pour la lecture des données (pas seulement lors de la modification).
Si toutes les règles affichées ici ne sont pas respectées pour le client à charger ou à sauver, Prestashop va provoquer une erreur fatale. L’erreur critique peut même se produire pour la lecture des données (pas seulement lors de la modification).

Est-ce que j’ai des erreurs dans ma base ?

Nous allons faire le test pour vos clients, créez un fichier « customers.php » dans le dossier suivant « /modules/scripts » et ajoutez le contenu suivant dans le fichier.

/*
 * Webbax - contrôle validité des clients
 * 
 */
include(dirname(__FILE__).'/../../config/config.inc.php');
$customers = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'customer`');
foreach($customers as $c){
    $Customer = new Customer($c['id_customer']);
    if(!$Customer->validateFields(false)){
       $err = $Customer->validateFields(false,true);
       echo $err.'<br/>';
       p($Customer);
    }
}

if(!isset($err)){
    echo 'Aucune erreur dans votre base clients';
}

Ce code va lire vos enregistrements et afficher une erreur sur l’enregistrement client comportant l’erreur. Dans votre cas pour voir le résultat il suffit d’exécuter l’url suivante : http://votreshop.com/modules/scripts/customers.php.

Lors de l’exécution de l’url ci-dessus, vous obtiendrez une erreur si vous avez des problèmes dans vos enregistrements. Par exemple ici on nous mentionne « Customer->firstname is empty », il manque le prénom pour le client portant l’id numéro 1.

Même si cela peut sembler impossible, vous pouvez avoir des clients par exemple sans nom, ou avec une date d'anniversaire incorrecte ou hors tranche (cas fréquent).
Même si cela peut sembler impossible, vous pouvez avoir des clients par exemple sans nom, ou avec une date d’anniversaire incorrecte ou hors tranche (cas fréquent).
Dans la base de données sous PHPmyAdmin, le champ est effectivement vide, on va donc le remplir avec une valeur.
Dans la base de données sous PHPmyAdmin, le champ est effectivement vide, on va donc le remplir avec une valeur.
A présent si j'exécute à nouveau mon url, les clients sont tous considérés comme "valides".
A présent si j’exécute à nouveau mon url, les clients sont tous considérés comme « valides ».

Cela est valable pour tous les autres enregistrements

Dans le cas présent on a pris l’exemple des clients, mais il n’est pas rare d’avoir vu ce problème de cohérence par exemple sur les produits ou encore sur les commandes. Je l’ai aussi déjà constaté en exportant des informations depuis certaines boutiques, Prestashop refuse de le faire, car l’enregistrement n’est pas intègre. Si vous cherchez à creuser plus loin, vous pouvez utiliser la même logique de script pour contrôler d’autres tables.

Bilan

Il est toujours difficile d’expliquer l’origine de ces erreurs, mais il est important de les rectifier. Par exemple dans le cas d’un marchand, certains enregistrements empêchaient la relance du bon cadeau pour l’anniversaire du client. On se retrouve ensuite avec un module paralysé en permanence pour tous les autres clients, tout ça pour quelques enregistrements obsolètes.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *