IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[ecommerce] Gestion produit / stock [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Par défaut [ecommerce] Gestion produit / stock
    Bonjour,

    Je réfléchi actuellement sur la façon la plus optimisée et la plus simple de gérer des stocks par rapport à chaque produit.

    Dans ma base de donnée j'ai un champs "product_stock" qui contient pour chaque produit les tailles (exemples: S, M, L, XL, ...) ainsi que le nombre de produit disponible dans chaque tailles.

    Dans l'admin j'aimerais pouvoir rentrer pour chaque article les tailles et les stocks disponible. J'ai essayé comme ça :

    Voici le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <form action="index.php" method="post">
     
    	<label>Stock :</label>
    	<input type="text" name="key"/> <!-- $key => la taille du produit (exemples: S, M, L, XL, ...) -->
    	<input type="text" name="value"/> <!-- $value => le stock (nb de produit) correspondant à la taille -->
     
    	<input type="submit" name="submit" value="Mettre à jour le stock"/>
    </form>
    Le PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (isset($_POST['submit'])) {	
       $key = $_POST['key'];
       $value = $_POST['value'];
       $product_stock = serialize(array ($key => $value));
     
       $sql = "UPDATE products SET product_stock = '".$product_stock."' WHERE product_ID = '".$product_ID."'";
       $req = mysql_query($sql) or die(mysql_error());
    }
    J'ai donc utilisé la fonction serialize() pour pouvoir stocker l'array dans ma BDD. Pas de problème pour la récupérer, j'utilise unserialize().

    Mon problème : Pour l'instant je ne peu enregistrer qu'une taille et son stock par produit. J'aimerai pouvoir en enregistrer plusieurs. Je ne vois pas trop comment m'y prendre.

    En gros j'aimerai pouvoir stocker dans le champs "product_stock" de ma BDD plusieurs tailles ainsi que les stocks correspondant pour chaque entrée.
    exemples :
    S => 40
    M => 50
    L => 20

    Merci d'avance de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut
    Pourquoi se limiter à une table et passer par un tableau PHP alors que les bases de données sont justement faites pour ce genre de choses ?
    Par exemple :

    Table produit
    *id
    désignation
    prix

    Table produit_info
    *id
    +produit
    taille
    stock

    Avec le champs "produit" de la table "produit_info" en clé distante faisant référence à la table "produit" pour avoir une relation 1-M.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Par défaut
    Merci pour ta proposition. En fait au départ je m'étais dit que c'était effectivement cette solution que j'allais adopter. Mais en réfléchissant je me suis dit que finalement pourquoi ne pas essayer d'utiliser la puissance de PHP pour limiter les requêtes SQL et la taille de la BDD.

    Dans la solution que tu proposes, le problèmes est que si un article est disponible dans plusieurs tailles, ça fait plusieurs entrées dans la BDD, donc une requête SQL plus lourde.

    J'aimerai quand même essayer de trouver une solution en utilisant les tableaux. Si c'est vraiment pas possible je resterais sur ta solution.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut
    Justement c'est en séparant les données sur plusieurs tables que tu optimises les performances (si la séparation est justifiée bien sûr) en n'utilisant que ce dont tu as besoin.
    Là en passant par un tableau PHP sérialisé tu dois récupérer toutes les valeurs de tailles et stocks même si tu ne veux en manipuler qu'une.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Par défaut
    Ok, mais à priori j'ai besoin de manipuler toutes les tailles dispo à chaque fois.

    En fait je ne sais pas à quel point serialize() mange en ressources, mais ça ne fait qu'une requête ou je récupère directement toutes les infos du produits.
    Alors que dans l'autre cas ça en fait deux :
    - une pour récupérer les infos du produit,
    - et une autre pour récupérer les stocks en fonction des tailles.

    Je ne sais pas qu'elle solution il vaut mieux adopter (sachant qu'effectivement la gestion des stocks méritent peu être une table).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Par défaut
    J'ignore ce qu'il en est de la consommation de ressources mais je doute que ce soit la contrainte principale (à moins d'avoir un serveur en carton...).

    En effet si tu as besoin d'utiliser toutes les valeurs à chaque fois, autant le faire en une seule requête. Maintenant, je doute que le gain de performance soit si conséquent, alors que niveau maintenance/possibilités d'évolution je suis persuadé que d'utiliser deux tables facilite bien plus les choses.

    Pour en revenir à ton formulaire, il est possible d'envoyer directement un tableau de cette façon (basé sur ton code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <form action="index.php" method="post">
     
    <label>Stock :</label>
    <input type="text" name="key[]"/>
    <input type="text" name="value[]"/><br/>
    <input type="text" name="key[]"/>
    <input type="text" name="value[]"/><br/>
    <input type="text" name="key[]"/>
    <input type="text" name="value[]"/><br/>
    <!-- A répéter suivant le nombre voulu -->
    <input type="submit" name="submit" value="Mettre à jour le stock"/>
    </form>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Gestion de stock dont chaque produit à un numéro de série
    Par babey dans le forum Schéma
    Réponses: 5
    Dernier message: 26/03/2015, 11h51
  2. Gestion de stock de produits pharmaceutiques
    Par MANOMAYEKO dans le forum Cas d'utilisation
    Réponses: 1
    Dernier message: 31/12/2014, 01h24
  3. gestion de stock (produit)
    Par arya38 dans le forum Modélisation
    Réponses: 1
    Dernier message: 17/06/2009, 19h34
  4. [MCD] Plusieurs types de produits (gestion de stock)
    Par insane_80 dans le forum Schéma
    Réponses: 1
    Dernier message: 29/05/2009, 14h30
  5. [AC-2007] Gestion de stock basé sur des nomenclatures produits
    Par simply_trunks dans le forum Modélisation
    Réponses: 1
    Dernier message: 14/05/2009, 23h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo