8798 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaye de modifier plusieurs tables d'une base de données en même temps, mais je n'y arrive pas.
En fait il s'agit d'un extranet qui permet de gérer des stocks, l'utilisateur voit les produits et les stocks disponibles et peut ajouter les articles à son panier tant que le stock n'est pas à zero.

Le problème est que la bdd est assez mal foutue au départ (et je ne peux pas la modifier), je m'explique :

Les articles existent en plusieurs couleurs, et donc une quantité pour chaque couleur (exemple 3 tshirt rouge, 7 tshirt vert, 2 tshirt jaune ect...)
Et tout ça est contenu dans une seule table, avec une colonne couleur1, couleur2, couleur3.... quantite1, quantite2, quantite3.... Quantite1 correspondant au stock du produit en couleur1, quantite2 au stock du meme produit en couleur2, ect...

J'essaie donc de faire une fonction qui mettrait à jour les quantités en fonctions des produits qui ont été ajouté dans le panier.
Je pensais faire une boucle for, mais cela n'a pas l'air de marcher...



function updateDB() {
    for ($i = 0; $i < 10; $i++) {
        $query= "UPDATE CYCLUS_boutique_produits
                   SET quantite.$i = quantite.$i - {$_SESSION['panier']['quantite'][$i]}, 
                   WHERE nom={$_SESSION['panier']['nom'][$i]} AND couleur.$i={$_SESSION['panier']['couleur.$i'][$i]}";    
 
        mysql_query($query);
    }
} 
Salut,

A mon avis il te manque les délimiteurs de chaines pour les champs nom et couleur dans ta requête.
Hello,
Le problème (enfin... un problème ! Smiley cligne ), c'est que dans ta chaine $query, tu fais un "SET quantite.$i", et le tout est entre guillemets. Donc en fait, c'est interprété comme quantite.0, quantite.1,... alors que tes champs s'appellent quantite1, quantite2, ... sans le point !

Le plus propre est sans doute de vraiment différencier à l'intérieur de la chaine ce qui vient du PHP de ce que toi tu écris.
Je te conseillerais de faire

$query = "UPDATE CYCLUS_boutique_produits
                   SET quantite".$i." = quantite".$i." - ...........

Remarque, pour t'aider à y voir plus clair, rien ne t'empêche d'écrire temporairement un echo '<br/>'.$query; dans ta boucle...... Tu pourras alors voir la requête que tu tentes d'exécuter, et tu pourras plus facilement la débugger.

Petite question pour ma culture personnelle, ça sert à quoi les { et } autour de tes $_SESSION ?
Modifié par vickk (27 May 2009 - 14:28)
Salut,

bidoum a écrit :
Le problème est que la bdd est assez mal foutue au départ (et je ne peux pas la modifier), je m'explique :

Les articles existent en plusieurs couleurs, et donc une quantité pour chaque couleur (exemple 3 tshirt rouge, 7 tshirt vert, 2 tshirt jaune ect...)
Et tout ça est contenu dans une seule table, avec une colonne couleur1, couleur2, couleur3.... quantite1, quantite2, quantite3.... Quantite1 correspondant au stock du produit en couleur1, quantite2 au stock du meme produit en couleur2, ect...
Beurk ! Smiley biggol

Peut-être quelque chose comme ça :
for ($i = 0; $i < 10; $i++) {
	if($_SESSION['panier']['quantite'][$i] > 0) {
		$query= "UPDATE CYCLUS_boutique_produits
				   SET quantite$i = quantite$i - {$_SESSION['panier']['quantite'][$i]} 
				   WHERE nom='{$_SESSION['panier']['nom'][$i]}' AND couleur$i='{$_SESSION['panier']['couleur'][$i]}'";    
        mysql_query($query);
	}
}

Modifié par Heyoan (27 May 2009 - 15:15)