PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 14-05-2009 11:43:03

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

probleme avec foreach (encore !)

Bonjour a tou(te)s,

voila mon probleme :
J'ai un formulaire de commande de produits. Les clients peuvent commander plusieurs produits. Chaque produit a plusieurs quantites, mais une seule quantite par produit peut etre choisie.

j'ai ensuite un formulaire "récapitulatif d'une commande" qui est généré dynamiquement, et qui va chercher des données dans une table "produits".
Ces données sont stockées dans le formulaire dans des champs cachés.
Pour simplifier j'ai 4 données importantes :
- le stock disponible pour chaque produit (données récupérées dans la table "produits")
- la quantité commandée pour chaque produit (données entrée par le client)
- la référence des produit (données récupérées dans la table "produits")
- j'opère la soustraction $donnee['stock']-$quantitecommandee pour chaque produit.

<?php
$soustraction=$donnee['stock']-$_POST[quantite_commandee_par_le_client_dans le formulaire_de_commande_a_letape_precedente];
<form>
<input type ="hidden" name="stock_disponible[]" value="$donnee[stock]">
<input type ="hidden" name="quantite_commandee[]" value="$_POST[quantite_commandee_par_le_client_dans le formulaire_de_commande_a_letape_precedente]">
<input type ="hidden" name="reference_produit[]" value="$donnee[reference_produit]">
<input type ="hidden" name="soustraction[]" value="$soustraction"></form>
?>

Lors de la validation de la commande (post du formulaire), je récupère les informations et je fais 2 opérations : 1. j'insere la commande dans une table "commandes" (pas de probleme)... et 2. je souhaite soustraire les quantités commandées du champ "stock" de la table "produits". C'est la que ca bloque. J'ai fait ca :

<?php
foreach ($_POST['soustraction'] as $row=>$value)
{
// connexion a la base et requete
$query = "UPDATE produits SET stock='$value' WHERE reference='$_POST[reference_produit]'";
$requete = mysql_query($query, $db) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
}
?>

Cela fait des heures que je m'arrache les cheveux, si vous pouvez m'aider je vous en serai tres reconnaissant ! Merci !

Hors ligne

#2 14-05-2009 11:58:00

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : probleme avec foreach (encore !)

Il y a plusieurs choses qui ne vont pas dans ton script.
La première me semble fondamentale.
Imagine que les réservations des places pour un vol, ou un spectacle soient réalisées comme tu le fais.
Si deux personnes se connectent quasi simultanément et qu'il ne reste plus qu'une place, celle-ci pourrait très bien être attribuée deux fois.
C'est pourquoi ce genre de choses doit se faire en mode transactionnel avec verrouillage de la table.
S'agissant du code de la boucle foreach, que sont censés contenir respectivement $row et $value (principalement $row) ?
Et $_POST[reference_produit] est un array, pas une valeur scalaire, donc tu ne peux pas t'en servir tel quel dans le SET de l'UPDATE.
En outre, il n'y a aucune corrélation entre le tableau parcouru par foreach et celui-ci, d'où tes problèmes.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 14-05-2009 12:48:27

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec foreach (encore !)

merci de ta réponse... tu as raison evidemment. Je vais essayer autre chose.

Hors ligne

Pied de page des forums