osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [Resolu] Des commandes qui arrivent vides et sous un mauvais compte client, Je partage ce qui m'est arrivé et d'où venait le pb !
mickael34
posté 24 Mar 2016, 18:06
Message #1


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 172
Inscrit : 3-January 08
Membre no 20263



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

Ce message a été modifié par mickael34 - 25 Mar 2016, 11:05.


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
Havock
posté 25 Mar 2016, 09:44
Message #2


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 894
Inscrit : 4-February 04
Membre no 1926



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 !


--------------------
L'indispensable est en cours de traitement,
L'urgent sera traité demain,
Le normal sera traité plus tard,
Le reste on vera ...
En conclusion : les journées sont trop courtes.
Utilisateur de MS2.2 Max 1.5 - OSC-Affiliate 1.09 - Admin With Access Levels 2.1 - Meta Tag Controller/ Generator - Credit/Gift Voucher/Coupons 5.05 - Download Controller v5.3 - X-Sell MS2 - WYSIWYG HTML Editor for Admin 1.7 - Dynamic Mo Pics - Loginbox Best - Order logging before payment processing - User Tracking - Faster Page Loads, Less DB queries - Plus plein de modifs perso :-)
Go to the top of the page
 
mickael34
posté 25 Mar 2016, 11:05
Message #3


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 172
Inscrit : 3-January 08
Membre no 20263



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 !!!


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 18th November 2017 - 07:35
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)