Affichage des détails d'une commande choissit auparavnt

Ben il suffit de changer la requete sql.
T’es sur que c’est toi qui a tout codé ?

Ben oui suis sur que c’est moi!!
Avant je l’avais fais avec héritage entre les classes métiers et les classes d’accées aux données, donc j’y arrivais mieu mais la j’ai un peu plus de mal!!

Ben si je change ma requête, je pourrais pas afficher ce que je souhaite??!!??

Cordialement!!

bonjour tout le monde,

j’aimerais juste savoir comment je peux rééllement faire pour pouvoir afficher sur une même page les différentes données qui provienne de différente table de ma base MySQL??

Si quelqu’un a une idée qu’il n’hésite pas à me l’expliquer car la personnellement je voit vraiment pas comment faire, suis sur que c’est tout bête mais j’ai vraiment besoin de votre aide!!

Merci d’avance!!

Syntax du foreach :
foreach($MesLignesCmde as $ligne => $lib)
Dans ce cas $ligne devient le n° de ligne et $lib le contenu :wink:

Ok, je connaissait pas cette syntaxe mais aprés par exemple ma deuxième ligne me donnerais quoi??

Merci d’avance!!

Je comprends pas très bien ta question,
Exemple d’un tableau :
$tableau= array(“a”,“b”,“c”,“d”,“e”,“f”);
foreach($tableau as $numligne=>$lib){
echo "
la ligne “.$numligne.” contient ".$lib;
}
donne :
la ligne 1 contient a
la ligne 2 contient b
la ligne 3 contient c
etc…

Je ne sais pas si je réponds à ta question, mais comprends pas bien ce que tu demandes :neutre:

Ok, je vais essayer de m’exprimer plus clairement :

<td><div class="contenu"><?php echo $ligne->get_article()->get_lacategorie()->get_code(); ?></div></td>

en fait je me demande ce que cela va devenir avec la syntaxe que tu ma indiqué??
J’espère être plus clair.

Je pense que c’est tout béte mais la comme ca c’est un peu flou dans ma tête!!

Merci d’avance!!

A mon avis ça va planter grave,
$ligne n’est pas un objet, hors $ligne->get_article() considère que $ligne est un objet.
le signe “->” indique que la variable précendente à été définie comme un objet:
par exemple $toto = new tata();
get_article() doit faire partie de l’objet tata, hors $ligne dans le foreach n’indique que le n° de ligne dans le tableau, rien d’autre.
De plus, ton get_article() , je ne le vois nul part (???), il devrait être dans une classe.
classe que tu attribuerait à une variable, par exemple $aa :
$aa = new classe_ou_se_trouve_get_article;
$aa->get_article() serait ok

C’est le B A BA de la prog objet :neutre:
Edité le 03/01/2009 à 20:45

Oui, get_article() est bien dans une classe (ligneCommande).

J’utilise la méthode MVC donc j’ai des controles et des vues.
Je suis dégouté car j’ai fais une mauvaise manipulation et donc j’ai perdu tout ce que j’avais opéré avec manu2, et je suis donc obligé de reprendre mon de départ qui été le suivant :

// Code du controle C_DetailCommande
<?php
	// récupération du code de la commande
	$code_cmde = $_GET["code"];
	//$Client=DAO_Client::ChargerUnClient($_COOKIE['moto_28']);
	
	
	// création d'une instance de la classe commande
	$LaCom = DAO_Commande::ChargerUneCommande($code_cmde);
	
	$LaCom = DAO_Commande::TouteLignesCommandes($code_cmde);
	
	$Commande = new commande();
	$MesLignesCmde = $Commande->get_LesLignesCommandes()->getAll();
	require('Vues/V_listeCommande.php');
?>
// Voici le code de ma vue V_listeCommande
<div align="center" class="contenu">
	D&eacute;tail de la commande num&eacute;ro : <?php echo $code_cmde; ?>
</div>

<table>
	<tr>
		<th><h4>Num&eacute;ro de la ligne</h4></th>
		<th><h4>Code de la cat&eacute;gorie</h4></th>
		<th><h4>Marque de l'article</h4></th>
		<th><h4>Mod&eacute;le de l'article</h4></th>
		<th><h4>Quantit&eacute; command&eacute;e</h4></th>
		<th><h4>Prix de l'article</h4></th>
	</tr>
	
	<?php
	foreach($MesLignesCmde as $ligne)
	{
		?>
			<tr>
				<td><div class="contenu"><?php echo $ligne->get_ligne(); ?></div></td>
				<td><div class="contenu"><?php echo $ligne->get_article()->get_lacategorie()->get_code(); ?></div></td>
				<td><div class="contenu"><?php echo $ligne->get_article()->get_marque(); ?></div></td>
				<td><div class="contenu"><?php echo $ligne->get_article()->get_modele(); ?></div></td>
				<td><div class="contenu"><?php echo $ligne->get_Qte(); ?></div></td>
				<td><div class="contenu"><?php echo $ligne->get_article()->get_prixHT(); ?></div></td>
			</tr>
		<?php
	}
	?>
</table>
<div align="center">
	<a href="index.php?action=liste_commande">Retour</a>
