Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Résolu]Aide pour la lecture et l'enregistre dans une BDD

Posted by criz on 06/06/2011 12:07

Bonjour,

je viens vous demandé un tit coup de main (pas de coup de pied svp ;) ). Voila j'ai un souci je dois mettre en place une suppression de membre sur un site de vente. Le site a été développé par une autre entreprise et je l'ai repris depuis 2 semaines. Mon souci est qu'il veut sauvegarde les factures émisent quand un membre veut se désinscrire.

J'ai 4 tables:

Pannier: Npanier, Nmembre, etat, dateCreation

Produit_panier: Nproduit_panier, n°Panier, Nproduit

Membre: Nmembre

Produit: Nproduit, titre

Je ne mets pas tous les champs trop long sinon.

J'ai crées plusieurs tables (2 pour êtres précis factureProduit et facturemembre) pour pouvoir les gardée en mémoire. Et voici le code que j'ai écri pour faire cet sauvegarde. La variable $sav premet de d'interroger la table membre.

Ensuite le problème que je rencontre c'est que ma variable $panierGlobal est vide et je sais pas pourquoi... Si vous avez un début de piste ou la solution je suis preneur ^^

Merci d'avance ^^'

$listProduit = jDao::get("dddd~produit");
<code>
		$facturePanier = jDao::get("dddd~factureProduit");
		$panier = jDao::get("dddd~panier");
		
		$conditions = jDao::createConditions();//On tri sur les commandes selon l'id et si il a des commandes receptionne
   		   $conditions->addCondition('membre','=',$sav->identifiant_membre);
		   $conditions->addCondition('etat','=','receptionne');
				$enregPanier = $panier -> countBy($conditions);
				$listePanier = $panier -> findBy($conditions);
				
				$listerLesProduits = jDao::createConditions();//creer une condition pour chercher les produits du panier
					
				$produitPanier = jDao::get("dddd~produit_panier");
				$factureSav = jDao::createRecord("dddd~factureProduit");
				
		if($enregPanier > 0)//je regarde si le panier est vide
		{ 	
			foreach ( $listePanier as $list)
			{		
				$listerLesProduits -> addCondition('panier','=',$list->numero_panier);		//probleme ici	
				$listeXXX = $produitPanier-> findBy($listerLesProduits);
				$panierGlobal = array($listeXXX);
			}
			
	
				for ($i=0; $i=count($panirGlobal)-1;$i++)
				{					
								$nFacture = "FA".$panierGlobal[$i]['nPanier'];
								$nCommande= $panierGlobal[$i]['dateCrea']."-".$panierGlobal[$i]['nPanier'];
								
								$listeProduit->get($panierGlobal[$i]['nPanier']);
								
								$factureSav->factP_idFacture= $nFacture;
								$factureSav->factP_NCommande= $nCommande ;
								$factureSav->factP_idMembreVendeur =$sav; 
								$factureSav->factP_idProduit = $listeProduit->reference_produit;
								$factureSav->factP_titreProduit = $listeProduit->titre;
								$factureSav->factP_prixProduit = $listeProduit->prix;
								$factureSav->factP_date_creation = $panierGlobal[$i]['dateCrea'] ;
								$factureSav->factP_numero_panier = $panierGlobal[$i]['nPanier'];

									$facturePanier  -> insert($factureSav);
				}
				//$membreSupp->delete($idMembre);
			 }

}</code>

  [Opened] Aide pour la lecture et l'enregistre dans une BDD

Reply #1 Posted by laurentj on 06/06/2011 13:36

Salut,

ton problème c'est que dans ta boucle foreach, tu ajoutes à chaque tour une condition dans ton objet condition, ça ne remplace pas contrairement à ce que tu aurais pu croire.

Donc au premier tour tu as

<code>
  WHERE panier = X
</code>

Au deuxième tour, tu as

<code>
  WHERE panier = X AND panier = Y
</code>

etc..

Il faut que tu crée ton objet $listerLesProduits à l'intérieur même de ton foreach, pas à l’extérieur, histoire d'avoir des critères "à 0"

<code>
    foreach ( $listePanier as $list)
    {
        $listerLesProduits = jDao::createConditions();
        $listerLesProduits -> addCondition('panier','=',$list->numero_panier);
        $listeXXX = $produitPanier-> findBy($listerLesProduits);
        $panierGlobal = array($listeXXX);
    }
</code>

D'une manière général, tu devrais plutôt déclarer des méthodes dans le fichier XML plutôt que d'utiliser createConditions, ça sera plus clair et plus performant.

Autre chose, je vois que dans ton for, tu manipules chaque élément de $panierGlobal comme si c'était des tableaux ([['nPanier']] etc). Or ce que tu as dans $panierGlobal c'est une liste d'objets resultset. Ton code ne va donc pas du tout, car en définitive, tu as une liste de liste... D'ailleurs j'ai l'impression que tu te mélange pas mal les pinceaux dans cette boucle for. Je ne suis pas certain que l'id d'un produit se trouve dans nPanier d'après ce que tu nous a décris au début, et donc ton $listeProduit->get est faux. Et puis probablement faire le for à l’intérieur du foreach non ?

Et d'ailleurs, je me demande si tu ne pourrais pas remplacer tout ça par une ou deux requêtes SQL bien conçues... Après tout, il ne s'agit que de déplacement de données d'une table à une autre, ça peut se faire à priori à coup de INSERT .... ( ...) SELECT ......

  [Opened] Aide pour la lecture et l'enregistre dans une BDD

