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 :

Récupérer les différents prix de la commande [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Récupérer les différents prix de la commande
    Bonjour tout le monde,

    Je réalise un site en PHP orientée objet avec des classes, des DAO, des contrôles et des vues.

    Mon souci est pour récupérer(afin d'enregistrer) le prix HT, le prixTVA et le prix total à payer.

    Tout d'abord j'ai une vue nommée "V_commande.php" qui permet d'afficher les renseingements sur le(s) article(s) que le client souhaite commander dont le prix HT...., voici son code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <form name="commande" method="POST" action="index.php?action=accepter_commande">
    	<table>
    		<tr>
    			<th>Code</th>			<!-- Création de la colonne "Code" -->
    			<th>Marque</th>			<!-- Création de la colonne "Marque" -->
    			<th>Modele</th>			<!-- Création de la colonne "Modele" -->
    			<th>Cylindre</th>		<!-- Création de la colonne "Cylindre" -->
    			<th>Designation</th>	<!-- Création de la colonne "Designation" -->
    			<th>Prix</th>			<!-- Création de la colonne "Prix" -->
    			<th>Quantit&eacute;</th>		<!-- Création de la colonne "Quantité" -->
    			<th>Montant</th>		<!-- Création de la colonne "Montant" -->
    		</tr>
    		<?php
    		$i=0;
     
    		$LesLignesCdes=$Cde->get_LesLignesCommandes()->getAll(); //renvoie les lignes de commande de la variable 'maCde'
     
    		// Pour chaque lignes de commandes correspondants à la variable "article" on insére les données des articles choissit
    		foreach ($LesLignesCdes as $article)
    		{ 
    			$i=$i+1;?>
    			<tr>
    				<td><?php echo $article->get_article()->get_key(); ?></td>
    				<td><?php echo $article->get_article()->get_marque(); ?></td>
    				<td><?php echo $article->get_article()->get_modele(); ?></td>
    				<td><?php echo $article->get_article()->get_cylindre(); ?></td>
    				<td><?php echo $article->get_article()->get_designation(); ?></td>
    				<td><?php echo number_format($article->get_article()->get_prixHT(),2,"."," ");?></td>
    				<td>
    					<!-- 'type="text"' Permet d'afficher la quantité d'article commandé par article -->
    					<input type="text" readonly="true" name="quantite<?php echo $i; ?>" value="<?php echo $article->get_Qte(); ?>" class="quantite"<?php echo $article->get_Qte(); ?>"/>
    				</td>
    				<td>
    					<!--  number_format permet de formater un nombre pour l'affichage -->
    					<?php echo number_format(($article->get_article()->get_prixHT()*$article->get_Qte()), 2,"."," "); ?>
    				</td>
    				<td>
    					<input type="hidden" name="cumul" value="<?php echo $i; ?>"/>
    				</td>
    			</tr>
    		<?php 
    		}
    		?>
    		<tr>
    			<!--  6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    				<th>Montant TTC</th>
    				<td><?php echo number_format($MaCde->retournePrixTotalTTC(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Dont T.V.A.</th>
    			<td><?php echo number_format($MaCde->retourneTVA(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Frais de port</th>
    			<td><?php echo number_format($MaCde->retourneFraisPort(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Montant a payer</th>
    			<td><?php echo number_format($MaCde->retournePrixTotalAPayer(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 4 colonnes vides -->
    			<td/><td/><td/><td/>
    			<!-- 'type="image"' permet d'afficher le bouton "commander" -->
    			<td><input type="image" src="images_gabarit/commander1.jpg"/></td>
    			<td/><td/>
    		</tr>
    	</table>
    </form>
    Puis lorsque le client clique sur le bouton "commander" alors l'exécution du controles nommée "C_AccepterCommande.php" est effectué, voici son code :
    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
    22
    23
    24
    25
    26
    27
    28
    <?php
    	session_start();
    	$IdClt=$_COOKIE["siteweb_php"];						// Création du cookie
    	$date=date("Y")."-".date("m")."-".date("d");	// Variable permettant de gérer une date
     
    	//$LeClt=DAO_client::ChargerUnClient($IdClt);	// Permet le chargement d'un client dans la variable "LeClt"
    	$i=0;
     
    	// Pour chaque article appartenant à la variable de session 'commander' on appel la fonction 'AjouterLigneCommande via la variable "MaCde"
    	foreach($_SESSION['Commander'] as $article)
    	{
    		$NvCde=DAO_Commande::NouvelleCde();
    		$i=$i+1;
    		$MaCde=new commande($NvCde, $IdClt, $date);
    		$Cde=$MaCde->AjouterLigneCommande($article,$_POST['quantite'.$i]);	
    	}
     
    	// Appel de la fonction 'Sauvegarder_UneCommande' via la variable "MaCde"
    	$MaCommande=DAO_Commande::SauvegarderCommande($MaCde);
    	unset($_SESSION["panier"]);
    	?>
     
    	<!-- Message de fin de commande -->
    	<div id="finCommande">
    		<?php
    			echo "<h1>votre commande a bien &eacute;t&eacute; prise en compte</h1>";
    		?>
    	</div>
    J'aimerais pouvoir insérer le prixHT, prixTVA et prix total à payer dans la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $MaCde=new commande($NvCde, $IdClt, $date);
    amis malheureusement je n'y arrive pas.

    Comment puis-je faire??

    Cordialement!!

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    il y a un bout de code inutile qui se balade dans une balise :

    class="quantite"<?php echo $article->get_Qte(); ?>"/>

    à remplacer par :

    class="quantite" />

    Aussi, concernant ton problème de prix HT TTC etc.. à passer en paramètres à ta classe, il te suffirait de modifier le constructeur de la classe commande(). Par contre, étant donné que tu as l'identifiant du produit en paramètres, je ne vois pas l'intérêt de lui passer ces valeurs car elles sont implicitement associés à l'id.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    il y a un bout de code inutile qui se balade dans une balise :

    class="quantite"<?php echo $article->get_Qte(); ?>"/>

    à remplacer par :

    class="quantite" />
    Effectivement cela été inutile, merci de me l'avoir fais remarqué!!

    Par contre, étant donné que tu as l'identifiant du produit en paramètres, je ne vois pas l'intérêt de lui passer ces valeurs car elles sont implicitement associés à l'id.
    Suis désolé mais je comprend pas trop ce que tu voulais dire par là??

    il te suffirait de modifier le constructeur de la classe commande().
    Je suis d'accord avec toi, je pense aussi que le problème vient d ela mais justement j'ai mit ce sujet sur le forum ca rje vois pas trop comment faire.

    Pourrais-tu m'aider s'il te plais??

    Cordialement!!

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Loic,

    est-ce que tu sais où se trouve le fichier qui contient la classe commande ?

    Si oui, pourrais-tu nous montrer le code de cette classe ?


    Par contre, étant donné que tu as l'identifiant du produit en paramètres, je ne vois pas l'intérêt de lui passer ces valeurs car elles sont implicitement associés à l'id.
    Suis désolé mais je comprend pas trop ce que tu voulais dire par là??
    En fait tu veux faire quoi exactement ?

    Car je pense que tu pourrais créer une méthode dans ta classe qui te retournerait la somme des produits des prix et de la quantité de chaque l'article (à laquelle tu multiplie la TVA si il te faut le TTC).

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    est-ce que tu sais où se trouve le fichier qui contient la classe commande ?
    Oui heureusement que même que je sais ou je met les pages de mon site!!LOL.
    Voici son code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    <?php
    class commande
    {
     
    	private $port=4;			 // Le port est une constante : 4 ¤ de frais de port pour chaque commande
    	private $Int_numligne; 			 // Le numero de la ligne de commande
    	private $Int_idCde;				 // Le numéro de la commande
    	private $Date_DateCde;			 // La date de la commande
    	private $Obj_client;			 // Objet client
    	private $Dec_montantHT;			// Le montant HT de la commande
    	private $Dec_montantTVA;      
    	private $Dec_montatTTC;
       	private $Col_lesLignesCommandes; // Collection de LigneCommande
     
    	// Le constructeur
    	public function commande( $leidCde=null, $leClient=null, $laDateCde=null, $LemontantHT=null, $LemontantTVA=null, $LemontantTTC=null)
    	{
    		$this->Int_numligne=1;
    		$this->Int_idCde=$leidCde;
    		$this->Date_DateCde = $laDateCde;
    		$this->Obj_client = $leClient;
    	  	$this->Col_lesLignesCommandes = new collection();
    		$this->Dec_montantHT = $LemontantHT;
    		$this->Dec_montantTVA = $LemontantTVA;
    		$this->Dec_montantTTC = $LemontantTTC;
    	}
     
    	// Les getteurs
    	public function get_idCde()
    	{
    		return $this->Int_idCde;
    	}
    	public function get_Date_Cde()
    	{
    		return $this->Date_DateCde;	
    	}
     	public function get_client()
       	{
          return $this->Obj_client;
       	}	
     	public function get_LesLignesCommandes()
       	{
          return $this->Col_lesLignesCommandes;
       	}
    	public function get_numligne()
       	{
          return $this->Int_numligne;
       	}
    	public function get_montantHT()
    	{
    		return $this->Dec_montantHT;
    	}
    	public function get_montantTVA()
    	{
    		return $this->Dec_montantTVA;
    	}
    	public function get_montantTTC()
    	{
    		return $this->Dec_montantTTC;
    	}
     
    	 // Les setteurs
    	public function set_idCde($leidCde)
    	{
    		$this->Int_idCde =$leidCde;
    	}
    	public function set_Date_Cde($laDateCde)
    	{
    		$this->Date_DateCde =$laDateCde;
    	}
    	public function set_client($leClient)
    	{
    		$this ->Obj_client =$leClient;
    	}
    	public function set_lesLignesCommandes($lesLignes)
    	{
    		$Col_lesLignesCommandes = $lesLignes;
    	}
    	public function set_numligne($Numligne)
    	{
    		$this->Int_numligne=$Numligne;
    	}
    	public function set_montantHT($LemontantHT)
    	{
    		$this->Dec_montantHT=$LemontantHT;
    	}
    	public function set_montantTVA($LemontantTVA)
    	{
    		$this->Dec_montantTVA=$LemontantTVA;
    	}
    	public function set_montantTTC($LemontantTTC)
    	{
    		$this->Dec_montantTTC=$LemontantTTC;
    	}
     
    	// Méthodes : afficher
    	public function Afficher() {
    		$ch=$this->get_idCde()." ".$this->get_Date_Cde()." ".$this->get_client()." ".$this->get_montantTotal()->Afficher();
    		return $ch;
    	}
     
    	// Méthodes : Ajouter une ligne de commande
    	public function AjouterLigneCommande($Article, $Qte) {
    		$ligneCde=new ligne_commande($this,$Article,$Qte,$this->numligne, $this->Dec_montantHT);
    		$this->set_numligne($this->numligne+1);
    		$this->Col_lesLignesCommandes->add($ligneCde);
    	}
     
    	// Méthodes : retourner les lignes de commandes
    	public function retournerLesLignes() {
    		//retourne tout les objets contenu dans ligne de commande
    		$tableau = $this->get_LesLignesCommandes()->getAll();
    		return $tableau;
    	}
     
    	// Méthodes : retourner le nombre de ligne de commande
    	public function retournerNombreLignes() {
    		//retourne le nombre de ligne de commande
    		$tableau = $this->get_lesLignesCommandes()->getAll();
    		return count($tableau);	//on utilise la fonction count
    	}
     
    	// Méthodes : retourne la TVA
    	public function retourneTVA(){
    		$TauxVA=$this->retournePrixTotalTTC()-$this->retournePrixTotalHT();
    		return $TauxVA;
    	}
     
    	// Méthodes : retourner le frais de port
    	public function retourneFraisPort(){
    		$FraisPort=$this->port;
    		return $FraisPort;
    	}
     
    	// Méthodes : retourner le prix total Toute taxe comprise
    	public function retournePrixTotalTTC(){
    		$tableau=$this->retournerLesLignes();	
    		$résultat=0;
    		foreach($tableau as $o) {
    			$résultat=$résultat + $o->get_Article()->get_prixHT() * $o->get_Qte();
    		}
    		return $résultat;
    	}
     
    	// Méthodes : retourner le prix total hors taxe
    	public function retournePrixTotalHT(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$PrixHT=$PrixTTC/1.196;
    		return $PrixHT;
    	}
     
    	// Méthodes : retourner le prix total à payer
    	public function retournePrixTotalAPayer(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$résultat=$PrixTTC + $this->port;
    		return $résultat;
    	}
    }
    ?>
    En fait tu veux faire quoi exactement ?
    Ben en faite je souhaite réaliser l'enregistrement de la commande d'un client.

    Cordialement

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Car je pense que tu pourrais créer une méthode dans ta classe qui te retournerait la somme des produits des prix et de la quantité de chaque l'article (à laquelle tu multiplie la TVA si il te faut le TTC).
    Comme vous pouvez le constater dans ma classe, j'ai déja des méthodes permettant de calculer les différents prix dont j'ai besoins.

    Je souhaiterais savoir comment je peux faire pour appeler les méthodes de la classe commande?? Car ce qui me bloque c'est que dans mon contrôles "C_Accepter_Commande" je n'est pas tout les renseignements qui me permettent d'appeler une instance de cette classe donc comment feriez-vous??

    Merci d'avance!!

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je souhaite enregistrer la commande dans ma base de données MySql.

    Voici le code que j'utilise :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
     
    // Le code de mon controle nommée "C_Accepter_Commande.php"
    <?php
    	session_start();
    	$IdClt=$_COOKIE["siteweb_php"];						// Création du cookie
    	$date=date("Y")."-".date("m")."-".date("d");	// Variable permettant de gérer une date
     
    	//$LeClt=DAO_client::ChargerUnClient($IdClt);	// Permet le chargement d'un client dans la variable "LeClt"
    	$i=0;
     
    	// Pour chaque article appartenant à la variable de session 'commander' on appel la fonction 'AjouterLigneCommande via la variable "MaCde"
    	foreach($_SESSION['Commander'] as $article)
    	{
    		$NvCde=DAO_Commande::NouvelleCde();
    		$i=$i+1;
    		$LaCde=new commande();
    		$PrixHT = $LaCde->retournePrixTotalTTC();
    		$PrixTVA = $LaCde->retourneTVA();
    		$PrixTTC = $LaCde->retournePrixTotalAPayer();
    		$MaCde=new commande ($NvCde, $IdClt, $date, $PrixHT, $PrixTVA, $PrixTTC);
     
    		$Cde=$MaCde->AjouterLigneCommande($article,$_POST['quantite'.$i]);	
    	}
     
    	// Appel de la fonction 'Sauvegarder_UneCommande' via la variable "MaCde"
    	$MaCommande=DAO_Commande::SauvegarderCommande($MaCde);
    	unset($_SESSION["panier"]);
    	?>
     
    	<!-- Message de fin de commande -->
    	<div id="finCommande">
    		<?php
    			echo "<h1>votre commande a bien &eacute;t&eacute; prise en compte</h1>";
    		?>
    	</div>
     
     
     
    // Voici le code de la classe commande 
    <?php
    class commande
    {
     
    	private $port=4;			 // Le port est une constante : 4 ¤ de frais de port pour chaque commande
    	private $Int_numligne; 			 // Le numero de la ligne de commande
    	private $Int_idCde;				 // Le numéro de la commande
    	private $Date_DateCde;			 // La date de la commande
    	private $Obj_client;			 // Objet client
    	private $Dec_montantHT;			// Le montant HT de la commande
    	private $Dec_montantTVA;      
    	private $Dec_montatTTC;
       	private $Col_lesLignesCommandes; // Collection de LigneCommande
     
    	// Le constructeur
    	public function commande( $leidCde=null, $leClient=null, $laDateCde=null, $LemontantHT=null, $LemontantTVA=null, $LemontantTTC=null)
    	{
    		$this->Int_numligne=1;
    		$this->Int_idCde=$leidCde;
    		$this->Date_DateCde = $laDateCde;
    		$this->Obj_client = $leClient;
    	  	$this->Col_lesLignesCommandes = new collection();
    		$this->Dec_montantHT = $LemontantHT;
    		$this->Dec_montantTVA = $LemontantTVA;
    		$this->Dec_montantTTC = $LemontantTTC;
    	}
     
    	// Les getteurs
    	public function get_idCde()
    	{
    		return $this->Int_idCde;
    	}
    	public function get_Date_Cde()
    	{
    		return $this->Date_DateCde;	
    	}
     	public function get_client()
       	{
          return $this->Obj_client;
       	}	
     	public function get_LesLignesCommandes()
       	{
          return $this->Col_lesLignesCommandes;
       	}
    	public function get_numligne()
       	{
          return $this->Int_numligne;
       	}
    	public function get_montantHT()
    	{
    		return $this->Dec_montantHT;
    	}
    	public function get_montantTVA()
    	{
    		return $this->Dec_montantTVA;
    	}
    	public function get_montantTTC()
    	{
    		return $this->Dec_montantTTC;
    	}
     
    	 // Les setteurs
    	public function set_idCde($leidCde)
    	{
    		$this->Int_idCde =$leidCde;
    	}
    	public function set_Date_Cde($laDateCde)
    	{
    		$this->Date_DateCde =$laDateCde;
    	}
    	public function set_client($leClient)
    	{
    		$this ->Obj_client =$leClient;
    	}
    	public function set_lesLignesCommandes($lesLignes)
    	{
    		$Col_lesLignesCommandes = $lesLignes;
    	}
    	public function set_numligne($Numligne)
    	{
    		$this->Int_numligne=$Numligne;
    	}
    	public function set_montantHT($LemontantHT)
    	{
    		$this->Dec_montantHT=$LemontantHT;
    	}
    	public function set_montantTVA($LemontantTVA)
    	{
    		$this->Dec_montantTVA=$LemontantTVA;
    	}
    	public function set_montantTTC($LemontantTTC)
    	{
    		$this->Dec_montantTTC=$LemontantTTC;
    	}
     
    	// Méthodes : afficher
    	public function Afficher() {
    		$ch=$this->get_idCde()." ".$this->get_Date_Cde()." ".$this->get_client()." ".$this->get_montantTotal()->Afficher();
    		return $ch;
    	}
     
    	// Méthodes : Ajouter une ligne de commande
    	public function AjouterLigneCommande($Article, $Qte) {
    		$ligneCde=new ligne_commande($this,$Article,$Qte,$this->numligne, $this->Dec_montantHT);
    		$this->set_numligne($this->numligne+1);
    		$this->Col_lesLignesCommandes->add($ligneCde);
    	}
     
    	// Méthodes : retourner les lignes de commandes
    	public function retournerLesLignes() {
    		//retourne tout les objets contenu dans ligne de commande
    		$tableau = $this->get_LesLignesCommandes()->getAll();
    		return $tableau;
    	}
     
    	// Méthodes : retourner le nombre de ligne de commande
    	public function retournerNombreLignes() {
    		//retourne le nombre de ligne de commande
    		$tableau = $this->get_lesLignesCommandes()->getAll();
    		return count($tableau);	//on utilise la fonction count
    	}
     
    	// Méthodes : retourne la TVA
    	public function retourneTVA(){
    		$TauxVA=$this->retournePrixTotalTTC()-$this->retournePrixTotalHT();
    		return $TauxVA;
    	}
     
    	// Méthodes : retourner le frais de port
    	public function retourneFraisPort(){
    		$FraisPort=$this->port;
    		return $FraisPort;
    	}
     
    	// Méthodes : retourner le prix total Toute taxe comprise
    	public function retournePrixTotalTTC(){
    		$tableau=$this->retournerLesLignes();	
    		$résultat=0;
    		foreach($tableau as $o) {
    			$résultat=$résultat + $o->get_Article()->get_prixHT() * $o->get_Qte();
    		}
    		return $résultat;
    	}
     
    	// Méthodes : retourner le prix total hors taxe
    	public function retournePrixTotalHT(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$PrixHT=$PrixTTC/1.196;
    		return $PrixHT;
    	}
     
    	// Méthodes : retourner le prix total à payer
    	public function retournePrixTotalAPayer(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$résultat=$PrixTTC + $this->port;
    		return $résultat;
    	}
    }
    ?>
     
     
     
     
    // Voici le code de la méthode SauvegarderCommande($objCommande)
    public static function SauvegarderCommande($objCommande)
    		{
    			$IdCde=$objCommande->get_idCde();
    			$client=$objCommande->get_client();
    			$DateCde=$objCommande->get_Date_Cde();
    			$MontantHT=$objCommande->get_montantHT();
    			$MontantTVA=$objCommande->get_montantTVA();
    			$MontantTTC=$objCommande->get_montantTTC();
     
    			if (DAO_commande::existe_UneCommande($IdCde))
    			{
    				$req="UPDATE commande SET";
    				$req=$req." ID_CDE=$IdCde";
    				$req=$req." IDclient=$client";
    				$req=$req.", DateCmde='$DateCde'";
    				$req=$req.", Co_MontantHT='$MontantHT'";
    				$req=$req.", Co_MontantTVA='$MontantTVA'";
    				$req=$req.", Co_MontantTTC='$MontantTTC'";
    				$req=$req." WHERE ID_CDE=$IdCde";		
    				//echo $req;
    				$res = mysql_query($req);
    			}
    			else
    			{	
    				$req="INSERT INTO commande VALUES ($IdCde,'$client','$DateCde','$MontantHT','$MontantTVA','$MontantTTC')";
    				echo $req. "<br/>";
    				//$res = mysql_query($req);
    			}
    		}
    Malheureusement voici le résultat de ma requête d'enregistrement :
    INSERT INTO commande VALUES (2,'1','2008-11-05','0','0','4')
    alors que la commande devrait avoir comme prixHT-->500.00 et comme prixTVA-->81.94 et comme prixTTC-->504.00.

    Je vois vraiment pas comment faire pour régler mon problème.

    Je sais qu'il vient de mon code du controle C_AccepterCommande mais je vois pas comment faire pour résoudre mon problème??

    J'ai vraiment besoin ça fais pas mal de temps que je suis dessus et à force je craque!!

    Merci d'avance!

  8. #8
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir Loic,

    Pourrais-tu nous montrer le code de la fonction SauvegarderCommande ?

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    Ben le code de la fonction sauvegardeCommande se situe dans le post précédent à la fin de la partie code.

    Mais je te le remet sans problème :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // Voici le code de la méthode SauvegarderCommande($objCommande)
    public static function SauvegarderCommande($objCommande)
    		{
    			$IdCde=$objCommande->get_idCde();
    			$client=$objCommande->get_client();
    			$DateCde=$objCommande->get_Date_Cde();
    			$MontantHT=$objCommande->get_montantHT();
    			$MontantTVA=$objCommande->get_montantTVA();
    			$MontantTTC=$objCommande->get_montantTTC();
     
    			if (DAO_commande::existe_UneCommande($IdCde))
    			{
    				$req="UPDATE commande SET";
    				$req=$req." ID_CDE=$IdCde";
    				$req=$req." IDclient=$client";
    				$req=$req.", DateCmde='$DateCde'";
    				$req=$req.", Co_MontantHT='$MontantHT'";
    				$req=$req.", Co_MontantTVA='$MontantTVA'";
    				$req=$req.", Co_MontantTTC='$MontantTTC'";
    				$req=$req." WHERE ID_CDE=$IdCde";		
    				//echo $req;
    				$res = mysql_query($req);
    			}
    			else
    			{	
    				$req="INSERT INTO commande VALUES ($IdCde,'$client','$DateCde','$MontantHT','$MontantTVA','$MontantTTC')";
    				echo $req. "<br/>";
    				//$res = mysql_query($req);
    			}
    		}
    J'espère qu'avec cela vous pourrez m'aider??!!

    Cordialement

  10. #10
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Et en enlevant les guillements autour des nombres dans ta requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $req="UPDATE commande SET";
    $req=$req." ID_CDE=$IdCde";
    $req=$req." IDclient=$client";
    $req=$req.", DateCmde='$DateCde'";
    $req=$req.", Co_MontantHT=$MontantHT";
    $req=$req.", Co_MontantTVA=$MontantTVA";
    $req=$req.", Co_MontantTTC=$MontantTTC";
    $req=$req." WHERE ID_CDE=$IdCde";
    Aussi, es-tu sûr de vouloir upadter l'id_cde à la mise à jour d'une commande ?

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    les guillements autour des nombres dans ta requête ?
    Voila le code que cela me donne :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    // Enregistrer une commande
    		public static function SauvegarderCommande($objCommande)
    		{
    			$IdCde=$objCommande->get_idCde();
    			$client=$objCommande->get_client();
    			$DateCde=$objCommande->get_Date_Cde();
    			$MontantHT=$objCommande->get_montantHT();
    			$MontantTVA=$objCommande->get_montantTVA();
    			$MontantTTC=$objCommande->get_montantTTC();
     
    			if (DAO_commande::existe_UneCommande($IdCde))
    			{
    				$req="UPDATE commande SET";
    				$req=$req." IDclient=$client";
    				$req=$req.", DateCmde='$DateCde'";
    				$req=$req.", Co_MontantHT=$MontantHT";
    				$req=$req.", Co_MontantTVA=$MontantTVA";
    				$req=$req.", Co_MontantTTC=$MontantTTC";
    				$req=$req." WHERE ID_CDE=$IdCde";		
    				//echo $req;
    				$res = mysql_query($req);
    			}
    			else
    			{	
    				$req="INSERT INTO commande VALUES ($IdCde,'$client','$DateCde',$MontantHT,$MontantTVA,$MontantTTC)";
    				echo $req. "<br/>";
    				//$res = mysql_query($req);
    			}
    		}
    Mais rien ne change.

    Je préfére te redire que dans la méthode SauvegarderCommande(), c'est la deuxième partie qui m'inporte là c'est à dire "INSERT INTO...." car je souhaite enregistrer une nouvelle commande et non enregistrer les modifications d'une commande déja existante.

    Je pense que mon problème provient de l'appel des méthode de ma classe commande dans le controle "C_AccepterCommande.php"qu'en pense-tu?? Vois-tu quelque chose qui n'est pas bon ou mal fait??

    Merci d'avance!!

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut des nouvelles du problème
    Bonjour tout le monde,

    voila depuis le temps, j'ai essayé plusieurs chose et j'ai mieux compris d'ou proenais mon problème mais je n'arrive à le résoudre. J'espère que vous pourriez m'aider.

    Je rexplique le tout pour vous éviter d'avoir à tout relire :
    * Explication brief du projet : Je réalise un site marchand(vente de moto) en PHP orienté objet avec une base de données MySQL.
    * Explication du problème : L'utilisateur du site choisit une moto, elle est insérré dans "MonPanier". Ensuite, il souhaite la commander définitivement. Donc il va dans son panier(jusque la aucun problème.) puis il clique sur le bouton "Valider" et la je reçois le message d'erreur suivant :
    Fatal error: Using $this when not in object context in C:\wamp\www\Moto_28(nouveau)\Les_classes\class_commande.php on line 105
    Voici le code de la classe commande (la ligne 105 dont le message d'erreur parle est écrit en rouge") :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    <?php
    class commande
    {
    	
    	private $port=4;			 // Le port est une constante : 4 ¤ de frais de port pour chaque commande
    	private $Int_numligne; 			 // Le numero de la ligne de commande
    	private $Int_idCde;				 // Le numéro de la commande
    	private $Date_DateCde;			 // La date de la commande
    	private $Obj_client;			 // Objet client
    	private $Dec_montantHT;			// Le montant HT de la commande
    	private $Dec_montantTVA;      
    	private $Dec_montatTTC;
       	private $Col_lesLignesCommandes; // Collection de LigneCommande
    	
    	// Le constructeur
    	public function commande( $leidCde=null, $leClient=null, $laDateCde=null, $LemontantHT=null, $LemontantTVA=null, $LemontantTTC=null)
    	{
    		$this->Int_numligne=1;
    		$this->Int_idCde=$leidCde;
    		$this->Date_DateCde = $laDateCde;
    		$this->Obj_client = $leClient;
    	  	$this->Col_lesLignesCommandes = new collection();
    		$this->Dec_montantHT = $LemontantHT;
    		$this->Dec_montantTVA = $LemontantTVA;
    		$this->Dec_montantTTC = $LemontantTTC;
    	}
    	
    	// Les getteurs
    	public function get_idCde()
    	{
    		return $this->Int_idCde;
    	}
    	public function get_Date_Cde()
    	{
    		return $this->Date_DateCde;	
    	}
     	public function get_client()
       	{
          return $this->Obj_client;
       	}	
     	public function get_LesLignesCommandes()
       	{
          return $this->Col_lesLignesCommandes;   
       	}
    	public function get_numligne()
       	{
          return $this->Int_numligne;
       	}
    	public function get_montantHT()
    	{
    		return $this->Dec_montantHT;
    	}
    	public function get_montantTVA()
    	{
    		return $this->Dec_montantTVA;
    	}
    	public function get_montantTTC()
    	{
    		return $this->Dec_montantTTC;
    	}
       	
    	 // Les setteurs
    	public function set_idCde($leidCde)
    	{
    		$this->Int_idCde =$leidCde;
    	}
    	public function set_Date_Cde($laDateCde)
    	{
    		$this->Date_DateCde =$laDateCde;
    	}
    	public function set_client($leClient)
    	{
    		$this ->Obj_client =$leClient;
    	}
    	public function set_lesLignesCommandes($lesLignes)
    	{
    		$Col_lesLignesCommandes = $lesLignes;
    	}
    	public function set_numligne($Numligne)
    	{
    		$this->Int_numligne=$Numligne;
    	}
    	public function set_montantHT($LemontantHT)
    	{
    		$this->Dec_montantHT=$LemontantHT;
    	}
    	public function set_montantTVA($LemontantTVA)
    	{
    		$this->Dec_montantTVA=$LemontantTVA;
    	}
    	public function set_montantTTC($LemontantTTC)
    	{
    		$this->Dec_montantTTC=$LemontantTTC;
    	}
    	
    	// Méthodes : afficher
    	public function Afficher() {
    		$ch=$this->get_idCde()." ".$this->get_Date_Cde()." ".$this->get_client()." ".$this->get_montantTotal()->Afficher();
    		return $ch;
    	}
    	
    	// Méthodes : Ajouter une ligne de commande
    	public static function AjouterLigneCommande($Article, $Qte) {
    		$ligneCde=new ligne_commande($this,$Article,$Qte,Int_numligne,Dec_montantHT);
    		$this->set_numligne(Int_numligne+1);
    		$this->Col_lesLignesCommandes->add($ligneCde);
    	}
    
    	// Méthodes : retourner les lignes de commandes
    	public static function retournerLesLignes() 
    	{
    		//retourne tout les objets contenu dans ligne de commande
    		$tableau = commande::get_LesLignesCommandes()->getAll();
    		return $tableau;
    	}
    
    	// Méthodes : retourner le nombre de ligne de commande
    	public static function retournerNombreLignes() {
    		//retourne le nombre de ligne de commande
    		$tableau = $this->get_lesLignesCommandes()->getAll();
    		return count($tableau);	//on utilise la fonction count
    	}
    
    	// Méthodes : retourne la TVA
    	public static function retourneTVA(){
    		$TauxVA=$this->retournePrixTotalTTC()-$this->retournePrixTotalHT();
    		return $TauxVA;
    	}
    
    	// Méthodes : retourner le frais de port
    	public static function retourneFraisPort(){
    		$FraisPort=$this->port;
    		return $FraisPort;
    	}
    
    	// Méthodes : retourner le prix total Toute taxe comprise
    	public static function retournePrixTotalTTC(){
    		$tableau=commande::retournerLesLignes();	
    		$resultat=0;
    		echo "1";
    		foreach($tableau as $o) {
    			$resultat=$résultat + $o->get_Article()->get_prixHT() * $o->get_Qte();
    		}
    		return $resultat;
    	}
    
    	// Méthodes : retourner le prix total hors taxe
    	public static function retournePrixTotalHT(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$PrixHT=$PrixTTC/1.196;
    		return $PrixHT;
    	}
    
    	// Méthodes : retourner le prix total à payer
    	public static function retournePrixTotalAPayer(){
    		$PrixTTC=$this->retournePrixTotalTTC();
    		$résultat=$PrixTTC + $this->port;
    		return $résultat;
    	}
    }
    ?>
    Je pense que vous avez tout ce qui faut pour pouvoir m'aider!!

    J'ai vraiment besoin de votre aide car je commence sérieusement à m'arracher les cheveux!!

    Merci d'avance à tous!!

  13. #13
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Je pense que tu appelles une méthode statique qui elle fait appel a une méthode set_num_ligne qui ne peut s'executer que dans un contexte d'objet instancié.

    Pourquoi avoir déclaré de facon statiques les méthodes comme AjouterLigneCommande ?

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    Je pense que tu appelles une méthode statique qui elle fait appel a une méthode set_num_ligne qui ne peut s'executer que dans un contexte d'objet instancié.
    effectivement tu as raison.

    Pourquoi avoir déclaré de facon statiques les méthodes comme AjouterLigneCommande ?
    j'ai déclarer cette méthode en statique car mon professeur nous l'a conseillé vu que l'on utilise pas d'héritage entre les classe d'accées aux données et les classes métiers.

    Donc que dois-je faire pour régler mon problème d'aprés toi??

    Merci d'avance

  15. #15
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Ta méthode ne devrait pas être statique si son fonctionnement dépend de l'instanciation de ton objet.

    Par exemple, si dans la méthode statique tu fais référence a des éléments qui aurait dû etre construit à l'instanciation (__construct()) ca ne marchera pas.

    Il faut donc que tu réfléchisses aux méthodes que tu dois déclarer statiques (si il y a lieu).

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    Merci pour ta réponse.

    Même si je retire le 'static' de la fonction 'AjouterLigneCommande', j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Using $this when not in object context in C:\wamp\www\Moto_28(nouveau)\Les_classes\class_commande.php on line 105
    Je vois vraiment pas comment faire!!??

    Cordialement

  17. #17
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    As-tu instancié ton objet commande avec un "new" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cmd = new commande( $leidCdel,$leClient);
    $cmd->AjouterLigneCommande($Article, $Qte);
    Mais bon je comprends pas trop la logique de ta classe, par exemple pourquoi il y a des paramètres comme montant TTC, HT dans le constructeur alors que ces montants sont définis par la somme des prix des articles multipliés respectivement par leur quantité pour chacune des lignes de commandes ajoutées.

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à ThomasR
    As-tu instancié ton objet commande avec un "new" ?
    Voila ce que je viens de faire :
    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
    22
    23
    24
    25
    26
    27
    <?php
     
    	if(isset($_COOKIE['siteweb_php'])) // Si le cookie existe, donc je peux l'afficher
    	{
    		// démarrage de la session
    		session_start();
    		$i=0;
     
    		// Pour chaque article appartenant à la variable de session 'commander' on appel la fonction 'AjouterLigneCommande' via la variable "MaCde"
    		foreach($_SESSION['Commander'] as $article)
    		{
    			$Client=DAO_Client::ChargerUnClient($_COOKIE['siteweb_php']);
    			$NvCde=DAO_Commande::NouvelleCde();
    			$i=$i+1;
    			$MaCde=new commande($NvCde, $Client);
    			$MaCde->AjouterLigneCommande($article,$_POST['quantite'.$i]);
    		}
     
    		// Require permet d'exécuter la vue suivante : "vue de la commande"
    		require("Vues/V_commande.php"); // require = include sauf pour la gestion des erreurs (fatal error au lieu de warning)
    	} 
    	else
    	{
    		// Require permet d'exécuter la vue suivante : "vue du client"
    		require("Vues/V_identification.php");
    	}
    ?>
    Maintenant j'obtient le message d'erreur :
    Fatal error: Using $this when not in object context in C:\wamp\www\Moto_28(nouveau)\Les_classes\class_commande.php on line 37
    Voici la ligne 37 (en rouge)de la classe commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function get_LesLignesCommandes()
       	{
          return $this->Col_lesLignesCommandes;   
       	}
    Mais bon je comprends pas trop la logique de ta classe, par exemple pourquoi il y a des paramètres comme montant TTC, HT dans le constructeur alors que ces montants sont définis par la somme des prix des articles multipliés respectivement par leur quantité pour chacune des lignes de commandes ajoutées.
    Merci de me l'avoir redis, j'avais complétement oublié je devais les supprimé!!Merci!!

    Sur le document Word ci-joint voici la fenêtre que j'obtient.
    Pour obtenir les informations qui correspondent au produit(s) choisit voici la vue qui est réalisé :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <form name="commande" method="POST" action="index.php?action=accepter_commande">
    	<table>
    		<tr>
    			<th>Code</th>			<!-- Création de la colonne "Code" -->
    			<th>Marque</th>			<!-- Création de la colonne "Marque" -->
    			<th>Modele</th>			<!-- Création de la colonne "Modele" -->
    			<th>Cylindre</th>		<!-- Création de la colonne "Cylindre" -->
    			<th>Designation</th>	<!-- Création de la colonne "Designation" -->
    			<th>Prix</th>			<!-- Création de la colonne "Prix" -->
    			<th>Quantit&eacute;</th>		<!-- Création de la colonne "Quantité" -->
    			<th>Montant</th>		<!-- Création de la colonne "Montant" -->
    		</tr>
    		<?php
    		$i=0;
     
    		$LesLignesCdes=$MaCde->get_LesLignesCommandes()->getAll(); //renvoie les lignes de commande de la variable 'maCde'
     
    		// Pour chaque lignes de commandes correspondants à la variable "article" on insére les données des articles choissit
    		foreach ($LesLignesCdes as $article)
    		{ 
    			$i=$i+1;?>
    			<tr>
    				<td><?php echo $article->get_article()->get_key(); ?></td>
    				<td><?php echo $article->get_article()->get_marque(); ?></td>
    				<td><?php echo $article->get_article()->get_modele(); ?></td>
    				<td><?php echo $article->get_article()->get_cylindre(); ?></td>
    				<td><?php echo $article->get_article()->get_designation(); ?></td>
    				<td><?php echo number_format($article->get_article()->get_prixHT(),2,"."," ");?></td>
    				<td>
    					<!-- 'type="text"' Permet d'afficher la quantité d'article commandé par article -->
    					<input type="text" readonly="true" name="quantite" value="<?php echo $article->get_Qte(); ?>" class="quantite"/>
    				</td>
    				<td>
    					<!--  number_format permet de formater un nombre pour l'affichage -->
    					<?php echo number_format(($article->get_article()->get_prixHT()*$article->get_Qte()), 2,"."," "); ?>
    				</td>
    				<td>
    					<input type="hidden" name="cumul" value="<?php echo $i; ?>"/>
    				</td>
    			</tr>
    		<?php 
    		}
    		?>
    		<tr>
    			<!--  6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    				<th>Montant TTC</th>
    				<td><?php echo number_format($MaCde->retournePrixTotalTTC(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Dont T.V.A.</th>
    			<td><?php echo number_format($MaCde->retourneTVA(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Frais de port</th>
    			<td><?php echo number_format($MaCde->retourneFraisPort(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    			<th>Montant a payer</th>
    			<td><?php echo number_format($MaCde->retournePrixTotalAPayer(),2,"."," "); ?></td>
    		</tr>
    		<tr>
    			<!-- 4 colonnes vides -->
    			<td/><td/><td/><td/>
    			<!-- 'type="image"' permet d'afficher le bouton "commander" -->
    			<td><input type="image" src="images_gabarit/commander1.jpg"/></td>
    			<td/><td/>
    		</tr>
    	</table>
    </form>
    Le problème survient lorsque j'arrive à cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <tr>
    			<!--  6 colonnes vides -->
    			<td/><td/><td/><td/><td/><td/>
    				<th>Montant TTC</th>
    				<td><?php echo number_format($MaCde->retournePrixTotalTTC(),2,"."," "); ?></td>
    		</tr>
    Voici la méthode retournePrixTotalTTC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function retournePrixTotalTTC(){
    		$tableau=commande::retournerLesLignes();	
    		$resultat=0;
    		echo "1";
    		foreach($tableau as $o) {
    			$resultat=$résultat + $o->get_Article()->get_prixHT() * $o->get_Qte();
    		}
    		return $resultat;
    	}
    Merci d'avance!!
    Fichiers attachés Fichiers attachés

  19. #19
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut avancement mais nouveau problème
    Bonjour tout le monde,

    voila j'ai réussit à résoudre mon précédent problème mais malheureusement je suis encore bloqué et la je vois vraiment pas comment faire.

    Voici le message d'erreur obtenu :
    Fatal error: Using $this when not in object context in C:\wamp\www\Moto_28(nouveau)\Les_classes\class_commande.php on line 85
    Voici le code de la méthode dont se situe la ligne 85 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Méthodes : retourner les lignes de commandes
    	public function retournerLesLignes() 
    	{
    		//retourne tout les objets contenu dans ligne de commande
    		$tableau = $this->get_LesLignesCommandes()->getAll();
    		return $tableau;
    	}
    Voici la méthode 'get_LesLignesCommandes()' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function get_LesLignesCommandes()
       	{
          return $this->Col_lesLignesCommandes;   
       	}
    Voici le code du controle qui me permet d'accepter la commande (la ligne en rouge correspond l'appelle de la méthode qui fait appel à la méthode 'get_LesLignesCommandes()'):
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    	session_start();
    	$IdClt=$_COOKIE["siteweb_php"];						// Création du cookie
    	$date=date("Y")."-".date("m")."-".date("d");	// Variable permettant de gérer une date
    
    	//$LeClt=DAO_client::ChargerUnClient($IdClt);	// Permet le chargement d'un client dans la variable "LeClt"
    	$i=0;
    	
    	// Pour chaque article appartenant à la variable de session 'commander' on appel la fonction 'AjouterLigneCommande via la variable "MaCde"
    	foreach($_SESSION['Commander'] as $article)
    	{
    		$NvCde=DAO_Commande::NouvelleCde();
    		$Client=DAO_Client::ChargerUnClient($IdClt);
    		$i=$i+1;
    		$LaCde=new commande($NvCde, $Client, $date);
    		
                              $Cde=$LaCde->AjouterLigneCommande($article,$_POST['quantite'.$i]);	
    	}
    	
    	// Appel de la fonction 'Sauvegarder_UneCommande' via la variable "LaCde"
    	$MaCommande=DAO_Commande::SauvegarderCommande($LaCde);
    	unset($_SESSION["panier"]);
    	?>
    	
    	<!-- Message de fin de commande -->
      	<div id="finCommande">
    		<?php
    			echo "<h1>votre commande a bien &eacute;t&eacute; prise en compte</h1>";
    		?>
    	</div>
    Voici la méthode 'SauvegarderCommande(....)' :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    // Enregistrer une commande
    		public static function SauvegarderCommande($objCommande)
    		{
    			$IdCde=$objCommande->get_idCde();
    			$client=$objCommande->get_client();
    			$DateCde=$objCommande->get_Date_Cde();
    			$MontantHT=commande::retournePrixTotalHT();
    			$MontantTVA=commande::retourneTVA();
    			$MontantTTC=commande::retournePrixTotalAPayer();
    			
    			if (DAO_commande::existe_UneCommande($IdCde))
    			{
    				$req="UPDATE commande SET";
    				$req=$req." IDclient=$client";
    				$req=$req.", DateCmde='$DateCde'";
    				$req=$req.", Co_MontantHT=$MontantHT";
    				$req=$req.", Co_MontantTVA=$MontantTVA";
    				$req=$req.", Co_MontantTTC=$MontantTTC";
    				$req=$req." WHERE ID_CDE=$IdCde";		
    				//echo $req;
    				$res = mysql_query($req);
    			}
    			else
    			{	
    				$req="INSERT INTO commande VALUES ($IdCde,'$client','$DateCde',$MontantHT,$MontantTVA,$MontantTTC)";
    				echo $req. "<br/>";
    				//$res = mysql_query($req);
    			}
    		}
    Le problème arrive lorsque l'exécution fait appelle à la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Méthodes : retourner le prix total hors taxe
    	public function retournePrixTotalHT(){
    		$PrixTTC=commande::retournePrixTotalTTC();
    		$PrixHT=$PrixTTC/1.196;
    		return $PrixHT;
    	}
    Voici la méthode 'retournePrixTotalTTC()' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Méthodes : retourner le prix total Toute taxe comprise
    	public function retournePrixTotalTTC(){
    		$tableau=commande::retournerLesLignes();	
    		$resultat=0;
    		foreach($tableau as $o) {
    			$resultat=$résultat + $o->get_Article()->get_prixHT() * $o->get_Qte();
    		}
    		return $resultat;
    	}
    D'ou peux provenir mon erreur d'aprés vous??
    Je vois vraiment pas comment faire pour résoudre ce problème!!

    Merci d'avance!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2008, 10h22
  2. Récupérer les éléments en ligne de commandes
    Par wassimb dans le forum C++
    Réponses: 4
    Dernier message: 25/06/2008, 18h55
  3. Récupérer les différentes années sur un format date
    Par Spaccio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/04/2008, 13h04
  4. Récupérer les différents éléments Internet et Mail
    Par mdriesbach dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 31/10/2005, 13h43
  5. Récupérer les différentes températures de mon PC
    Par bronco dans le forum Assembleur
    Réponses: 2
    Dernier message: 29/07/2005, 09h35

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