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??!!??
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!!
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:
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étail de la commande numéro : <?php echo $code_cmde; ?>
</div>
<table>
<tr>
<th><h4>Numéro de la ligne</h4></th>
<th><h4>Code de la catégorie</h4></th>
<th><h4>Marque de l'article</h4></th>
<th><h4>Modéle de l'article</h4></th>
<th><h4>Quantité commandé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)
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ù
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 ^^
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??