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

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Boucle Checkout_shipping
DeathWarrior
posté 15 Jun 2017, 14:06
Message #1


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 60
Inscrit : 24-December 04
Lieu : Paris
Membre no 4177



Bonjour,

Je me creuse la tête depuis 1 semaine sans arriver a comprendre d’où le bug peut venir.

Si un client va dans son panier et clique sur commander, aucun problème. Par contre si il a le malheur de cliquer sur Recalculer, la page checkout_shipping s'affichera en boucle, impossible d'aller plus loin. Même si il n'a rien modifier dans le panier. Le problème se résout de lui même en se déconnectant/reconnectant.

De ce que j'ai pu comprendre, pour passer a la page suivante, il faut les bonnes variables POST (action=process) pour être rediriger les la page de paiement. Mais en mettant un var_dump($HTTP_POST_VARS) en haut de la page, $HTTP_POST_VARS est vide. Après cela peut venir aussi des variables sessions mais je n'arrive a determiner ce qui change avant et après le clique sur recalculer. En mettant un error_reporting(E_ALL), aucune erreur.

Je suis sous Oscommerce 2.2 (modifier par de nombreuses contribs et de modifs perso) et PHP 5.6.30.

J'ai testé également sur plusieurs navigateurs.

Merci a ceux qui ont prit la peine de me lire smile.gif.


--------------------
Oscommerce MS 2.2
Go to the top of the page
 
Bonbec
posté 15 Jun 2017, 16:41
Message #2


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1281
Inscrit : 30-May 06
Lieu : Vichy (03)
Membre no 10583



Bonjour,

Logiquement quand on clique sur "recalculer", c'est la page shopping_cart.php qui se recharge après recalcul.
Si c'est le site indiqué dans le profil, le clic sur "recalculer" fonctionne normalement sur la page shopping_cart.php.
Je n'ai pas été plus loin car il faut créer un compte client.


--------------------
Config 1 en live : Osc 2.2 très fortement modifié ... UTF-8 et Php 5.4.
Contribs installées : down_for_maintenance_v 2.3 | Estimated Shipping v1.5 | imprint_1_3_5 | low_stock_report_v2.04 | visible_countries_1.2b | Products Tabs | shoppingCart_cleanup_v1.01.0 | + trop de bidouilles persos pas très OsCommerce (erreurs de jeunesse)
Config 2 en local avec UwAmp : Osc 2.3.4 BS
Go to the top of the page
 
DeathWarrior
posté 16 Jun 2017, 08:09
Message #3


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 60
Inscrit : 24-December 04
Lieu : Paris
Membre no 4177



Je me suis peut être mal exprimer. Le bouton Recalculer fonctionne très bien. Mais il provoque d'une certaine façon un bug.

Situation 1 : Je trouve un cable, je l'ajoute au panier, je clique sur commander et je vais jusqu'a la fin de la commande sans problème.
Situation 2 : Je trouve un cable, je l'ajoute au panier, je clique sur commander, mais je me rend compte qu'il m'en fallait 2. Je retourne dans mon panier, change la quantité avec recalculer. Puis je reclique sur commande. Et la, je ne pourrais pas aller plus loin que la page de choix d'expedition. A chaque fois que je clique sur continuer, je me retrouve sur la même page.


--------------------
Oscommerce MS 2.2
Go to the top of the page
 
Havock
posté 16 Jun 2017, 09:22
Message #4


Ceinture bleue OSC
Icône de groupe

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



Bonjour,

Je n'ai plus les fichiers originaux de la 2.2 depuis longtemps, mais (si je n'ai pas touché cette partie là du code) quand tu clique pour recalculer le panier, tu valide un formulaire dirigé vers la page shopping_cart.php en faisant passer en Get le paramètre action avec la valeur 'update_product'

Code
echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product'));


Dans application_top.php regarde la partie de code correspondant à
Code
case 'update_product'


Tu as une partie correspondant à la mise à jour du panier puis une redirection.

La redirection est simple
Code
tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));


$goto étant lui même défini un peu avant.

Donc à première vue, dans shoppping_cart à proprement parler je ne vois rien de bloquant pour la suite, liée à une modification de quantité ???


Par contre j'ai effectivement constaté le problème que tu décris (j'ai créé un compte TEST).

Je pencherais pour un problème de sessions.

On reste sans doute bloqué sur checkout_shipping car on ne doit pas avoir de valeur de session définie pour shipping ou cartID

Déjà, sur checkout_shipping, quand je change l'adresse de livraison, ma modification n'est pas prise en compte.


Si je me déconnecte, puis me reconnecte sans modifier de quantité je peux effectivement passer au paiement, par contre les changements d'adresses ne sont toujours pas pris en compte.

C'est un peu le foutoir blink.gif

Je te conseillerais dans un premier temps de récupérer les variables de sessions pour savoir exactement ce qui peut manquer.








--------------------
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
 
DeathWarrior
posté 19 Jun 2017, 15:56
Message #5


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 60
Inscrit : 24-December 04
Lieu : Paris
Membre no 4177



Merci de ta réponse. J'ai pu tester un peu plus.

Je n'arrive pas a comprendre ce qu'il se passe exactement mais j'ai tester le changement d'adresse. Peu importe ce que je faisais, le changement de la variable session sendto ne changeait pas. J'ai essayé de mettre tep_session_register('sendto'); juste avant la redirection et la miracle, le changement est prit en compte. Je me suis dis que j'avais dû supprimer une ligne a un moment mais j'ai comparé avec une version non modifié de OSC 2.3.4, le code est identique.

Si je suis le cheminement du code après avoir changer l'adresse et valider.

