Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1655 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle & PHP] boucle if dans while : problème

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle & PHP] boucle if dans while : problème

n°1895374
Niwade
Posté le 15-06-2009 à 17:58:11  profilanswer
 

Bonjour,  
 
Je bosse sur la mise en plus d'un système de facturation, et j'ai un problème de boucle. Je vous explique : je récupère des données dans des variables dans un script, et les lis au moyen d'un while ($ligne=oci_fetch_array($ma_requete));  
 
Cette boucle marche niquel, tous mes résultats s'affichent dans un tableau que j'ai mis pour vérifier que ma sélection se passe bien.
 
Après cette requête, j'insère ces données dans une nouvelle table. L'insertion marche.  
 
Maintenant, je veux récupérer la valeur de la TVA pour chacuns de mes articles (de chacune de mes lignes sélectionnées plus haut, au moyen du while). Pour avoir un total de la TVA 19.6, et de celle en 5.5.
 
J'ajoute donc des boucles if() dans ma boucle while, et là, problème : ça ne boucle que sur la même ligne, mais le bon nombre de fois.
 
L'exemple que je prend contient 18 articles en TVA 19.6, et un en 5.5. La ligne 13 (article) est la seule qui est en 5.5.
 
Voilà la partie qui semble poser problème :

Code :
  1. while ($ligne=oci_fetch_array($ma_requete)) {
  2. // blabla, je fais mon affichage et ma requête d'insertion, ça marche bien
  3. // si la tva de la ligne est à 19.6, je calcule combien elle vaut
  4. if ($tva==0) {
  5.  $taux196=oci_parse($conn,"SELECT LINE_NO, SALESPRICE, (SALESPRICE/((VAT_RATE/100)+1))*(VAT_RATE/100) AS TX196
  6.  FROM DATA_OWNER.INV_LINES li, DATA_OWNER.VAT_CODE co
  7.  WHERE li.VAT_CODE=co.VAT_CODE
  8.  AND co.VAT_CODE='$tva'
  9.  AND INV_NO='$no_receipt'" ) or die ("erreur dans le calcul de TVA 19.6 par ligne" );
  10.  oci_execute($taux196,OCI_DEFAULT);
  11.  $commited = oci_commit($conn);
  12.  $tx0 = oci_fetch_array($taux196);
  13.  $tx196 = $tx0["TX196"];
  14.  $line = $tx0["LINE_NO"];
  15.  $prix = $tx0["SALESPRICE"];
  16.  $total_tx196=$total_tx196+$tx196;
  17.  echo "tx196 = $tx196";
  18.  echo " ; total_tx196 = $total_tx196";
  19.  echo "<h1>$line, $prix</h1>";
  20. }
  21. // si elle est à 5.5, pareil      
  22. if ($tva==1) {
  23.  $taux55=oci_parse($conn,"SELECT (SALESPRICE/((VAT_RATE/100)+1))*(VAT_RATE/100) AS TX55
  24.  FROM DATA_OWNER.INV_LINES li, DATA_OWNER.VAT_CODE co
  25.  WHERE li.VAT_CODE=co.VAT_CODE
  26.  AND co.VAT_CODE='$tva'
  27.  AND INV_NO='$no_receipt'" ) or die ("erreur dans le calcul de TVA 5.5 par ligne" );
  28.  oci_execute($taux55,OCI_DEFAULT);
  29.  $commited = oci_commit($conn);
  30.  $tx1 = oci_fetch_array($taux55);
  31.  $tx55 = $tx1["TX55"];
  32.  $line = $tx1["LINE_NO"];
  33.  $prix = $tx1["SALESPRICE"];
  34.  $total_tx55=$total_tx55+$tx55;
  35.  echo "tx55 = $tx55";
  36.  echo " ; total_tx55 = $total_tx55";
  37.  echo "<h1>$line, $prix</h1>"
  38. }
  39. // sinon aucun calcul, la TVA est à 0    
  40. if ($tva!=0 && $tva!=1) {
  41.  echo 'TVA 0';
  42. }
  43. }


Bon je sais que je peux faire un if/elseif/else, c'est ce que j'avais mis au départ, et le résultat est le même.
 
J'ai mis "<h1>$line, $prix</h1>" pour voir si la boucle bouclait. Oui, elle boucle bien 19 fois, mais toujours sur la même ligne : la 6ème (pourquoi 6 ? oô après tests avec d'autres valeurs, il se trouve que ça boucle aussi sur la 1, la 4, enfin ça dépend.), et ajoute à chaque fois le même montant à total_tx196. Donc vu que le premier résultat est 81, le total s'incrémente de 81 à chaque fois. Je me retrouve donc avec 18 lignes à 81.
 
Pour l'unique ligne à 5.5, le résultat est bon, vu que de toute manière le problème semble se poser dès qu'il s'agit de boucler sur plusieurs lignes.
 
A savoir, ma requête marche très bien sous SQL*Plus, regardez le résultat que je devrais avoir (en ne selectionnant que la TVA à 19.6) :
SQL> SELECT LINE_NO, (SALESPRICE/((VAT_RATE/100)+1))*(VAT_RATE/100) AS TX196 FROM DATA_OWNER.INV_LINES li, DATA_OWNER.VAT_CODE co WHERE li.VAT_CODE=co.VAT_CODE AND co.VAT_CODE=0 AND INV_NO=112815 ORDER BY LINE_NO;

Code :
  1. LINE_NO     TX196
  2. --------- ---------
  3.         1 1294.6488
  4.         2  490.8194
  5.         3  490.8194
  6.         4 344.14716
  7.         5 1130.7692
  8.         6  81.77592
  9. ..... ect


 
Et ce que j'ai à l'écran (j'ai initialisé total_tx196 et total_tx55 à 0 au tout début de mon script) :
 
tx196 = 81.77592 ; total_tx196 = 81.77592
6, 499
tx196 = 81.77592 ; total_tx196 = 163.55184
6, 499
tx196 = 81.77592 ; total_tx196 = 245.32775
6, 499
tx196 = 81.77592 ; total_tx196 = 327.10367
6, 499
tx196 = 81.77592 ; total_tx196 = 408.87959
6, 499
tx196 = 81.77592 ; total_tx196 = 490.65551
6, 499
tx196 = 81.77592 ; total_tx196 = 572.43143
6, 499
tx196 = 81.77592 ; total_tx196 = 654.20735
6, 499
tx196 = 81.77592 ; total_tx196 = 735.98327
6, 499
...
tx55 = 10.37441 ; total_tx55 = 10.37441  
13, 199
tx196 = 81.77592 ; total_tx196 = 1063.08695
6, 499
 
Et il m'affiche ça x fois selon le nombre de lignes de ma requête de selection : ça peux être 1 comme 100.
 
Un problème d'initialisation ? J'ai essayé de tourner le problème dans tous les sens, avec des for et des switch/case, mais le résultats est le même : ça boucle toujours sur la même ligne èé/
 
Si quelqu'un a une idée =)
 
Merci d'avance !

Message cité 1 fois
Message édité par Niwade le 15-06-2009 à 17:59:04
mood
Publicité
Posté le 15-06-2009 à 17:58:11  profilanswer
 

n°1896204
Seb39
Posté le 17-06-2009 à 12:16:48  profilanswer
 

Niwade a écrit :


 
  $tx0 = oci_fetch_array($taux196);
 


 
Bonjour,
 
ça fait longtemps que je n'ai pas fait de php, mais tu ne devrais pas boucler  la dessus:
 
 "while($tx0 = oci_fetch_array($taux196))"
 
Parce que si ta requête retourne plusieurs valeurs, j'ai l'impression que tu prends tjrs la première.
 
+


Message édité par Seb39 le 17-06-2009 à 12:17:29

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle & PHP] boucle if dans while : problème

 

Sujets relatifs
[PHP] Intégration de texte avec sauts de ligne dans une imageProblème de code dans userform
Probleme spoiler sous IE mais pas sous FFPHP ou Javascript ? pour cette gallerie photos
Problème iframeproblème taille <div> avec Ajax.autocompleter
[Resolu][PHP]Fonction xAjax pas appelée ?Problème de clé étrangère [RESOLU]
Problème Libraires VBA Accessprobleme a l'upload d'image ...
Plus de sujets relatifs à : [Oracle & PHP] boucle if dans while : problème


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR