|
|
|
|
Bonjour,
Je souhaite faire une mise a jour de certains champs dans mon tableau.
J'ai le tableau, j'ai les éléments a updater.
L'update se passe correctement mais la boucle s'arrête sur un champ qui n'est pas concerné par l'update et ne veut pas continuer plus loin.
Je m'explique
<td>Champ1</td> => Update OK <td>Champ2</td> => Update OK <td>Champ3</td> => Champ pas concerné par l'update , pas d'update , donc OK <td>Champ4</td> => Update NOT OK <td>Champ5</td> => Update NOT OK
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
)
[3] => Array
(
[productID] => 4
[productName] => Chaise
[quantity] => 40
[productQuantity] => 7
[shipDate] => 2009-11-15
)
)
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'];
}
do {
$quantityLeft[$i]['quantity']-$quantityLeft[$i]['productQuantity'];
}
while($tab[$i]['productID']==$quantityLeft[$i]['productID']);
Configuration: Intel Q6600 4GB DDRII 800 Raid0 2x WD Velociraptor 150 Go 1x WD 500 Go GeForce 9800GX2 XP Pro
Bonjour,
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 :-) |
Bjr
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 PhP Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ... |
Hello,
$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 :-) |
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
<?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 PhP Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ... |
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.
|