checkoup_shipping_address.php
CODE
// process the selected shipping destination
} elseif (isset($HTTP_POST_VARS['address'])) { //1 - TRUE
$reset_shipping = false;
if (tep_session_is_registered('sendto')) {//2 - TRUE
if ($sendto != $HTTP_POST_VARS['address']) {//3 - TRUE
if (tep_session_is_registered('shipping')) {//4 - FALSE
$reset_shipping = true;
}
}
} else {
tep_session_register('sendto');
}

$sendto = $HTTP_POST_VARS['address'];
$check_address_query = tep_db_query("select count(*) as total from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "' and address_book_id = '" . (int)$sendto . "'");
$check_address = tep_db_fetch_array($check_address_query);

if ($check_address['total'] == '1') {//5 - TRUE
if ($reset_shipping == true) tep_session_unregister('shipping');//6 - FALSE

tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));//7 - Redirection
} else {
tep_session_unregister('sendto');
}
} else {
if (!tep_session_is_registered('sendto')) tep_session_register('sendto');
$sendto = $customer_default_address_id;
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));

}
}


Tout semble normal mais la variable session sendto se met a jour comment et a quel moment?


--------------------
Oscommerce MS 2.2
Go to the top of the page
 
Bonbec
posté 19 Jun 2017, 16:07
Message #6


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1281
Inscrit : 30-May 06
Lieu : Vichy (03)
Membre no 10583



Bonjour,

C'est dans catalog/checkout_shipping.php vers la ligne 30 (mon fichier perso est modifié, donc çà peut varier un peu), il y a :
Code
  // if no shipping destination address was selected, use the customers own address as default
  if (!tep_session_is_registered('sendto')) {
    tep_session_register('sendto');
    $sendto = $customer_default_address_id;
  } else {
// verify the selected shipping address
    $check_address_query = tep_db_query("select count(*) as total from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "' and address_book_id = '" . (int)$sendto . "'");
    $check_address = tep_db_fetch_array($check_address_query);

    if ($check_address['total'] != '1') {
      $sendto = $customer_default_address_id;
      if (tep_session_is_registered('shipping')) tep_session_unregister('shipping');
    }
  }


--------------------
Config 1 en live : Osc 2.2 très fortement modifié ... UTF-8 et Php 5.4.
Contribs installées : down_for_maintenance_v 2.3 | Estimated Shipping v1.5 | imprint_1_3_5 | low_stock_report_v2.04 | visible_countries_1.2b | Products Tabs | shoppingCart_cleanup_v1.01.0 | + trop de bidouilles persos pas très OsCommerce (erreurs de jeunesse)
Config 2 en local avec UwAmp : Osc 2.3.4 BS
Go to the top of the page
 
DeathWarrior
posté 20 Jun 2017, 16:00
Message #7


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 60
Inscrit : 24-December 04
Lieu : Paris
Membre no 4177



J'ai réussi a comprendre. Cela vient d'un ajout que j'avais fait a l’époque pour les register_globals. Il y avait extract($_SESSION, EXTR_SKIP); dans application_top. J'ai remplacer cette partie par celle contenu dans la version 2.3.4 tout frais. A savoir : extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);

Mais ça c'est pour le problème de changement d'adresse uniquement. J'ai toujours la boucle sur checkout_shipping lorsque je veux continuer. Mais c'est possible que le problème soit identique mais avec les variables POST plutôt.


--------------------
Oscommerce MS 2.2
Go to the top of the page
 
Havock
posté 21 Jun 2017, 07:40
Message #8


Ceinture bleue OSC
Icône de groupe

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



Tu as des valeur de session définies pour shipping ou cartID ?


--------------------
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
 
DeathWarrior
posté 21 Jun 2017, 08:11
Message #9


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 60
Inscrit : 24-December 04
Lieu : Paris
Membre no 4177



shipping oui mais $_SESSION['cartid'] est null. Par contre j'ai $_SESSION['cart']['cartid']

Maintenant j'ai aussi les variables $_POST qui sont bonnes ce qui n'était pas le cas dans mon premier message.

Edit: J'ai rien dit. Après deconnexion/reconnexion j'ai plus rien dans $_POST. Même en prenant la valeur tout au début du fichier PHP. J'ai vérifier la source, le code HTML est bien présent.
Edit2 : Bah les variables sont revenues. J'ai mis un commentaire dans la commande pour voir, et il était bien enregistré d'une façon ou d'une autre.

Edit3: J'ai comparé les deux dump de $_SESSION (quand la commande fonctionne et quand j'ai la boucle après avoir cliquer sur recalculer). La seule chose qui change c'est $_SESSION['cart']['cartid']. La valeur est null quand ça fonctionne et j'ai un ID quand ça fonctionne plus. J'aurais imaginé l'inverse...

Edit4: ET BAH ENFIN! J'ai trouvé. C'était bien cartID. J'ai copier le bout de code de la version 2.3.4 et ça a l'air de fonctionner.

CODE
if (!tep_session_is_registered('cartID')) {
tep_session_register('cartID');
} elseif (($cartID != $cart->cartID) && tep_session_is_registered('shipping')) {
tep_session_unregister('shipping');
}

$cartID = $cart->cartID = $cart->generate_cart_id();


Moi j'avais juste :
CODE
if (!tep_session_is_registered('cartID')) tep_session_register('cartID');


Je ne sais pas si j'ai supprimé ça par erreur a un moment mais là ça a l'air de fonctionner. Merci pour votre aide en tout cas.

Ce message a été modifié par DeathWarrior - 21 Jun 2017, 10:01.


--------------------
Oscommerce MS 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 : 23rd August 2017 - 20:12
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)