implication du compteur for()

implication du compteur for() - PHP - Programmation

Marsh Posté le 21-04-2007 à 23:04:53    

Bonjour,  
 
j'écris un site de gestion de magasin d'un caviste. L'utilisateur voit tous ses vins en stock et peut en vendre. Pour pouvoir faire une facture avec plusieurs bouteilles différentes à vendre, je stocke des lignes de ventes avec des informations (entre autres nom vin, prix vente HT) dans $_SESSION.  
 
Avant la première ligne de vente, voici ce qui se passe :

Code :
  1. //je teste si le caviste avait déjà commencé à établir une facture
  2. // sinon, $facture->nouvelle crée une facture et  
  3. // $facture->suivante doit ajouter des bouteilles à la facture.
  4. if(!isset($_SESSION['facture'])){
  5.        $facture->nouvelle($id, $qte, $qu_idvin);
  6.  }
  7.  else
  8.  {
  9.  $facture->suivante($id, $qte, $qu_idvin);
  10.  }


La méthode $facture->nouvelle crée un tableau sous cette forme :

Code :
  1. $_SESSION['facture'][0]['qte'] = $qte;
  2. $_SESSION['facture'][0]['nom'] = $nom;


Et le but est que la ligne de vente suivante ressemble à ceci :

Code :
  1. $_SESSION['facture'][1]['qte'] = $qte;
  2. $_SESSION['facture'][1]['nom'] = $nom;


et ainsi de suite... Je ne sais pas à l'avance combien de lignes le caviste va vendre, donc je tente d'implementer un compteur en tout début de la méthode $facture->suivante pour que la seconde ligne soit bien ce que j'ai indiqué ci-dessus et la ligne suivante :

Code :
  1. $_SESSION['facture'][2]['qte'] = $qte;
  2. $_SESSION['facture'][2]['nom'] = $nom;


Seulement, c'est tout bête, mais je n'y arrive pas avec ce compteur. Voici ce que j'ai écrit  :

Code :
  1. $_SESSION['facture'][$n] = $i;
  2. for ($i = 1;  $i<=100; $i++) {
  3.  $_SESSION['facture'][$i] = $_SESSION['facture'][$n];
  4. }


mais ça ne compte strictement rien du tout....  
 
Quelqu'un peut m'aider svp ???
 
Merci d'avance et bonne nuit (je me couche)

Reply

Marsh Posté le 21-04-2007 à 23:04:53   

Reply

Marsh Posté le 21-04-2007 à 23:56:38    

sizeof est ton ami


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 22-04-2007 à 00:18:42    

C'est toujours marrant de voir les idées bizarres des gens :pt1cable:  
 
Sinon j'ai rien compris... pourquoi un compteur ?
 
Pour info tu peux ajouter des lignes à un tableaux à la bourrin :
 

Code :
  1. $tableau = array();
  2. $tableau[] = array('id'=>'0001', 'qte'=>2);
  3. $tableau[] = array('id'=>'0002', 'qte'=>6);
  4. print_r ($tableau);
  5. /*
  6. array (
  7.   [0] => array( [id] => '0001', [qte] => 2),
  8.   [1] => array( [id] => '0002', [qte] => 6)
  9. )
  10. */


 
et récupérer sa taille :

Code :
  1. echo count($tableau);
  2. // 2


 
 
Mais bon, moi si je devais faire des factures je me casserais moins la tête...
 

Code :
  1. class Facture
  2. {
  3.     protected $produits = array();
  4.     public function __construct(array $produits = null)
  5.     {
  6.          if ($produits) $this->produits = $produits;
  7.     }
  8.     public function ajouterProduit($id, $qte)
  9.     {
  10.         $this->produits[] = array($id, $qte);
  11.     }
  12.     public function montantTTC()
  13.     {
  14.          ...
  15.     }
  16.     public function enregistrer()
  17.     {
  18.          ...
  19.     }
  20.     etc ...
  21. }
  22. $produits = empty($_SESSION['facture']) ? array() : $_SESSION['facture'];
  23. $facture = new Facture($produits);
  24. $facture->ajouterProduit( ... );
  25. $facture->enregistrer();


Message édité par astero-H le 22-04-2007 à 00:43:54
Reply

Marsh Posté le 22-04-2007 à 00:35:25    

ça commence pas à 0 les indices en php ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 22-04-2007 à 00:41:28    

Oups corrigé :)
 
Je trouve déjà pas mal de réussir à sortir du print_r() à la main, style debogueur integré :lol:

Reply

Marsh Posté le 22-04-2007 à 00:47:23    

cay l'abit'rude :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 22-04-2007 à 06:13:05    

Ho yeah \o/ encore un gus (qui si ca se trouve est payé) qui fait un site pro pour quelqu'un, mais qui n'est même pas branlé de savoir utiliser un array et une boucle for.
[:roi]


