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 :

Sauvegarder les valeurs d'un array et les réutilisés [PHP 5.6]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut Sauvegarder les valeurs d'un array et les réutilisés
    Bonjour, désolé pour le titre il est pas bien explicite.

    J'expose mon problème je débute en php j'ai une page index.php ou il y a un formulaire qui représente une machine à café.

    C'est des boutons radio, on à 4 choix : café, cappuccino, chocolat et thé.
    Et un menu déroulant pour choisir le sucre 5 maximums.

    J'ai aussi une page functions.php ou il y a notamment un array associatif ou je déclare les ingrédients.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tIngStock=array('café'=> $stockCaf=10, 'chocolat' => $stockChoco=10, 'thé' => $stockThe=10, 'lait'=>$stockLait=10, 'sucre'=>$stockSugar=10, 'eau'=>$eau=10);
    Donc quand je choisi disons café et que j'appuie sur envoyé la valeur de l'ingrédient 'café' diminue de 1 dose donc on passe de 10 à 9 pour le café et sur ma page index.php la fonction displayIngredient() affichera la valeur.

    Donc ce que je voudrai faire c'est que quand je reprend par exemple café je passe de 9 à 8.
    Mais malheureusement à chaque fois que je choisie de nouveau une boisson disons à nouveau café et bien le tableau est réinitialisé à 10 ce qui fait que je repasse à 9.

    Pourriez-vous m'indiquer comment faire pour garder en mémoire les valeurs du tableau des ingrédients ?

    Merci par avance.

    Ps. : je n'ai pas encore appris les bases de données.

    Voici ma page index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php 
        $time=date('d-m-y');//Création d'une variable $time dans celle-ci on met la chaîne renvoyé par la fonction date
    ?>
     
    <!DOCTYPE html>
    <html>
        <head>
            <title>Machine à café</title>
            <meta charset="utf-8" />
            <?php include 'functions.php' //inclusion du fichier functions.php dans l'index.php?> 
     
        </head>
     
        <body>
            <h2>Ma machine à café</h2>
     
        <p>Date : <?= $time?></p>  <!--Affichage de l'heure-->
        <p>Somme d'argent insérée : 0</p>
     
        <form method="post" action="index.php">
     
        <p>Choisissez votre boisson :</p>
            <input type="radio" name="drink" value="café" id="café"/>
            <label for="café">café</label>
     
            <input type="radio" name="drink" value="cappuccino" id="cappuccino"/>
            <label for="cappuccino">cappuccino</label>
     
            <input type="radio" name="drink" value="chocolat" id="chocolat"/>
            <label for="chocolat">chocolat</label>
     
            <input type="radio" name="drink" value="thé" id="thé"/>
            <label for="thé">thé</label>
            <br>
            <label for="choiceSugar">Choisissez votre nombre de sucre Maximum 5</label><br><br>
            <select name="choiceSugar" id="choiceSugar">
                <option value="0">0</option>
                <option value="1">1</option> 
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
            </select><br><br>
     
            <input type="submit" value="Envoyer"/>
        </form>
     
        <p></p>
     
        <?php 
        displayDrinkAviable();
        //Vérification avec isset si valeur $_POST est vide ou non
            if(isset($_POST['drink'])){
                //displayRecette();
                echo "<p>Liste ingrédients pour : ".$_POST['drink']."</p>"; //Affichage de la boisson
                prepareDrink($recette[$_POST['drink']], $_POST['choiceSugar']);//Envoi des paramètres $_POST dans la fonction prepareDrink
            }
            displayIngredient();  
        ?>
     
        </body>
    </html>

    Et ma page function.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    <?php 
     
    $drink=array('café', 'cappuccino', 'chocolat', 'thé');
     
    //Tableau associatif pour les recettes des boissons stock l'array dans la variable $recette
    $recette=array('café'=> array('café' => 1 , 'eau' => 3), 
    'cappuccino' => array('café' => 2, 'lait' => 2),
    'chocolat' => array('chocolat' => 3, 'lait' => 3),
    'thé' => array('thé'=> 2, 'eau' => 4));
     
    //Tableau associatif gère le stock des ingrédients 
    $tIngStock=array('café'=> $stockCaf=10, 'chocolat' => $stockChoco=10, 'thé' => $stockThe=10, 'lait'=>$stockLait=10, 'sucre'=>$stockSugar=10, 'eau'=>$eau=10);
     
    //fonction initStock initialise le stock à 100 doses;
    /*function initStock()
    {
        global $tIngStock;
        foreach($tIngStock as $key=>$val){
            $tIngStock[$key]=100;
        }
    }*/
     
    function displayDrinkAviable()
    { 
        global $tIngStock, $recette, $drink;
        $displayDrink=array(); $tmp=array();
        $var=0;
        $drinkLength = sizeof($drink);
        foreach($tIngStock as $key=>$val){
            if($key != 'sucre' && $tIngStock[$key] > 0){
                foreach($recette as $key1=>$val1){
                    foreach($val1 as $key2=>$val2)
                        if($key===$key2){
                        {
                            $tmp[]=$key1;
                        }
                    }
                }
            }
        }     
     
        for($j=0; $j < $drinkLength; $j++){
            for($i=0; $i < sizeof($tmp); $i++){
                if($drink[$j]==$tmp[$i]){
                    $var++;
                }
            }
     
            if($var >= 1){
                $displayDrink[]=$drink[$j];
            }
        }
     
        $displayDrinkLength = sizeof($displayDrink);
     
        if($displayDrinkLength)
        {   
            echo "Boisson disponible : $displayDrinkLength <br>";
            for($i=0; $i<sizeof($displayDrink); $i++){
                echo "$displayDrink[$i] <br>";  
            }
        }
        else 
            { echo "Aucune boisson disponible."; }
    }
     
    //prepareDrink prend 2 paramettres : le tableau à 2 dimensions $recette et le nombre de sucre et affiche la recette de la boisson et le sucre
    function prepareDrink($tab, $sucre)
        {
            global $tIngStock;
            $strRecet="";
     
            foreach($tab as $key => $val)
            {
                $strRecet .= $val.' doses de '.$key.' et <br>';
                $tIngStock[$key]-=$val;
            }
            $tIngStock['sucre']-=$sucre;
            echo $strRecet .= $sucre." sucre(s)";
        }
     
    function displayIngredient()    
    {
        global $tIngStock;
            echo "<pre>";
            print_r($tIngStock);
            echo "</pre>";
    }
     
    ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu initialises à chaque fois ton stock à sa valeur de départ.

    1- Il faut passer $tIngStock en paramètre des fonctions et pas en global.
    Ainsi qu'en paramètre du formulaire (pour le transmettre).
    Comme ça, il se modifie à chaque commande.

    2- Une meilleure approche est de le mettre dans une variable de SESSION, à initialiser une fois, puis à modifier.
    Auquel cas, pas besoin de le "transmettre".

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Ok merci pour ta réponse.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    En fait j'avais cru avoir résolu le problème mais j'ai essayé les 2 propositions.

    Pour la première je ne comprend pas ce que tu veux dire par :
    Ainsi qu'en paramètre du formulaire (pour le transmettre).
    Ou est-ce que je dois mettre ce paramètre doit-on le mettre avec un attribut value dans la balise forme ?

    Et pour l'autre réponse je n'arrive pas à savoir comment tu fais pour l'utiliser.
    Je comprend qu'il faut mettre soit session_start() dans function.php ou bien dans index.php
    Si je met session_start() dans function.php je fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $tIngStock=array('café'=> $stockCaf=10, 'chocolat' => $stockChoco=10, 'thé' => $stockThe=10, 'lait'=>$stockLait=10, 'sucre'=>$stockSugar=10, 'eau'=>$eau=10);
    $_SESSION['tIngStock']=$tIngStock;
    mais après je fais comment désolé je ne vois pas j'ai beau réfléchir au problème mais si ensuite dans mes fonction je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['tIngStock'] au lieu de $tIngStock
    sa ne change rien.

    Et si ensuite je valide un autre choix le tableau $tIngStock va être relu automatiquement donc réinitialisé donc je ne vois pas.

  5. #5
    Invité
    Invité(e)
    Par défaut
    La nuit porte conseil...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/03/2011, 11h17
  2. débutant, Utiliser toutes les valeurs d'un array
    Par nkordiko dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/04/2010, 22h32
  3. [PHP 5.0] [array] afficher les valeurs d'un tableau à plusieurs éléments
    Par mdr_cedrick dans le forum Langage
    Réponses: 1
    Dernier message: 25/02/2009, 10h33
  4. garder les valeurs d'un array pour une pagination
    Par berti dans le forum Langage
    Réponses: 4
    Dernier message: 08/07/2008, 19h04
  5. Réponses: 9
    Dernier message: 28/06/2006, 11h11

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