Salut,
il faut suivre un raisonnement logique pour concevoir ça. Prenons un exemple (le tout sera stocké en session)
lorsque ton visiteur affiche le produit, tu affiches la quantité restante. Il se peut cependant qu'un utilisateur ait commandé le produit sans valider sa commande (parce qu'il surfe par exemple). Il faut donc que tu aies par exemple un champ qui indique le nombre de surfeurs étant en cours de commande pour ce produit. Une fois que l'internaute clique sur "commander" ça ajoute l'article à son panier. Tu peux donc stocker un tableau en session contenant tous les articles avec leur id, leur nom et la quantité pour chaque produit, ainsi que le prix et le time() de commande sur ce produit (on en aura besoin pour supprimer dans la base le temps correspondant au moment de la commande)
Lorsque le client clique sur "commander" et qu'il accepte sa commande, tu décrémentes pour chaque produit commandé la quantité restante et la quantité en cours de commande en fonction de la quantité demandée par le client pour chaque produit.
Il se peut aussi que le client ferme son navigateur sans avoir commandé réellement, mais en ayant cliquer sur "commander". Il faut donc tenir compte de ce cas en rajoutant par exemple dans la base de données un champ texte qui listera les time() pour chaque clic sur "commander". Mettons que deux clients commandent le produit X à 45 secondes d'intervalle.
Tu auras dans le champ (text) "temps", ceci (les temps en secondes sont des exemples) :
15204859
00,15204859
45 les valeurs sont séparées par des virgules.
Mettons que ça fait 20 minutes que le client 1 a commandé fictivement, et que le client2 a commandé réellement. Le client 2 lors de la commande a fait effacer le ",15204859
45"
il ne reste plus que 15204859
00 dans la valeur du temps. Or ce temps étant trop éloigné, on décrémente la quantité en cours de commande pour ce produit de 1 et on supprime le temps correspondant dans la base de données.
Je sais pas si t'as compris mais bon si j'avais un truc de ce genre à faire je ferais ça :-)