Boucle update champs dans tableau
Résolu/Fermé
maverickz
Messages postés
49
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
10 août 2011
-
15 nov. 2009 à 01:46
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 - 15 nov. 2009 à 15:52
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 - 15 nov. 2009 à 15:52
A voir également:
- Boucle update champs dans tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Windows update 0x80070643 - Accueil - Windows
- Trier tableau excel - Guide
5 réponses
maverickz
Messages postés
49
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
10 août 2011
18
15 nov. 2009 à 12:13
15 nov. 2009 à 12:13
Bonjour,
Je ne trouve pas...
Ce serait sans doute plus simple si j'affichais tous les éléments de la base de donnée et que je fasse le tri ensuite par PHP ?
Pour l'instant , il m'affiche 3 produits sur les 4 car le but est d'afficher les produits commandés et le nombre restant par rapport a une date que l'utilisateur a choisi.
Y a t'il moyen d'afficher le 4ème produit dans le même array même si ce produit n'est pas enregistré dans la commande ?
J'ai essayé ceci pour déjà voir ce qu'il m'affiche,mais bon, pas grand chose :
Le must serait donc de pouvoir placer cette requete dans la requete qui m'affiche deja mon array que je vous copie ici :
La clé de tout cela c'est bien le champ "shipDate" et la variable $shipDate mais j'avoue avoir un peu de mal pour faire la requête exacte.
Merci en tout cas :-)
Je ne trouve pas...
Ce serait sans doute plus simple si j'affichais tous les éléments de la base de donnée et que je fasse le tri ensuite par PHP ?
Pour l'instant , il m'affiche 3 produits sur les 4 car le but est d'afficher les produits commandés et le nombre restant par rapport a une date que l'utilisateur a choisi.
Y a t'il moyen d'afficher le 4ème produit dans le même array même si ce produit n'est pas enregistré dans la commande ?
J'ai essayé ceci pour déjà voir ce qu'il m'affiche,mais bon, pas grand chose :
mysql_query("SELECT p.productID FROM products p WHERE NOT EXISTS (SELECT p.productID FROM products p, orders o WHERE o.shipDate = '$shipDate'");
Le must serait donc de pouvoir placer cette requete dans la requete qui m'affiche deja mon array que je vous copie ici :
Array ( [1] => Array ( [productID] => 1 [productName] => Layout [quantity] => 156 [productQuantity] => 1 [shipDate] => 2009-11-15 ) [2] => Array ( [productID] => 2 [productName] => Hiver [quantity] => 18 [productQuantity] => 1 [shipDate] => 2009-11-15 ) ******* Ce serait bien d'avoir productID=3 ici même si les 3/4 de ces champs seront vides ******* [3] => Array ( [productID] => 4 [productName] => Chaise [quantity] => 40 [productQuantity] => 7 [shipDate] => 2009-11-15 ) )
mysql_query("SELECT p.*, SUM(d.productQuantity) AS productQuantity, o.shipDate FROM products p, ordersdetails d, orders o WHERE p.productID = d.productID AND o.orderID = d.orderID AND o.shipDate = '$shipDate' GROUP BY p.productID");
La clé de tout cela c'est bien le champ "shipDate" et la variable $shipDate mais j'avoue avoir un peu de mal pour faire la requête exacte.
Merci en tout cas :-)
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
15 nov. 2009 à 12:46
15 nov. 2009 à 12:46
Bjr
Hum je pige pas tout ça m'a l'air bien compliqué
Déjà tes 2 boucles impliquées avec la même variable $i c'est pas conseillé du tout !
Utilise plutôt (et adapte le reste en conséquence) :
Ah puis y'a aussi le isset() ? Qu'est-ce qu'il fiche ici sachant qu'il retoune TRUE ou FALSE ?
Donc ca donne pour $i de 1 à TRUE faire qlque chose puis incrémenter $i ????? Hum si ce code fonctionne ben alors là !
Maintenant je comprends pas pourquoi tu testes si ton productID figure bien dans $tab[] : normalement l'utilisateur ne sélectionne que des productID valides non ? A moins que tu es peur d'un injection de code ou autre mais qd même
Hum je pige pas tout ça m'a l'air bien compliqué
Déjà tes 2 boucles impliquées avec la même variable $i c'est pas conseillé du tout !
Utilise plutôt (et adapte le reste en conséquence) :
for ($i=1; isset($quantityLeft[$i]); $i++) { for ($j=1; isset($tab[$i]); $j++) {
Ah puis y'a aussi le isset() ? Qu'est-ce qu'il fiche ici sachant qu'il retoune TRUE ou FALSE ?
Donc ca donne pour $i de 1 à TRUE faire qlque chose puis incrémenter $i ????? Hum si ce code fonctionne ben alors là !
Maintenant je comprends pas pourquoi tu testes si ton productID figure bien dans $tab[] : normalement l'utilisateur ne sélectionne que des productID valides non ? A moins que tu es peur d'un injection de code ou autre mais qd même
maverickz
Messages postés
49
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
10 août 2011
18
15 nov. 2009 à 13:50
15 nov. 2009 à 13:50
Hello,
tout d'abord, merci pour ta réponse
Je pense que ca va être très très dur a expliquer ;-) se serait plus la requete SQL qu'il faudrait revoir
Je vais quand même essayer d'être le plus clair possible :-)
Si je change les
les isset fonctionnent, je peux mettre
les resultats affichés en soi sont presque correct, je m'explique.
Il m'affiche un tableau avec 4 produits de
La dedans j'ai qu'un seul champ a updater c'est la quantité
Enfait j'ai comme résultat pour l'instant :
-----------------------------------------------
Selection DATE = aucune commande a la date de hier on affiche $tab[$i]['quantity] a sa valeur max:
Si pour demain j'ai une commande (inscrite dans la DB)
---------------------------------------------------------------------------
Je sélectionne tous les produits qui ont été commandés pour cette date.
Il m'en sort 3 (voir l'array de mon message précédent).
C'est a dire le Produit 1 , 2 et 4
Je récupère les infos de ces produits via la requête SQL que j'ai indiqué plus haut et je place le tout dans un AUTRE tableau que j'ai appellé $quantityLeft[$i]
Je récupère l'id , la quantité max et la quantité commandé dans le tableau $quantityLeft[$i]
dans mon array il me sort en toute logique via la soustraction :
Voila le fond de ma question est pourquoi il n'update pas le produit 4 et arrete la boucle au produit 3 , et surtout comment le forcer a continuer.
La boucle au grand complèt ressemble a
En gros il fait 2 fois le IF pour les deux premiers produits, puis il fait une fois le ELSE pour le 3ème , et je cherche a ce qu'il retourne au IF pour le 4ème.
Challenge Challenge ^^ , merci en tout cas :-)
tout d'abord, merci pour ta réponse
Je pense que ca va être très très dur a expliquer ;-) se serait plus la requete SQL qu'il faudrait revoir
Je vais quand même essayer d'être le plus clair possible :-)
Si je change les
$i en $jplus l'adaptation du reste pour la seconde boucle il boucle le tout a l'infini
for ($i=1; isset($quantityLeft[$i]); $i++) { for ($j=1; isset($tab[$i]); $j++) {
les isset fonctionnent, je peux mettre
$i<sizeof($tab[$i])que ca me donnerait la même chose ;-)
les resultats affichés en soi sont presque correct, je m'explique.
Il m'affiche un tableau avec 4 produits de
$tab[$i] [MESPRODUITS]
La dedans j'ai qu'un seul champ a updater c'est la quantité
$tab [$i] ['quantity] ;
Enfait j'ai comme résultat pour l'instant :
-----------------------------------------------
Selection DATE = aucune commande a la date de hier on affiche $tab[$i]['quantity] a sa valeur max:
<tableau> [Produit 1] = Quantité 50 [Produit 2] = Quantité 40 [Produit 3] = Quantité 10 [Produit 4] = Quantité 20 </tableau>
Si pour demain j'ai une commande (inscrite dans la DB)
---------------------------------------------------------------------------
[Produit 1] = Quantité 10 [Produit 2] = Quantité 5 [Produit 4] = Quantité 10
Je sélectionne tous les produits qui ont été commandés pour cette date.
Il m'en sort 3 (voir l'array de mon message précédent).
C'est a dire le Produit 1 , 2 et 4
Je récupère les infos de ces produits via la requête SQL que j'ai indiqué plus haut et je place le tout dans un AUTRE tableau que j'ai appellé $quantityLeft[$i]
Je récupère l'id , la quantité max et la quantité commandé dans le tableau $quantityLeft[$i]
dans mon array il me sort en toute logique via la soustraction :
$tab[$i]['quantity']= $quantityLeft[$i]['quantity'] - $quantityLeft[$i]['productQuantity']; Produit 1 = Quantité 50 - Quantité 10 => sa fonctionne Produit 2 = Quantité 40 - Quantité 5 => sa fonctionne aussi Produit 3 = On ne doit pas l'updater => Il n'update pas, normal Produit 4 = Il arrête la boucle au produit 3 donc l'update ne se fait pas pour 4
Voila le fond de ma question est pourquoi il n'update pas le produit 4 et arrete la boucle au produit 3 , et surtout comment le forcer a continuer.
La boucle au grand complèt ressemble a
for ($i=1; isset($quantityLeft[$i]); $i++) { for ($i=1; isset($tab[$i]); $i++) { if($tab[$i]['productID']==$quantityLeft[$i]['productID']) { $tab[$i]['quantity']= $quantityLeft[$i]['quantity'] - $quantityLeft[$i]['productQuantity']; } else { $tab[$i]['quantity']; }
En gros il fait 2 fois le IF pour les deux premiers produits, puis il fait une fois le ELSE pour le 3ème , et je cherche a ce qu'il retourne au IF pour le 4ème.
Challenge Challenge ^^ , merci en tout cas :-)
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
15 nov. 2009 à 14:43
15 nov. 2009 à 14:43
Hum déjà es-tu sûr que l'indice de tous tableaux commencent bien à 1 et pas à zéro. Ce qui est curieux d'ailleurs étant donné que par défaut les tableaux PHP sont zero based index même si on peut forcer l'index
En utilisant ce code ca fonctionne :
par contre si j'utilise $i dans les 2 boucles j'obtiens bien une erreur PHP
Notice: Undefined offset: 4 ce qui ne m'étonne pas
En utilisant ce code ca fonctionne :
<?php $tab=array(); $item["productID"] = '1'; $item["productName"] = 'Layout'; $item["quantity"] = 156; // $tab[]=$item; // Si zero based index $tab[1]=$item; $item["productID"] = '2'; $item["productName"] = 'Hiver'; $item["quantity"] = 18; $tab[2]=$item; $item["productID"] = '3'; $item["productName"] = 'Divers'; $item["quantity"] = 120; $tab[3]=$item; $item["productID"] = '4'; $item["productName"] = 'Chaise'; $item["quantity"] = 40; $tab[4]=$item; $quantityLeft=array(); $item["productID"] = '1'; $item["productName"] = 'Layout'; $item["quantity"] = 156; $item["productQuantity"] = 1; $item["shipDate"] = '2009-11-15'; $quantityLeft[1]=$item; $item["productID"] = '2'; $item["productName"] = 'Hiver'; $item["quantity"] = 18; $item["productQuantity"] = 1; $item["shipDate"] = '2009-11-15'; $quantityLeft[2]=$item; $item["productID"] = '4'; $item["productName"] = 'Chaise'; $item["quantity"] = 40; $item["productQuantity"] = 7; $item["shipDate"] = '2009-11-15'; $quantityLeft[3]=$item; echo "<pre><p>Avant</p>"; var_dump($tab); echo "</pre>"; for ($i=1; isset($quantityLeft[$i]); $i++) { for ($j=1; isset($tab[$j]); $j++) { if($tab[$j]['productID']==$quantityLeft[$i]['productID']) { $tab[$j]['quantity'] = $quantityLeft[$i]['quantity'] - $quantityLeft[$i]['productQuantity']; $tab[$j]['updated']= true; } else { $tab[$j]['quantity']; } } } echo "<pre><p>Avant</p>"; var_dump($tab); echo "</pre>"; ?>
par contre si j'utilise $i dans les 2 boucles j'obtiens bien une erreur PHP
Notice: Undefined offset: 4 ce qui ne m'étonne pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
maverickz
Messages postés
49
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
10 août 2011
18
15 nov. 2009 à 15:52
15 nov. 2009 à 15:52
Extraordinaire, puissant, finalement c'était bien ces $j qui posaient problème le var_dump($tab) en dehors de la double boucle fonctionne a merveille avec les éléments dans la DB.
Franchement merci du coup de main la tu m'as permis de finaliser mon projet.
Reste plus qu'a assigner mes nouvelles variables au système de template et c'est banco, merci encore et passe un bon dimanche ;-)))
Franchement merci du coup de main la tu m'as permis de finaliser mon projet.
Reste plus qu'a assigner mes nouvelles variables au système de template et c'est banco, merci encore et passe un bon dimanche ;-)))