Reply #2 Posted by foxmask on 06/06/2011 13:38

Tiens amusant ce bug sur le parser wr3_to_html avec la balise " < / code >. " qui n'est pas vu comme "fermeture de < code > suivi d'un point"

foobar
</code>. 
je continue mon texte

@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Aide pour la lecture et l'enregistre dans une BDD

Reply #3 Posted by criz on 06/06/2011 15:40

Dsl pour le code, mais j'ai honte de l'avoir publié... Je l'ai écri vendredi j'étais un peu sous pression et je commençais a m'énerve dessu... Je l'ai relu qu'après l'avoir publié... Merci laurentj pour ton aide ça marche mieux. Maintenant j'ai un petit souci lors de la fin de l'exécution de la procédure j'ai ce message d'erreur:

[[notice 8]] Trying to get property of non-object  C:\Users\Technique\Documents\sites\svne\public_html\dddd\modules\dddd\classes\membre.class.php 123

Qu'est ce? Ces erreurs concerne les lignes d'enregistrements factP_idProduit, factP_titreProduit et factP_prixProduit

Voici le code qui marche:

		$facturePanier = jDao::get("dddd~factureProduit");
<code>
		$panier = jDao::get("dddd~panier");
		
		$conditions = jDao::createConditions();//On tri sur les commandes selon l'id et si il a des commandes receptionne
   		   $conditions->addCondition('membre','=',$sav->identifiant_membre);
		   $conditions->addCondition('etat','=','receptionne');
				$enregPanier = $panier -> countBy($conditions);
				$listePanier = $panier -> findBy($conditions);
				
		$produitPanier = jDao::get("dddd~produit_panier");
				
		if($enregPanier > 0)//je regarde si le panier est vide
		{ 	
			foreach ( $listePanier as $list)
			{		
				$listerLesProduits = jDao::createConditions();
				$listerLesProduits -> addCondition('panier','=',$list->numero_panier);	
				$listeXXX = $produitPanier-> findBy($listerLesProduits);
		   
					foreach ( $listeXXX as $XXX)
					{						
				
						$nFacture = "FA".$XXX -> panier;
						$nCommande= '12548'."-".$XXX -> panier;
								
						$listProduit = jDao::get("dddd~produit");
						$Jesuisbete = $listProduit->get($XXX ->produit);
										
							$factureSav = jDao::createRecord("dddd~factureProduit");
							$factureSav -> factP_idFacture = $nFacture;
							$factureSav -> factP_NCommande = $nCommande ;
							$factureSav -> factP_idMembreVendeur = $sav -> identifiant_membre; 
							$factureSav -> factP_idProduit = $Jesuisbete -> reference_produit;
							$factureSav -> factP_titreProduit = $Jesuisbete -> titre;
							$factureSav -> factP_prixProduit = $Jesuisbete -> prix;
							$factureSav -> factP_date_creation = '12548' ;
							$factureSav -> factP_numero_panier = $XXX -> panier;

								$facturePanier  -> insert($factureSav);
					}
			 }
				
          }
</code>

  [Opened] Aide pour la lecture et l'enregistre dans une BDD

Reply #4 Posted by laurentj on 06/06/2011 16:06

j'ai ce message d'erreur: Qu'est ce?

Le message est pourtant clair. Et si ce n'est pas clair, je te recommande vivement de prendre des cours d'anglais, c'est primordial dans ton métier (?) de développeur.

le message dit que tu essaye d'accéder à une propriété sur un objet qui n'existe pas.

Et je ne sais pas à quoi correspond la ligne 123 donc je ne peut pas t'aider. Peut être le $Jesuisbete qui est nul ? l'id donné à $listProduit->get ne correspondant à rien ? (au hasard)

  [Opened] Re: Aide pour la lecture et l'enregistre dans une BDD

Reply #5 Posted by criz on 06/06/2011 16:52

Le message est pourtant clair. Et si ce n'est pas clair, je te recommande vivement de prendre >des cours d'anglais, c'est primordial dans ton métier (?) de développeur.

Merci mais c'était juste de l'incompréhension quand j'ai posé cet question, parsque la fonction marche elle enregistre toute les commandes sans erreur dans la bdd, mais a la fin j'ai ce message d'erreur, mais je penses avoir la solution... wait and see

Sinon je te remercie de t'inquiète pour mon niveau en anglais il est comme quelqu'un qui sort de l'école. Et sinon pour mon métier de dev, ben justement après la théorie de l'école (BTS + licence pro) je me frottes au réel projet d'entreprise donc j'essaie de trouvé de l'aide là ou je peux... Donc des fois j'avoue j'ai des questions bêtes, mais bon j'ai appris qu'il y jamais de question bêtes donc je les poses.

  [Opened] Re: Aide pour la lecture et l'enregistre dans une BDD

Reply #6 Posted by criz on 06/06/2011 17:16

Ca marche et l'erreur était du a un champ de la base de données qui était null (c'était un jeu d'essai), donc comme tu as dis la variable était "NULL" se qui provoqué l'erreur.

  [Opened] [Résolu]Aide pour la lecture et l'enregistre dans une BDD

Reply #7 Posted by laurentj on 06/06/2011 18:20

j'ai des questions bêtes, mais bon j'ai appris qu'il y jamais de question bêtes donc je les poses.

tu as tout à fait raison ! :-)

 
Page
  1. Aide pour la lecture et l'enregistre dans une BDD