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

  FORUM HardWare.fr
  Programmation
  PHP

  implication du compteur for()

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

implication du compteur for()

n°1546446
thy75
Posté le 21-04-2007 à 23:04:53  profilanswer
 

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)

mood
Publicité
Posté le 21-04-2007 à 23:04:53  profilanswer
 

n°1546462
zecrazytux
Posté le 21-04-2007 à 23:56:38  profilanswer
 

sizeof est ton ami


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1546472
astero-H
Posté le 22-04-2007 à 00:18:42  profilanswer
 

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
n°1546474
zecrazytux
Posté le 22-04-2007 à 00:35:25  profilanswer
 

ça commence pas à 0 les indices en php ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1546475
astero-H
Posté le 22-04-2007 à 00:41:28  profilanswer
 

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

n°1546476
zecrazytux
Posté le 22-04-2007 à 00:47:23  profilanswer
 

cay l'abit'rude :)


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1546498
gatsu35
Posté le 22-04-2007 à 06:13:05  profilanswer
 

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
n°1546501
thy75
Posté le 22-04-2007 à 08:22:40  profilanswer
 

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
n°1546530
leflos5
On est ou on est pas :)
Posté le 22-04-2007 à 11:28:59  profilanswer
 

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)

n°1546574
zecrazytux
Posté le 22-04-2007 à 14:18:33  profilanswer
 

j'aime pas ton identation


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
mood
Publicité
Posté le 22-04-2007 à 14:18:33  profilanswer
 

n°1546578
Shinuza
This is unexecpected
Posté le 22-04-2007 à 14:45:29  profilanswer
 

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.
n°1546584
zecrazytux
Posté le 22-04-2007 à 15:33:12  profilanswer
 

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


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  implication du compteur for()

 

Sujets relatifs
order by dans clause match => comment bloquer le compteur[T-SQL] Créer un compteur (clé) dans un select
Rafraichissement d'un compteurAide Compteur Cota
Insertion de compteur javascript dans feuille XSL[Excel VBA] Compteur - incrémentation
Cherche compteur (très) intelligentCompteur avec Tkinter
[CSS] Compteur de visites et DIV caché, ça worke quand même?Compteur de visite --> erreur
Plus de sujets relatifs à : implication du compteur for()


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