Bonjour,

J'ai ouvert une discussion sur le forum débutant, mais comme ça ne donne rien depuis plusieurs jours je me permet d'exposer mon problème ici.


J'aimerai obtenir ceci :

1- sélectionner les lignes de la table ligne_commande cad récupérer les produits de la dernière commande d'un client donné.

2- pour chaque produit commandé : diminuer la quantité en stock de la taille commandée.

J'arrive à le faire pour 1 mais dès que j'insère ma boucle ça fonctionne sauf pour le premier produit de la commande.
(j'ai testé avec un ORDER BY id DESC et ASC : c'est le même produit qui n'est pas traité.)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
$order_id = 146;
mysql_select_db($database_xxx, $xxx);
$query_num = sprintf("SELECT ligne_commande.*, produit.* 
					FROM ligne_commande 
					INNER JOIN produit 
					ON produit.id = ligne_commande.produit 
					WHERE ligne_commande.num_commande = ". $order_id ." 
					ORDER BY ligne_commande.id ASC");
$num = mysql_query($query_num, $xxx) or die(mysql_error());
$row_num = mysql_fetch_assoc($num);
 
$totalRows_num = mysql_num_rows($num);
echo ' nombres darticles ';
echo $totalRows_num ;
 
$compteurlignes = 0;
 
while ($compteurlignes < $totalRows_num) {	
 
echo ' nb compteur ';
echo $compteurlignes ;
 
if ($row_num['taille'] == "unique"){
$stock_tu = $row_num['taille_unique'] - $row_num['quantite'];
$prdt_tu = $row_num['id'];
$query_tu = sprintf("UPDATE produit SET taille_unique=%s WHERE id=%s",
                       GetSQLValueString($stock_tu, "int"),
                       GetSQLValueString($prdt_tu, "int"));
  mysql_select_db($database_xxx, $xxx);
  $Result2 = mysql_query($query_tu, $xxx) or die(mysql_error());
 
  echo 'TU ok <br>';
}
 
if ($row_num['taille'] == "36 (XS"){
$stock_36 = $row_num['36_XS'] - $row_num['quantite'];
$prdt_36 = $row_num['id'];
$query_36 = sprintf("UPDATE produit SET 36_XS=%s WHERE id=%s",
                       GetSQLValueString($stock_36, "int"),
                       GetSQLValueString($prdt_36, "int"));
  mysql_select_db($database_xxx, $xxx);
  $Result3 = mysql_query($query_36, $xxx) or die(mysql_error());
 
  echo '36 ok <br>';
}
 
if ($row_num['taille'] == "38 (S)"){
$stock_38 = $row_num['38_S'] - $row_num['quantite'];
echo 'npuveau stock en 38';
echo $stock_38 ;
$prdt_38 = $row_num['id'];
$query_38 = sprintf("UPDATE produit SET 38_S=%s WHERE id=%s",
                       GetSQLValueString($stock_38, "int"),
                       GetSQLValueString($prdt_38, "int"));
  mysql_select_db($database_xxx, $xxx);
  $Result4 = mysql_query($query_38, $xxx) or die(mysql_error());
 
echo '38 ok <br>';
}
 
if ($row_num['taille'] == "40 (M)"){
$stock_40 = $row_num['40_M'] - $row_num['quantite'];
$prdt_40 = $row_num['id'];
$query_40 = sprintf("UPDATE produit SET 40_M=%s WHERE id=%s",
                       GetSQLValueString($stock_40, "int"),
                       GetSQLValueString($prdt_40, "int"));
  mysql_select_db($database_xxx, $xxx);
  $Result5 = mysql_query($query_40, $xxx) or die(mysql_error());
 
echo '40 ok <br>';
}
 
if ($row_num['taille'] == "42 (L)"){
$stock_42 = $row_num['42_L'] - $row_num['quantite'];
$prdt_42 = $row_num['id'];
$query_42 = sprintf("UPDATE produit SET 42_L=%s WHERE id=%s",
                       GetSQLValueString($stock_42, "int"),
                       GetSQLValueString($prdt_42, "int"));
  mysql_select_db($database_xxx, $xxx);
  $Result6 = mysql_query($query_42, $xxx) or die(mysql_error());
 
echo '42 ok <br>';
}
 
if ($row_num['taille'] == "44 (XL"){
$stock_44 = $row_num['44_XL'] - $row_num['quantite'];
$prdt_44 = $row_num['id'];
$query_44 = sprintf("UPDATE produit SET 44_XL=%s WHERE id=%s",
                       GetSQLValueString($stock_44, "int"),
                       GetSQLValueString($prdt_44, "int"));
  mysql_select_db($database_xxxk, $xxx);
  $Result7 = mysql_query($query_44, $xxx) or die(mysql_error());
echo '44 ok <br>';
} 
$compteurlignes = $compteurlignes+1;
}
Ce qui s'affiche:
nombres d'articles 5
36 ok
42 ok
44 ok
TU ok
PROBLEME : Il n'y a que 4 tailles passées en revue alors qu'il y 5 produits de tailles différentes qui ont été commandés.


Et si je remplace :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
while ($row_num = mysql_fetch_assoc($num) and $compteurlignes < $totalRows_num + 1)
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
while ($compteurlignes < $totalRows_num)
Voici ce qui s'affiche :
nombres d'articles 5
38 ok
38 ok
38 ok
38 ok
38 ok
Là ce qui marche c'est que la boucle recommence autant de fois qu'il y a de produits commandés. Mais voici les problèmes :

n°1 : c'est que dans cette commande il y a 1 article commandé en taille 42 et 1 autre en 44. J'ai testé avec d'autres commandes et il n'y a qu' 1 ligne de commande lue (et répétée) à chaque fois.

n°2 : le stock n'est diminué qu'une seule fois (au 1er passage de la boucle).

Table: ligne_commande
id.......................int(11)
num_commande....int(10)
produit................int(10)
prix....................float(5,2)
quantite..............int(11)
taille..................varchar(6)
ss_ss_total_ttc.....float(7,2)

LES VALEURS DE TAILLE : "unique", "36 (XS", "38 (S)", "40 (M)", "42(L)", "44 (XL"

Table: produit
id......................int(20)
...
taille_unique........int(11)
36_XS................int(11)
38_S..................int(11)
40_M..................int(11)
42_L...................int(11)
44_XL.................int(11)


Je suis coincée depuis plusieurs jours, j'aurai bien besoin d'aide...

Merci