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

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> quantités décimales ?
manelle
posté 14 Nov 2008, 23:28
Message #1


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Bonsoir,

Je dois être stupide, et c'est sans doute très simple, mais je n'arrive pas à faire en sorte que mes clients puissent commander une quantité décimale (ex : 1,5 ou 0,cool.gif.

Je n'ai rien trouvé dans l'admin qui permette de configurer ça... Je pense qu'il faut mettre les pattes dans le code... je soupçonne même qu'il faut virer un (int) quelque part... mais je ne suis pas vraiment sûre de mon coup !

Quelqu'un peut-il me guider (sachant que je n'ai pas besoin que les stocks soient incrémentés) ?

Merci par avance !

Ma version : OsCommerce V2.2 RC1
Go to the top of the page
 
oneill
posté 16 Nov 2008, 08:09
Message #2


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Ou comment remettre un bug en place
http://www.oscommerce-fr.info/faq/qa_info.php?qID=135

Mais cette correction n'est plus à jour et devrait être modifiée dans la FAQ
Dans catalog/includes/classes/shopping_cart.php fait une recherche de (int)$qty. Il y en a 3
Ligne 84
Code
      if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$qty > MAX_QTY_IN_CART)) {
Ligne 113
Code
            $this->contents[$products_id_string] = array('qty' => (int)$qty);
et Ligne 115
Code
            if (tep_session_is_registered('customer_id')) tep_db_query("insert into " . TABLE_CUSTOMERS_BASKET . " (customers_id, products_id, customers_basket_quantity, customers_basket_date_added) values ('" . (int)$customer_id . "', '" . tep_db_input($products_id_string) . "', '" . (int)$qty . "', '" . date('Ymd') . "')");

Enleve le (int) devant $qty


--------------------
Go to the top of the page
 
xaglo
posté 16 Nov 2008, 09:08
Message #3


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 14910
Inscrit : 22-November 02
Membre no 610



Citation (oneill @ 16 Nov 2008, 08:09) *
Mais cette correction n'est plus à jour et devrait être modifiée dans la FAQ

c'est fait


--------------------
Ni Hot-line ni Service Après Vente, ces forums sont un lieu d'échanges.
Une Question? Rechercher / FAQ / docV1.pdf / docV2.pdf / contributions
Go to the top of the page
 
manelle
posté 16 Nov 2008, 15:12
Message #4


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Merci à tous les 2 smile.gif

j'avais vu ça dans la FAQ, en effet, mais comme ça ne correspondait pas au code que j'avais dans mon fichier, j'avais laissé tomber, de peur de faire une bêtise...

Merci, en tout cas, voilà qui m'ôte une épine du pied smile.gif
Go to the top of the page
 
manelle
posté 16 Nov 2008, 17:16
Message #5


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Bon, je rectifie : dans le fichier shopping_cart.php, je n'ai pas de $qty, encore moins de (int)$qty.

Les seuls (int) que j'ai sont les suivants :

Citation
where pa.products_id = '" . (int)$products[$i]['id'] . "'
and pa.options_id = '" . (int)$option . "'
and pa.options_id = popt.products_options_id
and pa.options_values_id = '" . (int)$value . "'
and pa.options_values_id = poval.products_options_values_id
and popt.language_id = '" . (int)$languages_id . "'
and poval.language_id = '" . (int)$languages_id . "'");


est-ce un de ceux_là que je dois supprimer ?

merci par avance de vos réponses smile.gif

EDIT : faites excuse, j'ai écrit trop vite : je n'avais pas ouvert le bon fichier blush.gif

par contre, je viens de faire les modif indiquées, et... ça ne change rien à mon problème mellow.gif
Je ne peux toujours pas saisir de quantités décimales. J'ai essayé avec un point, puis avec une virgule, mais ça ne change rien.

Ce message a été modifié par manelle - 16 Nov 2008, 17:22.
Go to the top of the page
 
oneill
posté 16 Nov 2008, 19:05
Message #6


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Qui a remis du (int) dans notre dos ?


--------------------
Go to the top of the page
 
oneill
posté 16 Nov 2008, 19:23
Message #7


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Et ben, c'est ceinture et bretelle...
Il faut AUSSI faire une recherche avec (int)$quantity
Ligne 141
Code
      if (defined('MAX_QTY_IN_CART') && (MAX_QTY_IN_CART > 0) && ((int)$quantity > MAX_QTY_IN_CART)) {
Ligne 158
Code
        $this->contents[$products_id_string] = array('qty' => (int)$quantity);
et ligne 160
Code
        if (tep_session_is_registered('customer_id')) tep_db_query("update " . TABLE_CUSTOMERS_BASKET . " set customers_basket_quantity = '" . (int)$quantity . "' where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($products_id_string) . "'");

Pareil, il faut enlever (int) devant chacun des 3 $quantity

ET la ca marche, j'ai testé...Je n'ai plus qu'à modifier la FAQ.


--------------------
Go to the top of the page
 
cloubech
posté 16 Nov 2008, 20:47
Message #8


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 64
Inscrit : 22-November 05
Lieu : Rhone Alpes
Membre no 7934



Le (int) n'était-il pas revenu pour cause d'injection SQL ? même si dans ce cas il n'y a pas de risque !


--------------------
Christian oscommerce 2.2-ms2 fr + Qty_price_break
Go to the top of the page
 
manelle
posté 16 Nov 2008, 21:41
Message #9


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Merci oneill, cette fois c'est bon smile.gif
Go to the top of the page
 
NoZic
posté 16 Nov 2008, 22:25
Message #10


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2871
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Bonsoir,

Citation
Le (int) n'était-il pas revenu pour cause d'injection SQL ?
Si bien sûr mais ici on peut transtyper en float (ou int ou 0 selon le contenu de la chaîne de la variable postée pour la quantité) au moment du passage de la valeur postée à $quantity (si la variable contient bien une chaîne contenant une valeur décimale, si on peut dire ça..) :
Code
$quantity = 0 + $maPostVarQuantity
par exemple

Selon maPostVarQuantity {
case "1.2" :
$quantity vaudrat 1.2 en float
case "1,2" :
$quantity vaudrat 1 en int
case "1" :
$quantity vaudrat 1 en int
case "essai_injection_sql" :
$quantity vaudrat 0 en int
}

Donc bien entendu comme de juste il faut s'assurer que le séparateur décimal est bien le point (et pas la virgule cmme tout bon français serait tenter de mettre dans le champ) mais de toute façon ça on doit s'en assurer en javascript avant d'envoyer en post pour renvoyer une erreur directe par le navigateur avant le traitement par le serveur (bah oui traiter une erreur est inutile, v'la le pléonasme... blink.gif ), donc ça doit le faire (et puis si tu veux vraiment récupérer un float tu DOIS faire cette vérification).

Bonne fin de dimanche

Ce message a été modifié par NoZic - 16 Nov 2008, 22:41.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
manelle
posté 24 Nov 2008, 23:58
Message #11


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Zut, me revoilà... mon problème n'est en fait qu'à moitié réglé : je peux maintenant en effet saisir des quantités lors de la passation d'une commande dans le front office, mais quand je passe "en coulisses", dans l'admin, et que je vais voir les commandes (Menu Clients/commandes -> Commandes), mes décimales ont disparu... de même quand je vais dans le menu Rapports, les décimales ne sont pas prises en compte... et les prix totaux sont faux, du coup mellow.gif

J'imagine que je dois encore sacrifier quelques (int)... mais où ?

Je précise que j'ai rajouté la contrib stats products orders.

merci par avance de votre aide !
Go to the top of the page
 
oneill
posté 25 Nov 2008, 09:31
Message #12


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Il te suffit de repérer les pages où ca arrive et rechercher un (int) associé à qty ou $quantity ou approchant. C'est qu'on va faire à ta place finalement.


--------------------
Go to the top of the page
 
manelle
posté 25 Nov 2008, 22:50
Message #13


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Merci oneill,

c'est bien ce que je supposais, et j'ai commencé à recherché les (int) et les qty ou quantity dans plusieurs fichiers hier soir... mais je n'avais rien trouvé d'approchant... je n'abandonne pas, ceci dit, et je vais m'y remettre tout de suite (avec une loupe et une lampe de poche !) biggrin.gif

EDIT
: je suis allée fouillée dans ma base de données, via phpmyadmin... et le type du champ products_quantity, dans la table orders products, est (int)...
n'est-ce pas là qu'il faut que je cherche la solution à mon problème ?
et si oui, je suppose qu'il faut que je choisisse le type DECIMAL, mais je ne sais pas quelle valeur définir dans la zone Taille/Valeurs.
Bon, je sais, c'est un forum de support osCommerce, et pas MySQL... mais quand même, si vous aviez la réponse, ça m'arrangerait bien tongue.gif

Merci à vous !


Ce message a été modifié par manelle - 25 Nov 2008, 23:17.
Go to the top of the page
 
shoprun
posté 26 Nov 2008, 05:48
Message #14


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Effectivement, dans la BDD c'est un type numérique (integer), faut le modifier en un type décimal, et cela dans au moins 2 tables, le panier et la table commande, voir même la table produit.

Cependant, tu pourrais tout simplement prendre exemple sur ce qui existe déjà, comme pour les prix, et puis tu as le Net en général, il doit y avoir des tutos la dessus.

Mais bon, c'est simple, dans PhpMyAdmin, tu choisi "decimal", après, faut définir la longueur décimale Max que pourrait accepter ce champ.
Exemple :
On décide qu'il y aura pas plus de 2 décimales (donc 2 chiffre après la virgule)
On estime que la quantité Max ne dépassera -> 99,99
-> Ca donne comme définition : DECIMAL(4,2) : 4 le nombre total de chiffres, 2 le nombre total de décimales.



+1 pour NoZic (je plussoie smile.gif )
Il serait bon de "typer" cette variable quantité au niveau de la Bdd, car supprimer comme ça le (int) sans précaution tu prends le risque d'avoir un de ces 4 un soucis.
Le (int) avait justement 2 buts, non seulement de s'assurer que la donnée que l'on tente d'enregistrer dans la Bdd soit bien du type numérique, mais aussi que cela ne soit surtout pas autre chose (sql injection), donc dans ce cas là, et dans le pire des cas c'est 0 qui est enregistré, ce qui est très sécurisant.


Et enfin, et juste par curiosité : Tu vends quoi comme produit pour offrir la possibilité de saisir 1.5 comme quantité ?
Des paires de chaussettes ? tongue.gif
Sans blague, j'en ai une qui manque un coté huh.gif
C'est donc possible de commander non pas une paire mais juste 1 chaussette (donc 0.5) ? laugh.gif


Sérieusement, ce sont tous des produits et sans exception où il est possible de commander des 1.5 en quantité ?
Car si certains oui et d'autre non (je dirais même surtout pas), ça peut être un peu (voir beaucoup) la tuile non ?
Aussi, que l'on puisse saisir une quantité comme 1.5, ok, mais si on saisie 1.62, c'est possible aussi ?


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
NoZic
posté 26 Nov 2008, 08:45
Message #15


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2871
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Salut shoprun,

Euh je me suis posé la même question, à quoi sert une quantité décimale (je suis dans l'identification et je fais des applications pour les clients sur les terminaux de lecture et des clients ont demandé une quantité décimale, j'ai pas bien compris) puisque ce sont des produits entiers... franchement je ne voyais pas.

J'ai eu le client au téléphone et c'était des vendeurs de matériel de plomberie donc des tuyaux surtout, vendus... à la longueur et les clients pouvaient ne vouloir qu'un 1,75 m de tel tuyau... pareil pour les vendeurs de tissu, les clients peuvent ne vouloir que 3,3 m de tel tissu.

Le plus dur pour un site est de devoir s'assurer que les produits entiers ne puissent pas être commandés avec une quantité décimale mais exclusivement avec des entiers et pas vice-versa d'ailleurs puisque le client peut vouloir 1 m pile poil de tuyaux (et oui si tu as les deux types de produits, faut le prévoir...).

Hummmmm... bon courage... mellow.gif

Ce message a été modifié par NoZic - 26 Nov 2008, 08:48.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
shoprun
posté 26 Nov 2008, 09:13
Message #16


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Mise à part ma petite blague, ça, c'était pour la bonne humeur, mais effectivement j'avais ma petite idée sur le truc, mais savoir ses types de produits c'est par curiosité uniquement.

Cependant, c'est surtout ma dernière remarque qui me semble assez important d'avoir une réponse, car vendre 1.54m de tissus, pas de souci, mais si à coté de ça on vends la paire de ciseau, ça va être difficile de traiter la commande avec une quantité de 0.5 ?
Faut il croire ou admettre que les clients seront disciplinés, ou ne feront pas d'erreurs ???

Dans osC (la MS2) on le sais bien, il n'y a pas d'unité de mesure, c'est nous qui la donnons de manière très virtuel, il y a rien.
Dans un cas comme celui ci, il faut un élément qui puisse dire quel est le type de produit, et l'unité de mesure peut être un excellent moyen pour traiter le problème, surtout si on vend tantôt à la pièce (c'est le cas par défaut) ou au Kg, au mètre, etc ...


Ensuite, il peut avoir une autre solution, comme par exemple conserver le champ quantité comme il est, donc de ne pas permettre de saisir dans celui ci un nombre décimal (pas de 1.54), mais de rajouter juste à coté un menu déroulant réservé aux décimales, une liste de choix comme par exemple :
00, 05, 10, 15, 20, 25, ..... 95
Certes, c'est un peu limité, mais ça offre l'avantage de connaitre les valeurs retournée à l'avance, donc bien formatées.
Mais ici, vu que c'est un nouvel élément, faudra coder pour récupérer sa valeur et la rajouter à la quantité.

Mais encore, cette solution couplée avec celle plus haut, peut être mis en place sans trop de problème, en gros :
SI le type est "à la pièce" ALORS pas de menu déroulant
SINON affichage du menu déroulant.


Après, il peut avoir une tout autre solution, comme utilser les attributs de produits, il y a certes des limites, mais par exemple et pour 1 produit, on peut faire des options du genre :
0.5m, 1.00m, 1.50m, etc ...
ou 0.5Kg, 1.00Kg, 1.50Kg, etc ...


Bref, il y a des solutions, mais faudra surement faire un plus de modifs que juste supprimer des (int) ou les remplacer par des (float).


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
manelle
posté 26 Nov 2008, 23:09
Message #17


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



Bonsoir,

En fait, c'est très simple : les produits que je vends sont des produits alimentaires ; il y a donc des yaourts, par exemple (pas de quantités décimales, là, forcément), mais aussi de la viande : il faut donc qu'il soit possible de commander 1,5 kilo de boeuf bourguignon, par exemple !

Pour l'anecdote, je fais cette boutique en ligne pour une assoc, dont l'objet est à la fois d'assurer aux producteurs agricoles locaux un revenu décent, et aux consommateurs locaux des produits d'excellente qualité, à un prix plus que raisonnable (puisque sans intermédiaires), et plus stable que dans le circuit normal... c'est un peu dans le même état d'esprit que les AMAP, si ça vous dit quelque chose.

Donc, les clients de la boutique sont plutôt disciplinés, et même s'ils commettaient une erreur (genre commander 1.35 yaourts aux fraises !!!), ça n'aurait pas vraiment d'importance, puisqu'ils ne règlent pas en ligne, mais en venant chercher leurs produits "au comptoir"... ce n'est donc pas compliqué de rectifier en cas d'erreur.

Mais voilà, j'avais vraiment besoin de ces quantités décimales !

je vais donc tester ce que tu préconises, shoprun, et je pense que je vais avoir enfin la solution pour mes commandes de bourguignon ! tongue.gif

Merci encore de votre aide ! smile.gif
Go to the top of the page
 
shoprun
posté 27 Nov 2008, 05:41
Message #18


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (shoprun)
Tu vends quoi comme produit pour offrir la possibilité de saisir 1.5 comme quantité ? Des paires de chaussettes ? tongue.gif
Sans blague, j'en ai une qui manque un coté huh.gif

Citation (manelle)
En fait, c'est très simple : les produits que je vends sont des produits alimentaires

Bon ben c'est cuit pour mon coté de chaussette manquant mrgreen.gif laugh.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
greuter
posté 1 Dec 2008, 10:06
Message #19


Ceinture bleue OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1027
Inscrit : 16-December 02
Lieu : Est
Membre no 669



Bonjour,

manelle
je ne sais pas si tu as avancé sur ce problème
mais j'ai trouvé ça si ça peut t'aider

http://addons.oscommerce.com/info/3779
http://addons.oscommerce.com/info/3938



--------------------
Aide toi et le ciel t'aidera.
C'est comme ça que fonctionne l'esprit Open Source :

Code
function j_ai_besoin() {
     if (ça existe) j'utilise;
     if (ça existe mais c'est incomplet) j'améliore et je partage;
     if (ça n'existe pas) je développe et je partage;
     if (je réclame) exit;
    Return "code amélioré" or "developpeur satisfait" or die;
}

Copyright Gnidhal
--> Comment Bien utiliser le Forum
--> Rechercher & Visualiser les Contributions
Go to the top of the page
 
manelle
posté 1 Dec 2008, 21:58
Message #20


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 18
Inscrit : 27-October 08
Membre no 23511



merci Greuter,

a priori, le "bricolage" que j'ai fait devrait fonctionner, mais je garde ta solution sous le coude, elle est peut-être plus "orthodoxe" smile.gif
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 : 26th May 2013 - 04:31
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)