</div>
// Classe DAO_Commande(classe d'accées au données)
<?php
	class DAO_Commande
	{
		// La commande existe t'elle??
		public function existe_UneCommande($id)
		{
			$req="select * from commande Where ID_CDE=$id";
			$res = mysql_query($req);
			if (mysql_num_rows($res) == 1){
				return true;
			}
			else{
				return false;
			}
		}
	
		// Fonction qui charge une commande de la base de donn�e par rapport � son identifiant
		public static function ChargerUneCommande($lecode)
		{
			$req="SELECT * FROM commande WHERE ID_CDE=$lecode";
			//echo $req;
			$jeu=mysql_query($req);
			$ligne=mysql_fetch_array($jeu);
			
			$LeClient=DAO_Client::ChargerUnClient($ligne["IDclient"]);
			
			$MaCde=new commande($ligne["ID_CDE"], $LeClient, $ligne["DateCmde"], $ligne["Co_MontantHT"], $ligne["Co_MontantTVA"], $ligne["Co_MontantTTC"]);
			return $MaCde;
		}
		
		/*
		 * fonction qui charge tous les enregistrements
	 	 * Retourne un tableau associatif (getAll de la methode Collection)
	 	 * que l'on peut manipuler avec un foreach
		 */
		public static function ChargerTtCommande()
		{
		
			$col=new collection();
			
			$req="SELECT * FROM commande";
			//echo $req;		
			$jeu=mysql_query($req);
			
			while($ligne=mysql_fetch_array($jeu))
			{
				$LeClient=DAO_Client::ChargerUnClient($ligne["IDclient"]);
			
				$MaCde=new commande($ligne["ID_CDE"], $LeClient, $ligne["DateCmde"], $ligne["Co_MontantHT"], $ligne["Co_MontantTVA"], $ligne["Co_MontantTTC"]);
				
				$col->add($MaCde);
			}	
			return $col->getAll();
		}
	
		// Fonction qui charge toute les commandes par clients
		public function ChargerTteCdeParClt($Id)
		{
			$req="SELECT * FROM commande WHERE IDclient=".$Id;
			//echo $req;
			$res = mysql_query($req);
			
			$macol=new collection;
	
		    while($row = mysql_fetch_array($res))
		    {	
				
				$lacom=DAO_Commande::ChargerUneCommande($row["ID_CDE"]);
				$MaCom=new commande($row["ID_CDE"], $row["IDclient"], $row["DateCmde"], $row["Co_MontantHT"], $row["Co_MontantTVA"], $row["Co_MontantTTC"]);
				$macol->add($MaCom);
		    }
			  
			return $macol->getAll();
		}
		
		// Charger toute les lignes de commandes
		public static function TouteLignesCommandes($id)
		{
			$lesLignesCommandes = new collection();
		
			$req="select * from ligne_commande Where ID_CDE=$id";
		//	echo $req;
			
			$res = mysql_query($req);
			
			while($row = mysql_fetch_array($res))
			{
				
				$LaCom = DAO_Commande::ChargerUneCommande($id);
				
				$article=DAO_article::ChargerUnArticle($row["ID_ART"]);
				
				$laligne=new ligne_Commande($this,$article,$row["QTE"],$row["NUMLIGNE"]);

				$lesLignesCommandes->add($laligne);
		    }
		    $LaCom->set_lesLignesCommandes($lesLignesCommandes);
		}
		
		public static function NouvelleCde()
		{
			$requete="SELECT MAX(ID_CDE) as Nb FROM commande";
			//echo $requete;
			$res=mysql_query($requete);
			$ligne=mysql_fetch_array($res);
			
			$newId=$ligne["Nb"] + 1;
			
			return $newId;
		}
	
		// Enregistrer une commande
		public static function SauvegarderCommande($objCommande, $article, $quantite)
		{
			$IdCde=$objCommande->get_idCde();
			$client=$objCommande->get_client();
			$DateCde=$objCommande->get_Date_Cde();
			$MontantHT=$objCommande->retournePrixTotalTTC();
			$MontantTVA=$objCommande->retourneTVA();
			$MontantTTC=$objCommande->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->get_IdClient().",'$DateCde',$MontantHT,$MontantTVA,$MontantTTC)";
				//echo $req. "<br/>";
				$res = mysql_query($req);
			}

			$LesLignesCmdes=$objCommande->retournerLesLignes();
			//on se charge des lignes de commandes
			foreach($LesLignesCmdes as $article) 
			{	
				$ligne=new DAO_LigneCommande();
				
				if ($ligne = DAO_LigneCommande::existe_UneLigneCommande($objCommande,$article->get_article()))
				{
					//echo "On tente de charger <br/>";
					$ligne=DAO_LigneCommande::Charger_UneLigneCommande($objCommande,$article->get_article());
					$article->set_Qte($article->get_Qte());
					$ligne=DAO_LigneCommande::Sauvegarder_UneLigneCommande();
				}
				else
				{
					$article->set_commande($objCommande);
					$article->set_article($article->get_article());
					$article->set_Qte($article->get_Qte());
					$ligne=DAO_LigneCommande::Sauvegarder_UneLigneCommande($objCommande, $article->get_article(), $article->get_Qte());
				}
			}
		}
	
		// Supprimer une commande
		public function Supprimer_UneCommande($id)
		{
			//On va considerer que la suppression se fait en cascade.
			$req="DELETE FROM commande WHERE ID_CDE=$id";
			//echo $req;
			
			$res = mysql_query($req);
		}
	}