Message édité par gatsu35 le 22-04-2007 à 06:13:28
Reply

Marsh Posté le 22-04-2007 à 08:22:40    

merci pour vos réponses - j'avoue qu'il était tard et que je n'avais plus les idées très très claires... Bref... merci encore.  
 
Je n'ai pas voulu passer par une class Facture comme tu l'as montré Astero-H parce que le plus souvent, je n'établis pas de facture.
 
du coup, voici le bout de code qui s'exécute en cas de vente :  
 

Code :
  1. // je suis donc dans un statement switch...
  2. case 'vente':
  3. $act = $_GET['a']; //indique si je vends, achète ou si vends une seule bouteille
  4. $id = $_GET['no']; // identifiant du vin, me permet de chercher les autres infos dans mysql
  5. $qte = $_POST['qte']; //quantité vendue
  6. $actions->plusMoinsUn($act, $id, $qu_idvin, $qu_majvin, $qu_ou, $qte); //change le stock
  7. $actions->empti_vendi($taux_tva, $id, $qte, $qu_idvin, $qu_vte, $qu_empt);
  8. //enregistre la vente pour la declaration TVA
  9. if($_POST['f'] == 'f')
  10. // donc si je coche que je veux établir une facture :
  11. {
  12.   $facture->facture($id, $qte, $qu_idvin);
  13. }
  14. break;


 
 
Et ensuite la méthode établissant la facture, ligne par ligne de vente :  
 

Code :
  1. public function facture ($id, $qte, $qu_idvin){
  2. if(!isset($_SESSION['facture'])){
  3. $n=1; // je sais, j'aurais pu le laisser à 0...  
  4. }
  5. else
  6. {
  7. $n = count($_SESSION['facture']) + 1;
  8. }
  9. $huh = $qu_idvin . $id;
  10. $demande = $this->execrequete($huh);
  11. while ($nn = $this->objetsuivant($demande)){
  12. $pr_ht =  $nn->prix_empt_ht;
  13. $port = $nn->port;
  14. $coeff = $nn->coeff;
  15. $_SESSION['facture'][$n]['qte'] = $qte;
  16. $_SESSION['facture'][$n]['nom_vin'] = $nn->nom_vin;
  17. $_SESSION['facture'][$n]['annee'] = $nn->annee;
  18. }
  19. $coefTVA = ($taux_tva + 100) / 100;
  20. $vte_ttc = round(($pr_ht + $port ) * $coeff, 2);
  21. $vte_ht = round($vte_ttc / $coefTVA, 2);
  22. $_SESSION['facture'][$n]['prix_ht'] = $vte_ht;
  23. $_SESSION['facture'][$n]['prix_ht_tot'] = $vte_ht * $qte;
  24.     $_SESSION['facture'][$n]['date'] = date("Y-m-d" );
  25. }


et ce bout de code peut s'exécuter autant de fois que nécessaire. Il me donne un tableau de ce genre-ci :

Code :
  1. array(2) {
  2.   [1]=>
  3.   array(5) {
  4.     ["qte"]=>
  5.     string(1) "2"
  6.     ["nom_vin"]=>
  7.     string(14) "Les hermitages"
  8.     ["annee"]=>
  9.     string(4) "2004"
  10.     ["prix_ht"]=>
  11.     float(11.14)
  12.     ["prix_ht_tot"]=>
  13.     float(22.28)
  14.   }
  15.   [2]=>
  16.   array(5) {
  17.     ["qte"]=>
  18.     string(1) "4"
  19.     ["nom_vin"]=>
  20.     string(19) "clos du bord de mer"
  21.     ["annee"]=>
  22.     string(4) "2000"
  23.     ["prix_ht"]=>
  24.     float(12.8)
  25.     ["prix_ht_tot"]=>
  26.     float(51.2)
  27.   }
  28. }


 
et ce tableau, je l'exploite à l'aise avec Smarty !!
 
ce n'est quand même pas très compliqué si ?
 
p.s. : le gus le  fait pour lui-même et il ne se paye pas...


Message édité par thy75 le 22-04-2007 à 08:58:42
Reply

Marsh Posté le 22-04-2007 à 11:28:59    

Tu devrais... :D
 
Sinon pour info, le compteur de for() n'est utilisable que dans la boucle, tu peux pas t'en servir après et encore ce que tu as voulu écrire aurait nécessité une référence (&$i)

Reply

Marsh Posté le 22-04-2007 à 14:18:33    

j'aime pas ton identation


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 22-04-2007 à 14:18:33   

Reply

Marsh Posté le 22-04-2007 à 14:45:29    

Pour une fois que zecrazytux dit pas de connerie ( :D ) +1


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
Reply

Marsh Posté le 22-04-2007 à 15:33:12    

roooh j'en dis quelques unes mais éxagère pas :o :D


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed