IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] Problème de décimales Access>PHP


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut [Conception] Problème de décimales Access>PHP
    Bonjour,

    Je travaille avec un fichier txt généré par le script vbs suivant depuis une base Access. Je ne suis pas l'auteur de ce script.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    filepath = "\\serveur\rep\equipe\Gestion\export\factures"
     
    set fso = CreateObject("Scripting.FileSystemObject")
    Set tf = fso.CreateTextFile(filepath&"\facture.txt", True)
     
    tf.WriteLine ("ID;N°Facture;NomC;Montant;adr;cp;com")
     
    Set Conn = CreateObject("ADODB.Connection")
    Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=Gestion.mdb;"
    Set RS = CreateObject("ADODB.Recordset") 
    'SQL = "SELECT * FROM ACTION"
    SQL = "SELECT *,[clients]![nom] as cli,clients!Adresse & auditeurs!Adresse AS adr, clients![Code postal] & auditeurs![Code postal] AS cp, clients!Commune & auditeurs!Commune AS com FROM ((Facturation LEFT JOIN (Conventions LEFT JOIN CLIENTS ON Conventions.[Code client] = CLIENTS.[Code client])"_ 
    &" ON Facturation.N°Ligne = Conventions.N°Convention) LEFT JOIN [AFFECTATION AUDITEUR ACTION] ON Conventions.[Code auditeur] = [AFFECTATION AUDITEUR ACTION].N°ligne) LEFT JOIN AUDITEURS ON"_
    &" [AFFECTATION AUDITEUR ACTION].[Code auditeur] = AUDITEURS.[Code auditeur] WHERE Facturation.Montant<>0 AND [clients]![Nom] & [auditeurs]![nom] & [auditeurs]![Prénom]<>'""' and Facturation.Payé=No"
    rs.open SQL, conn, 3, 3
    do while not rs.eof
     
    tf.WriteLine (rs("ID")&";"&rs("N°Facture")&";"&rs("cli")&rs("nom")&" "&rs("Prénom")&";"&Round(rs("Montant"),2)&";"&rs("adr")&";"&rs("cp")&";"&rs("com"))
     
    rs.movenext
    loop
    J'ai développé des pages web qui puisent des informations dans le fichier .txt généré (montant, nom, prénom etc...) pour un paiment en ligne via Paybox. A l'origine, le montant dans ce fichier indiquait les 2 décimales après la virgule.
    Suite à un crash du serveur cet été, le fichier n'est plus le même. il indique seulement les décimales si besoin, genre :
    1000
    512,4
    45,12
    et du coup mon code php foire... car paybox reçoit les infos suivantes :
    1000 (soit 10 € au lieu de 1000) et 5124 (soit 51,24€).

    J'ai tenté de multiplier par 100 les valeurs du fichier mais j'obtiens :
    100000
    51200
    4500
    mes décimales sont arrondies à 0 !

    Y'a-t-il moyen d'utiliser une fonction PHP pour rétablir mes décimales ? Doit-on intervenir sur le script vbs qui génère le .txt ?

    Merci infiniment de votre aide...
    Et meilleurs voeux à tous les développeurs !!

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    c'est plutot un probleme d'asp cela.
    PHP ne vas pas reinventer des arrondis.
    Il peut juste manipulé ce qui existe deja.

  3. #3
    Membre averti
    Avatar de Julien.alkaza
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 239
    Points : 363
    Points
    363
    Par défaut
    Il faut modifier ton script (enfin, c'est pas le tien) vbs pour qu'il sorte forcément des nombres avec 2 chiffres après la virgule...

    Mais ca ne sera pas dans ce forum là!!
    Admin Réseaux & Systèmes.

    Red Hat Certified Technician...#604006101698235

  4. #4
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut
    Il faut sélectionner le champ montant avec un format, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT ..., Format([nomTable.montant],"fixe",2), ....
    FROM ...
    WHERE ...
    Take it HiSy

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    OK, je vais essayer la fonction format et si ça ne fonctionne pas j'irai poster dans ASP.
    Merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Bon je n'arrive pas à la faire fonctionner...
    Je vais m'adresser au forum ASP !

    Merci à tous !

  7. #7
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut
    JE comprend pas trop comment tu bascule du PHP à l'ASP comme ça ...

    T'as quoi comme envirronnement ?
    Take it HiSy

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Alors je vais détailler du début.
    Au boulot ils ont une appli Access pour gérer les factures et tout le reste.
    Ils ont mis en place un script (celui ci-dessus) qui génère un txt listant les noms, coordonnées, n° de facture, montant etc... des factures qui ne sont pas encore aquittées.
    Un jour on m'a demandé si je pouvais mettre en place le paiement en ligne sur le site web en utilisant Paybox.
    J'ai donc développé des formulaires en conséquence, en php puisque le site est en php. Mes pages puisent les infos dans le txt.
    A l'origine le script générait des montants à 2 décimales, donc ça fonctionnait bien, puisque Paybox a besoin des montants en centimes sans la virgule (je me contentais d'afficher le montant à nos clients et de transférer à Paybox le même montant sans virgule).
    Mais il y a eu des modifs de faites en mon absence et maintentant le txt (donc le script) zappe les zéros inutiles.
    Du coup au lieu d'envoyer 1000€ à Paybox, on envoie 10€, eu lieu d'envoyer 321,40€ on envoie 32,14€...
    Et comme ce développement n'est pas mon travail principal, juste un développement rapide, et que je suis déjà débordée, je n'ai pas envie de passer des heures sur le code (je pourrais tester le nb de chiffres derrière la virgule je suppose), je posais la question s'il y avait un moyen simple de rétablir la situation d'origine.

  9. #9
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut
    Ben j'en reviens à mon format ...

    Soit tu formates le resultat de la rq comme indiqué plus haut.
    Soit tu formates ou fait formater le champ montant dans la base access.

    La personne qui a fait l'appli access en a pour 2 secondes à faire ça ...

    Sinon, balance ca comme ca mais au lieu de faire x100 sur ton champ ce qui resoud rien à mon sens pourquoi ne pas faire
    Take it HiSy

  10. #10
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut

    Code:
    un round($montant,2)
    Le "un" fait pas partie du code ...
    Take it HiSy

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    ok hisy je vais tester dans mes pages php pour voir comment ça se comporte.
    La base Access je ne peux pas y toucher car elle sert à d'autres tâches.
    La fonction Round(variable, 2) arrondit bien à 2 décimales (on vient de me le confirmer sur le forum ASP), alors je ne comprends pas pourquoi le txt zappe les zéros inutiles...
    Je teste et je viens vous raconter

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    bon bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $montantdec=round($montant,2);
    me vire mes décimales...
    Est-ce que PHP préfère le point à la virgule peut être ?
    Ou bien mon $montant serait-il considéré comme une chaine de caractères ?


    De l'autre côté j'étais voir la base Access, le champ Montant est un réel double formatté à l'Euro. Le nombre de décimales était en auto, je l'ai mis à 2, mais ça ne change rien.
    J'ai enlevé la fonction round du vbs pour récupérer ce qu'il y a vraiement dans la base et maintenant j'ai des montants :
    259,163329303598 ou des entiers
    dans le txt... et toujours des entiers dans le formulaire PHP !
    Je ne comprends pas ce qu'il se passe... Pourquoi ces fonctions Round ne font pas leur boulot !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Ca y est j'ai enfin des nouvelles du développeur du script !
    Il m'a mis les sommes en centimes donc j'ai juste à les diviser par 100 pour l'affichage utilisateur et les laisser telles quelles pour Paybox.

    C'était bien la virgule qui gênait, car maintenant il met un .

    Merci à tous de votre aide.
    Je mets résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] problème de calcul en php
    Par yannick29 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/10/2007, 08h32
  2. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  3. [Conception]Problème de synchronisation entre tables sous access
    Par romain404 dans le forum Modélisation
    Réponses: 4
    Dernier message: 15/04/2007, 20h01
  4. Problème de décimales Access > txt > PHP
    Par LadyArwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/01/2006, 15h48
  5. [CR8] Problème de décimales avec Centura
    Par ccquick dans le forum SAP Crystal Reports
    Réponses: 13
    Dernier message: 05/10/2004, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo