Language and development rules: Difference between revisions

Jump to navigation Jump to search
m
Line 65: Line 65:
</source>
</source>


{{ToTranslate}}
* Into SQL requests, you must quote fields except fields that contains amounts that must be stored as double or real type. Quotes on numbers may results in saving a different value. For example 412.62 in an insert will be saved with value 412.61999512 into database fi target field has type double(24,8). Only PHP see value 412.61999512. Other tools will see 412.62 giving sensation that there is no problem. But it's PHP that hase the good vision. There is really a wrong value into database. By removing quotes on numbers, no problem occurs.
 
* Dans les requêtes SQL, on quote les champs mais pas les numériques qui contiennent des montants destinés à être stockés dans des champs de type double ou real. Les quotes sur les numériques de type float provoquent parfois un stockage d'une valeur différente. Par exemple 412.62 dans le insert sera en fait stocké avec la valeur 412.61999512 en base si le champ est de type double(24,8). Et seul le PHP voit 412.61999512. Les autres outils verront 412.62 donnant l'impression qu'il n'y a pas de problème. Et c'est le PHP qui a raison, il y a problème en base. En supprimant les quotes sur les numériques, cela va mieux.


Example:
Example:
Line 75: Line 73:
</source>
</source>


Remarque, le pb des float est général et pas seulement sur les accès base, il est présent dans tous les languages quand on travaille sur des nombres réels, aussi ils doivent être, dès que affectés, nettoyés par la fonction price2num avec le 2eme paramètre renseigné à:
Note, problem of float numbers is same problem on all langauges and not only when inserting data into database. It occurs also with any language when you work on "real" numbers, so numbers must be, as soon as they are affected, cleaned with function price2num with second parameter defined to :
'MU', 'MT' ou 'MS' selon le besoin. (voir doc fonction)
'MU', 'MT' or 'MS' depending on usage of number. (see function documentation)


Dans la pratique, afin d'etre compatible avec toutes les précisions des pays, on utilisera les types suivants:
Well, to be compatible with any accurency required by any country on amounts, we will use the following type into database:
  - double(24,8) pour tout montant
  - double(24,8) for any amount
  - double(6,3) pour les taux de tva
  - double(6,3) for any vat rate
  - real pour une quantité
  - real for a quantity


* Dolibarr doit fonctionner même avec l'option '''strict''' de Mysql active.
* Dolibarr must works even if Mysql option '''strict''' is active.
Pour l'activer, ajouter la ligne suivante dans le fichier config du serveur Mysql (my.cnf)
To activate it (recommanded when developping on Dolibarr), add the following line into the config file of your Mysql server (my.cnf)
<source lang="ini">
<source lang="ini">
sql-mode="STRICT_ALL_TABLES"
sql-mode="STRICT_ALL_TABLES"
</source>
</source>


* Les fonctions NOW ou SYSDATE sont interdites au sein des ordres SQL. S'il faut saisir la date du moment dans un champ, la valeur doit venir du PHP et non du moteur de base de données. Ceci afin d'avoir une meilleure portabilité du code mais surtout d'avoir une gestion correcte des TimeZone.
* Functions NOW or SYSDATE are forbidden inside SQL requests. If you must use the current date into a field, value must come from the PHP and not from the database engine. This is to avoid a better portability of code and a correct management of TimeZone.


= Normes HTML =
= Normes HTML =

Navigation menu