Aide - Recherche - Membres - Calendrier
Version complète : [Resolu] Des commandes qui arrivent vides et sous un mauvais compte client
Forum osCommerce-fr > Les Bases d'OsCommerce MS2 > Fonctionnement
mickael34
Bonjour,


Ceci n'est pas une question mais juste une remontée d'expérience sur un problème qui m'a bien pris la tête ces derniers jours.

J'ai lu de "nombreux" posts, pour la plupart assez anciens, sur des problèmes de remontées de commandes "vides".
C'est à dire des commandes sans adresse de livraison ni de facturation et qui le plus souvent ne s'imputaient pas au bon client !
Ce problème était à priori lié aux sessions.

J'ai eu ce même soucis ces derniers jours et cela depuis l'installation d'une nouvelle boxe "promotionnelle" permettant l'inscription à notre newsletter sans pour autant être inscrit comme client :

- Le client se connecte à son compte client.

- Il s'abonne une fois connecté à notre newsletter via la boxe newsletter et avec le code ci-dessous, son adresse mail est enregistrée dans une table à part :

Code
// Abonnement à la newsletter
      if ($error == false)
      {
        $sql_data_array = array('customers_newsletter_email' =>
$newsletter_email);

        tep_db_perform(TABLE_CUSTOMERS_NEWSLETTER, $sql_data_array);

        $customer_id = tep_db_insert_id();

        $sql_data_array = array('customers_newsletter_id' =>
$customer_newsletter_id,
                                 'entry_customers_newsletter_email' =>
$newsletter_email);

        $messageStack->add('inscription_newsletter',
TEXT_INSCRIPTION_NEWSLETTER_AJOUT);



Dès lors que le client a renseigné son adresse mail, il était alors "loggué" sous le compte d'un autre client :
le customers_newsletter_id '123' et avec un customers_id '456' --> loggué sous le customers_id '123' !!!!!

De plus :

- Un client s'inscrit à la news puis se loggue sur son compte --> AUCUN PROBLEME

- Un client loggué s'inscrit à la news puis se déconnecte et se reconnecte ensuite --> AUCUN PROBLEME

- Un client loggué s'inscrit à la news et continue de surfer --> IL EST IDENTIFIÉ SOUS LE CUSTOMERS_ID EQUIVALENT A SON CUSTOMER_NEWSLETTER_ID


Je pense donc qu'il s'agit bien d'un pb de session que se mélange les pinceaux... Je ne vois rien d'autre... Bizarre


smile.gif
Havock
Bonjour mickael

En fait ton gros problème est que tu attribue des valeurs aléatoires de $customer_id à ceux qui s'inscrivent à ta newsletter.

Le problème vient de la contribution de ta box promotionnelle (mal conçue) et en particulier de :

Code
tep_db_perform(TABLE_CUSTOMERS_NEWSLETTER, $sql_data_array);
$customer_id = tep_db_insert_id();


Je ne sais pas comment est structurée ta table TABLE_CUSTOMERS_NEWSLETTER mais a priori tu as dans cette table un champs autoincrémenté qui te sert à identifier les enregistrements de cette table.

Avec le code ci-dessus, quand un internaute s'inscrit à ta newsletter, tu vas aller chercher dans cette table le champs autoincrémenté le plus élevé et l'attribuer à la variable $customer_id. Le problème c'est que la valeur en question n'a rien à voir avec la valeur réelle que devrait avoir le $customer_id de l'internaute.

Citation
Un client s'inscrit à la news puis se loggue sur son compte --> AUCUN PROBLEME


Normal ! Ton client s'inscrit à ta newsletter. Ta contribution lui attribue une valeur incorrecte à son $customer_id. Le client se loggue sur son compte et lors de cette opération son $customer_id se voit réattribuer sa valeur correcte. Ton client est bien identifié.

Citation
Un client loggué s'inscrit à la news puis se déconnecte et se reconnecte ensuite --> AUCUN PROBLEME


Normal ! Ton client s'est loggué et son $customer_id a reçu une valeur correcte. Il s'inscrit à la newsletter et son $customer_id se voit attribuer une valeur incorrecte. Il se déconnecte sans commander, puis se reconnecte. Son $customer_id récupère de nouveau la bonne valeur. Ton client est bien identifié.

Citation
Un client loggué s'inscrit à la news et continue de surfer --> IL EST IDENTIFIÉ SOUS LE CUSTOMERS_ID EQUIVALENT A SON CUSTOMER_NEWSLETTER_ID


Normal ! Ton client s'est loggué et son $customer_id a reçu une valeur correcte. Il s'inscrit à la newsletter et son $customer_id se voit attribuer une valeur incorrecte. Donc quand il passe des commandes il est identifié comme un autre client.

Ce n'est pas un problème de sessions mais de conception de contribution.

Soit tu vires cette contribution, soit tu la modifie.

D'ailleurs le code est bizarre :

Code
// Abonnement à la newsletter
if ($error == false) {
$sql_data_array = array('customers_newsletter_email' => $newsletter_email);
tep_db_perform(TABLE_CUSTOMERS_NEWSLETTER, $sql_data_array);
$customer_id = tep_db_insert_id();
$sql_data_array = array('customers_newsletter_id' => $customer_newsletter_id,
                        'entry_customers_newsletter_email' => $newsletter_email);
$messageStack->add('inscription_newsletter', TEXT_INSCRIPTION_NEWSLETTER_AJOUT);


Code
$sql_data_array = array('customers_newsletter_email' => $newsletter_email);

Tu récupères le contenu de ton formulaire avec l'adresse email de l'internaute. OK !

Code
tep_db_perform(TABLE_CUSTOMERS_NEWSLETTER, $sql_data_array);

Tu insères cette donnée dans ta table TABLE_CUSTOMERS_NEWSLETTER. OK !

Code
$customer_id = tep_db_insert_id();

Tu récupères la plus haute valeur du champs autoincrémenté de ta table et tu l'attribues à la variable $customer_id. PAS OK !!!!
A priori, vu le code qui suit, je pense qu'il faut remplacer $customer_id par $customer_newsletter_id.

Code
$sql_data_array = array('customers_newsletter_id' => $customer_newsletter_id,
                        'entry_customers_newsletter_email' => $newsletter_email);

??? A priori tu prépares une insertion dans une table, mais tu n'as pas mis le code correspondant. ???

Code
$messageStack->add('inscription_newsletter', TEXT_INSCRIPTION_NEWSLETTER_AJOUT);

Tu affiches un message pour signaler l'inscription. OK !
mickael34
C'est vrai tu as raison !!!

Je n'avais pas remarqué le

Code
$customer_id = tep_db_insert_id();


Tout s'explique. Je me suis pris la tête pendant plusieurs jours à essayer d'identifier le problème et en cherchant du côté des sessions...

Bref merci de m'avoir ouvert les yeux sur ce point !!!
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2024 Invision Power Services, Inc.