?>
// 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 $Col_lesLignesCommandes; // Collection de LigneCommande
	private $Dec_prixHT;
	private $Dec_prixTVA;
	private $Dec_prixTTC;
	
	// Le constructeur
	public function commande( $leidCde=null, $leClient=null, $laDateCde=null, $lePrixHT=null, $lePrixTVA=null, $lePrixTTC=null)
	{
		$this->Int_numligne=1;
		$this->Int_idCde=$leidCde;
		$this->Date_DateCde = $laDateCde;
		$this->Obj_client = $leClient;
	  	$this->Col_lesLignesCommandes = new collection();
	  	$this->Dec_prixHT = $lePrixHT;
	  	$this->Dec_prixTVA = $lePrixTVA;
	  	$this->Dec_prixTTC = $lePrixTTC;
	}
	
	// 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_prixHT()
   	{
   		return $this->Dec_prixHT;
   	}
   	public function get_prixTVA()
   	{
   		return $this->Dec_prixTVA;
   	}
   	public function get_prixTTC()
   	{
   		return $this->Dec_prixTTC;
   	}

   	

   	
	 // 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_prixHT($lePrixHT)
	{
		$this->Dec_prixHT=$lePrixHT;
	}
	public function set_prixTVA($lePrixTVA)
	{
		$this->Dec_prixTVA=$lePrixTVA;
	}
	public function set_prixTTC($lePrixTTC)
	{
		$this->Dec_prixTTC=$lePrixTTC;
	}

	
	// 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->get_numligne(), $Article->get_prixHT());
		//$this->set_numligne($this->Int_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->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=commande::retournerLesLignes();	
		$resultat=0;
		foreach($tableau as $o) {
			$resultat=$resultat + ($o->get_Article()->get_prixHT() * $o->get_Qte());
		}
		return $resultat;
	}

	// Méthodes : retourner le prix total hors taxe
	public function retournePrixTotalHT(){
		$PrixTTC=commande::retournePrixTotalTTC();
		$PrixHT=($PrixTTC*19.6)/100;
		return $PrixHT;
	}

	// Méthodes : retourner le prix total à payer
	public function retournePrixTotalAPayer(){
		$PrixTTC=$this->retournePrixTotalTTC();
		$resultat=$PrixTTC + $this->port;
		return $resultat;
	}
}
?>

Mon problème c’est que j’obtient juste le nom des colonnes (donc en gros première partie de ma vue V_ListeCommande => jusqu’au foreach)

Merci d’avance!!

Tout comme manu2 je reste perplexe quant à l’affichage.
La syntaxe de mon foreach n’à aucun rapport avec ton problème, c’était juste au cas où :wink:
Sinon pour afficher les contenus de 2 tables différentes sur une seule requete, il suffit de faire un “joint”, les deux tables doivent avoir une colonne “commune” (avec la même info, numclient par exemple)
exemple avec table1 (a1,a2,a3) et table2 (b1,b2,b3) où a1et b1 ont la même info et qui créera le “joint”
select a2,a3,b2,b3 from table1, table2 where table1.a1 = table2.b1
Tu auras, dans la même requete les infos des colonnes a2,a3,b2,b3 ayant le même lien (a1,b1)

Enfin, ce genre de programmation, je le faisais sans objet sur AS400 (pas d’objet en RPG lol), mais bon, surement un soucis de ne pas trop surchager les appels à la BD, n’empêche que l’AS400 sur lequel je développais supportait +de 500 postes d’utilisateurs
qui lançaient des requetes en permanence… et des requetes enormes sur des tables de plus de 3millions d’enregs ^^

STOP !

Les jointures en SQL, on les fait correctement :

select a2,a3,b2,b3 
from table1
inner join table2 on table1.a1 = table2.b1

On évite les produits cartésiens et de potentielles erreurs.

Ceci dit, on pourra en apprendre plus ici :

sqlpro.developpez.com…

Oui, tu as raison, mais je viens de l’AS400 et les jointures se font telles que je l’ai écrite…
Il faut que je m’habitue à les écrire en MySql :icon_biggrin:
C’est dure de perdre les acquis ^^
Edité le 04/01/2009 à 13:20

select a2,a3,b2,b3 from table1, table2 where table1.a1 = table2.b1

J’ai aussi appris a faire comme cela.

Donc si je comprend bien loderunner, je dois faire une méthode qui appartiendra à ma classe DAO_Commande qui me permettra d’exécuter la requête me permettant d’afficher les détails de la commande souhaité.
Puis je dois dans mon controles, faire appel à cette méthode.

Jusque la je sais faire, si c’est bien cela?? Mais mon problème c’est apré comment afficher les résultat de ma requête dans ma vue??

J’espère être assez clair!!

Cordialement