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

Langage PHP Discussion :

Décompte dans une Boucle For


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Décompte dans une Boucle For
    Bonjour,

    je gallère pour solutionner le problème ci-dessous, j'aimerai en téhorie obtenir le même nombre d'articles à décompter quand les 1er chiffres d'une réference sont similaire, petit schéma,

    ID----Model---Ventes---Unités---Stock---Décompte--Nouveau Stock----
    74---11111.6----1--------6------900--------6-----------894-----------
    75---11111------1--------1------900--------1-----------899----------
    76---22222------1--------1------800--------1-----------799----------

    "11111.6" est une référence indépendente de "11111" mais en réalité il s'agit du même produit, l'un est vendu par lot de 6 définit dans la base de données, l'autre par 1, logiquement j'ai vendu en tout 7 articles de la référence 11111, j'aimerai donc que ça décompte 7 articles de la référence "11111.6" et 7 de la référence "111111" et ainsi obtenir,

    ID----Model---Ventes---Unités---Stock---Décompte--Nouveau Stock----
    74---11111.6----1--------6------900--------6-----------893-----------
    75---11111------1--------1------900--------1-----------893----------
    76---22222------1--------1------800--------1-----------799----------

    j'ai un petit bout de code exemple avec lequel je joue sur la référence,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for ($i=0, $n=sizeof($order->products); $i<$n; $i++){ // faire une boucle sur les articles 
    if (strstr($order->products[$i]['model'], ".")){ // si détection du caractère "." dans model 
    $model = substr($order->products[$i]['model'], 0, strpos($order->products[$i]['model'], "-")); // "11111.6" devient "11111" 
    echo $stock_left = $stock_values['stock'] - ($order->products[$i]['ventes']*$stock_values['unites']); // déduit 7 articles du stock
    } 
    elseif ($model == $order->products[$i]['model']){ // si la 2ème référence article est = à la 1ère "11111" 
    echo $stock_left; // déduit aussi 7 articles du stock pour cette référence
    } 
    else{ 
    echo $stock_left = $stock_values['stock'] - ($order->products[$i]['ventes']*$stock_values['unites']); // déduit 1 article du stock 
    pour la référence 22222 
    } 
    }
    je pense qu'il y a d'autres méthodes...

    merci pour vos réponses..

  2. #2
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut

  3. #3
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Il faudrait préciser un peu parce que
    mais je suis pas certain et il fonctionne mal..
    c'est pas génial pour nous guider

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par JWhite
    Il faudrait préciser un peu parce que

    c'est pas génial pour nous guider
    Slt JWhite,

    j'avoue que mon problème n'est pas très simple à expliquer n'étant pas expert, par contre j'ai ajouté un 2ème résultat pour essayer de faire comprendre au mieux ce que je souhaite obtenir sans tenir compte du code..

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    franchement pour en arriver la ...mauvaise conception des tables mais ce n'est que mon humble avis

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Je suppose que tu fais un UPDATE quelque part pour mettre ton stock à jour, il suffit peut-être de modifier la condition pour avoir ce que tu souhaites (tu comptes le nombre à enlever et après UPDATE table SET ... WHERE ref LIKE 'ref%')...

    Et +1 avec Boo, à mon avis tu devrais avoir un champ ref pour les 5 chiffres et un champ sous-ref pour l'éventuelle suite.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par JWhite
    Je suppose que tu fais un UPDATE quelque part pour mettre ton stock à jour, il suffit peut-être de modifier la condition pour avoir ce que tu souhaites (tu comptes le nombre à enlever et après UPDATE table SET ... WHERE ref LIKE 'ref%')...

    Et +1 avec Boo, à mon avis tu devrais avoir un champ ref pour les 5 chiffres et un champ sous-ref pour l'éventuelle suite.
    la requête pour l'update,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tep_db_query("update products set stock = '" . $stock_left . "' where model = '" . $order->products[$i]['model'] . "'");
    celle-ci vient en dernier dans la boucle..

    dans ma table j'ai les champs,

    id----model---qty---stock---
    74---11111.6--6-----900----
    75---11111----1-----900----
    76---22222----1-----800----

    id
    model < peut être 11111 et 11111.6
    qty < me sert à spécifier si le produit est un lot de 1 ou de 6
    stock < nb produits en stock...

    par contre, le code doit fonctionner aussi dans les 2 sens, si je vend que 1x 11111.6, le code doit retirer 6 articles du model 11111.6 mais aussi, 6 articles de 11111 et vis-versa..

  8. #8
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Et par rapport à ce que je t'ai dit ? Tu sais récupérer la référence à cinq chiffres, tu sais aussi récupérer la quantité à enlever, donc c'est bon.

    Suffit de faire dans le WHERE de ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE model LIKE '%ref%'
    au lieu de

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    ça fonctionne pas mal

    par contre j'obtiens dans mon exemple,

    id----model-----qty---stock---
    74---1x11111.6--6-----894----
    75---1x11111----1-----893----
    76---1x22222----1-----899----

    il faudrait que ça puisse retirer encore 1 à "11111.6" avec le code suivant car la référence "11111" est ok,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (strstr($order->products[$i]['model'], "-")){
    $ref = substr($order->products[$i]['model'], 0, strpos($order->products[$i]['model'], "-"));
    $stock_left = $stock_values['stock'] - ($order->products[$i]['qty']*$stock_values['qty']) . '<br><br>';
    tep_db_query("update products set stock = '" . $stock_left . "' where model LIKE '$ref%'");
    }
    else{
    echo $stock_left = $stock_values['stock'] - ($order->products[$i]['qty']*$stock_values['qty']) . '<br><br>';
    tep_db_query("update products set stock = '" . $stock_left . "' where model = '" . $order->products[$i]['model'] . "'");
    }

  10. #10
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Et en mettant le LIKE et les % dans l'autre requête par exemple ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par JWhite
    Et en mettant le LIKE et les % dans l'autre requête par exemple ?
    Slt,

    merci pour votre aide celà fonctionne nikel

    Yo

  12. #12
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par Yohann_x
    Slt,

    merci pour votre aide celà fonctionne nikel

    Yo

    Cool


    Chti dans ce cas merki.

Discussions similaires

  1. multi ouverture de la console dans une boucle for
    Par jamesleouf dans le forum C++
    Réponses: 2
    Dernier message: 16/03/2006, 21h26
  2. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 13h45
  3. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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