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 :

gestion stock et panier php et sgbd


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut gestion stock et panier php et sgbd
    bonjour,

    voila je veux gerer mes stocks pour qu'une personne ne puisse pas commander si il n'y en plus en stock je met un message "plus ce produit en stock", au début j'avais enlever les nombre de produits des stocks apres validation de la commande apres paypal avec IPN.

    mais je me retrouve qu'en meme a me poser certaines question avec cette solution car c'est pas vraiment en temps réel.
    donc j'ai trouver ca:

    - 1ère solution : je déstocke au moment où la commande est confirmée (mais pas encore payée)
    Problème : Si la personne change d'avis au moment de payer réellement, en fermant purement et simplement la fenêtre Paypal, je me retrouve avec des stocks inférieurs à ce que j'ai réellement en stock.

    - 2ème solution : je déstocke après le paiement
    Problème : Si une 2ème personne confirme ou commence à remplir les formulaires de paiement alors que la 1ère vient de payer, la 2ème personne peut se retrouver à payer des articles qui ne sont plus en stock.

    - 3ème solution : déstockage en temps réel, à chaque fois qu'un article est ajouté au panier
    Problème : si une personne ajoute des articles au panier, puis décide de changer d'avis en fermant tout simplement sa fenêtre, alors je me retrouve avec des stocks inférieurs à ce qui devrait être réellement.

    A votre avis quelle est la meilleur solution , je pense me tenter pour enlever les articles des quelles sont dans le panier mais la personnes ferme la fenetre j'aurai moins des stock que prevu.

    comment faire?

    MERCI.

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Ce que tu évoques c'est un faut problème (pour faire court).
    Le vrai fond du problème c'est ton stock, c'est à dire d'en avoir suffisamment pour répondre à la demande, au moins pour la journée.
    C'est "le nerf de la guerre" (si on peu dire) de tous ceux qui font du commerce il me semble.
    Et ça c'est ton métier en fin de compte, non ?


    Le cas N°2 est de loin le plus fiable, malgré qu'un client peu s'endormir un peu devant la page PayPal pour payer.
    S'il met 10 ou 15 minutes avant de valider tu ne pourras rien y faire si pendant ce temps de latence d'autres clients commandent le même produit.

    Normalement il faudrait faire patienter les autres clients qui commandent le même produit et qui le font juste après le 1er.
    C'est ingérable à mon sens.

    Est-ce que ça arrive souvent ?


    Il y a au moins 2 domaines particulièrement délicats il est vrai c'est de vendre des tickets de concerts où les ventes peuvent se faire sur un temps très court (le pire c'est de tout vendre la journée même), ou de vendre des produits uniques (1 pièce).
    Est-ce le cas ?


    Pour les autres cas, comme décompter au moment de la mise dans le panier ça peu être utile dans ces 2 cas ci-dessus, mais ça demandera qu'il y ait une personne qui surveille les paniers créés pour par exemple supprimer un panier créé il y a 1 heure pour le supprimer et réapprovisionner le stock (en estimant qu'au bout d'une heure le client à quitter le site où ne commandera pas).

    S'il n'y a pas cette surveillance, tu diminues artificiellement ton stock alors qu'il ne serait pas déjà suffisant, tu perds des ventes au final.
    En somme, cette manière est bonne que si tu dispose d'un stock suffisant (au moins pour 1 journée), et de lancer une routine (genre cron) tard le soir pour supprimer les paniers non convertis et réapprovisionner le stock.


    Ceci dit, on peu prévoir de déstocker au niveau du panier (ou prè-commande) et lancer un cron toutes les heures par exemple pour supprimer d'un coté et réapprovisionner de l'autre.
    Faut voir.


    L'idéal c'est d'avoir suffisamment de stock, tu n'auras plus de problème, ou un peu moins, non ?

  3. #3
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    Bonjour,

    voila je gère mon panier avec des SESSION,lorsqu'un client commande et arrive sur le panier, les produits sont destocker de ma bdd.

    Probleme:
    quand le client ferme la fenetre ou se deconnecter les produits sont tj destocker.
    Je voudrai donc que tout les 30 min si la commande n'est pas au statut valider dans ma bd donc n est pas passer par paypal, je reinsere les produits du panier SESSION dans ma bdd.

    Donc je voulais comparer le début actif de la session a l heure est si cela fait plus de 30 min, je réinsérer les produits.

    voici ce que j ai :
    mais echo me renvoie 0.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    ...
    $_SESSION['start'] = time();
    $duréeSessionActive=round((time() - $_SESSION['start']) / 60);
    echo''.$_SESSION['start'] .'' 
    $managerArticle->MajStockMultiple($_SESSION['panier']['idProduit'][$i],$_SESSION['panier']['qteProduit'][$i]);
    ..?>

    est ce une bonne solution, si oui pouvez m'aider a finir?
    Merci.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Il ne faut pas utiliser les sessions, elles sont liées aux utilisateurs (au navigateur plus exactement), ce qui veut dire que si l'utilisateur est inactif par exemple tu ne le sauras pas.
    Ce n'est absolument pas fiable (pas pour moi du moins).

    Le moyen qui me semble fiable c'est d'utiliser une tâche cron (ou tâche planifiée), donc que ce soit déclenché uniquement coté serveur toutes les heures ou 30 minutes par exemple.
    Faut espérer que ton hébergeur offre ce genre de service. Ceci dit certains sites le proposent.


    Après ça, il vaut mieux que la gestion des paniers se fassent dans une Bdd liés aux utilisateurs, (ce qui n'empêche pas de les mettre dans la session en parallèle).
    Ceci devrait faciliter les choses.

    Puis il faudrait une autre base de temps pour décider si oui ou non le panier sera détruit pour restocker.
    Théoriquement tu n'as pas besoin de créer un statut pour ça, juste une date (datetime) au niveau du panier, et un délai de validité du panier (un délai de référence, une config).
    Si le panier n'est pas transformé en commande (pas en court de commande) et si le délai est expiré, alors on détruit le panier et restokage.


    Il me semble qu'il faut détruire le panier, sinon il risque d'avoir des incohérences vu que c'est à ce moment là que tu prévois le déstockage.
    Par ailleurs, cela peu de manière indirecte dérouter un utilisateur qui à un moment voit ces produits sans son panier, puis quelque temps après plus rien.


    Faudra peut être faire attention qu'au bout d'une commande le panier est bien supprimé, sinon il peu avoir des problèmes/incohérences.



    Enfin, tout ça n'est qu'une suggestion, sans compter que je ne suis pas partisan de déstocker au niveau du panier.
    Il y a intérêt que tout soit fiable, sinon ça peu être pire.

  5. #5
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    bonsoir,

    merci pour tes conseils j'ai une table existante deja entre commande et article

    regroupe(id_commande,id_article, quantite, prix_date_commande)

    donc si j'ai suivi:

    1/le client commande arriver au panier le stock est decrementer et la table
    2/page confirmation commande:
    -la commande est enregistrer dans dans la bdd.
    -la table regrouper(qui joue le role de panier)est remplit.
    3/interface paypal
    4/retour sur le site:
    -infos IPN sauvegarder en completant les données de la commande et statut modifier dans l enregistrement de la table en completed.

    5/tache cron toute les 30 min qui verifie la date de la table regrouper avec celle de maintenant si depasse 30 min enregistrement:
    -restockage en modifiant alors la table produit par la qte du produit dans la table regrouper.
    -supprimer dans regrouper et aussi commande.
    -suppression session panier.

    est ce bien ca?

    je vais me renseigner pour les cron je n en ai jamais fait.
    merci.

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai du mal à comprendre le déroulement que tu décris, comment t'as prévu cette gestion du panier/commande.
    D'ailleurs, cette phrase '1/le client commande arriver au panier le stock est decrementer et la table ' est surement incomplète, je n'ai pas compris.

    Je reste cependant étonné que tu prévois de créer la commande avant que le paiement soit effectué, ça risque de compliquer cette gestion de stock (entre autre), d'avoir des informations contradictoires.

    Si un client valide la commande (création de la commande donc), arrive sur PP, puis finalement revient sur ton site sans faire de paiement, ce client se retrouve avec non seulement un panier mais aussi sa commande, il aurait donc tout le loisir de modifier son panier (rajout de produits, modif des quantités, etc ...).
    S'il relance à nouveau la commande, qu'est-ce qu'il se passe ?

    Normalement la commande devrait être effective uniquement au niveau du IPN, au retour de PP, non ?
    J'ai idée que tu procèdes comme ceci par précaution, au cas où les choses ne se passent pas très bien au niveau de PP, non ?


    Un système classique est le suivant, et il y a d'ailleurs 2 cas différents : client non identifié et client identifié.

    - Pour un client non identifié, le panier est placé uniquement dans la session, puis tant qu'il ne s'identifie pas il ne devrait pas pouvoir lancer une procédure de commande.
    Donc normalement on ne devrait pas déstocker à ce niveau, seulement une fois identifié, donc le script cron ne devrait pas agir à ce niveau.

    - Pour un client identifié, le panier devrait se trouver dans la Bdd (et pourquoi pas dans la session en parallèle).
    C'est là où le script cron pourra agir.


    Par ailleurs, le script cron est totalement indépendant à celle de la gestion du panier/commande, son déclenchement vient du serveur.

    Donc quand le script est déclenché, le "restockage" doit se faire selon certaines conditions.
    C'est ces conditions là que tu dois définir en 1er (tu ne dis rien la dessus).
    De mon coté j'avais suggéré de se baser sur 3 choses :
    - une date de création/modification du panier (table panier)
    - un délai d'expiration (un temps de référence).
    - ne pas agir si un client lance une procédure de commande (présence d'une commande), sinon c'est là où on risque d'avoir des infos contradictoires/incohérentes (problème évoqué plus haut).
    - Tu as peut être d'autres conditions ...
    Donc : si pas de pré-commande + si la date du panier est expiré selon le délai de référence -> on lance cette procédure/action de restockage.


    Après ça, il te faut déterminer quelles actions il faudra faire si les conditions sont réunies (ci-dessus).
    - Restocker chaque produits du panier selon la quantité prise.
    - Détruire le panier (Bdd et session s'il y a les 2)

Discussions similaires

  1. [PrestaShop] Multiboutiques : pas de gestion des stocks si panier commun activé
    Par GalopaWXY dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 02/06/2015, 20h59
  2. Gestion panier PHP - Explorer/Firefox
    Par len73 dans le forum Langage
    Réponses: 6
    Dernier message: 13/05/2007, 18h52
  3. Gestion Stock
    Par fb40 dans le forum Access
    Réponses: 4
    Dernier message: 11/03/2006, 23h42
  4. tuto sur gestion d'un panier
    Par sam01 dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2006, 13h39
  5. [Session] Gestion des droits en PHP
    Par persi dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2006, 14h54

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