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 :

[Tableaux] Pb Liste déroulante + Pb affichage


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Tableaux] Pb Liste déroulante + Pb affichage
    Bonjour tout le monde... Il est tard et je désespère, alors je post ici mon problème avant de perdre espoir.

    Mon sujet: Panier d'une boutique de e-commerce.
    J'ai une page panier.php dans laquelle j'ai une liste déroulante. Cette liste me propose, pour un même article, trois choix: 1,2 ou 3 (qui correspondent à des quantités). Sélectionner 2 dans ma liste déroulante revient donc à dire que je veux commander 2 articles de la même référence. Pour ce faire, je clique sur "2" dans ma liste déroulante, et ensuite je clique sur un bouton "Actualiser" pour mettre à jour le prix total de ma commande (Total=Prix . quantité, sisi, je promet )

    Problème n°1: Avec le code ci-dessous, lorsque je clique sur "actualiser" après avoir saisie une quantité de "2", ça me remet ma liste déroulante sur la valeur initiale ( à savoir '1'). Comment faire pour qu'après avoir cliquer sur "actualiser", la valeur "2" reste affichée sur ma page.

    Extrait du code concernant ce pb:
    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
    //Mon script pour l'actualisation:
    if($modifPanier=="ACTUALISER")
    {
        for($i=0;$i<count($liste);$i++)
            {
            $nbi='nb'.$i; // Concaténation
            $list[$i][1]=$_GET["$nbi"]; // recup du nombre d'article dans la liste
            $liste[$i][3]=$liste[$i][1]*$liste[$i][2]; // prixArticle=nbre*prixUnitaire       
            }
        $_SESSION['liste']=$liste; // mAj de la liste
    }
     
    //Ma liste déroulante:
     <select name="nb<?php echo $i ?>"  id="nb" >    <!-- Affiche nb0, nb1, nb2, etc.-->
                      <option value="1"  <?php if($liste[$i][1]==1) echo "SELECTED"; ?>>1</option>
                      <option value="2"  <?php if($liste[$i][1]==2) echo "SELECTED"; ?>>2</option>
                      <option value="3"  <?php if($liste[$i][1]==3) echo "SELECTED"; ?>>3</option>
                  </select>
                  </div>
              </label></td>
     
    // Mon bouton actualiser:
     <label>       
                              <input type="submit" name="modifPanier" value="ACTUALISER" />
                              </label>
    Problème n°2: A l'évidence, mon objectif est d'afficher le coût total de la commande.
    J'utilise donc la formule simple suivante: $total+=$row_rsPanier['prix'] * $liste[$i][1];
    mais le problème, c'est que quand je sélectionne une quantité de '2' par exemple pour un article, ça ne me calcul ni ne m'affiche ce fameux $total . Par contre, lorsque j'ajoute différents articles, le total se calcul bien entre les différents article, sur la base d'une quantité de '1'.

    Je vous met le code complet de ma page panier.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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    <?php
    session_start(); // Sert à démarrer une session.
     
    //*******************************************INITIALISATION DES VARIABLE***********************************************
     
    //----------------------
    if(!isset($_SESSION['total'])) /* $_SESSION[] -> tableau global contenant toutes les variables de sessions pour la                                                     session courante*/
        $_SESSION['total']=0;
    //----------------------
    if(!isset($_GET['ajoutPanier']))
        $ajoutPanier="";             // Init de ajoutPanier.
        else $ajoutPanier=$_GET['ajoutPanier'];  // On récup la valeur de ajoutPanier qui est passée par URL.
    //----------------------
    if(!isset($_GET['modifPanier']))
        $modifPanier="";            // Init de modifPanier.
        else $modifPanier=$_GET['modifPanier'];
    //----------------------
    if(!isset($_GET['suppPanier']))
        $suppPanier="";                // Init de suppPanier.
        else $suppPanier=$_GET['suppPanier'];
    //----------------------
    if(!isset($_GET['enregistreCommande']))
        $enregistreCommande="";        // Init de enregistreCommande.
        else $enregistreCommande=$_GET['enregistreCommande'];
    //----------------------
    if(!isset($_GET['article']))
        $article="";                // Init de article.
        else $article=$_GET['article'];
    //----------------------
    if(isset($_SESSION['liste']))
        $liste=$_SESSION['liste']; // $Liste prend les valeurs de la liste contenue dans la variable de session.
     
    //**************************************FIN DE INITIALISATION DES VARIABLE*********************************************
    ?>
     
    <?php
    //**********************************UTILISATION DES PARAMETRES DE CONNEXION DE LA BDD**********************************
    require_once('../Connections/ConnexionBoutique.php');
    ?>
     
    <?php
    mysql_select_db($database_ConnexionBoutique, $ConnexionBoutique); // Sélectionne une base de données MySQL
     
    //*******************************************SCRIPT AJOUT PANIER******************************************************
    if ($ajoutPanier=="AJOUTER")
    {
        $reference=$_GET['reference'];
        $nb=1; // La quantité par défaut est égale à 1.
        $prix=$_GET['prix'];
        $liste[]=array($reference,$nb,$prix,$prix); // Création d'un tableau dynamique.
        $_SESSION['liste']=$liste;
    }
     
    //*******************************************SCRIPT MODIF PANIER******************************************************
    if($modifPanier=="ACTUALISER")
    {
        for($i=0;$i<count($liste);$i++)
            {
            $nbi='nb'.$i; // Concaténation
            $list[$i][1]=$_GET["$nbi"]; // recup du nombre d'article dans la liste
            $liste[$i][3]=$liste[$i][1]*$liste[$i][2]; // prixArticle=nbre*prixUnitaire       
            }
        $_SESSION['liste']=$liste; // mAj de la liste
    }
     
    //*******************************************SCRIPT SUPP PANIER*******************************************************
    if($suppPanier=="SUPPRIMER")
    {
        for($i=0;$i<count($liste);$i++)
            {
            if($article==$i)
                array_splice($liste,$i,1); // Suppression de l'article.
            }
        $_SESSION['liste']=$liste; // mAj de la liste
    }
     
    //*****************************************SCRIPT ENREGISTRER CMDE****************************************************
    if($enregistreCommande=="COMMANDER")
    {
        if(!isset($_GET['action'])) // Si la variable action n'a pas encore de valeur, alors
             $_SESSION['action']="ENREGISTRER"; // Mémorisation de l'action dans une variable de session avec la valeur                                                 //"ENREGISTRER"
     
        // header("Location: commande.php"); //Ne fonctionne pas, je ne sais pas pourquoi, donc j'utilise le javascript    // suivant:
     
        // On redirige automatiquement l'utilisateur vers la fiche pour commander:
        echo '<script language="Javascript">
        <!--
        document.location.replace("commande.php");
        // -->
        </script>';
    }
    ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/Modele Public.dwt.php" codeOutsideHTMLIsLocked="false" -->
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans titre</title>
    </head>
     
    <body>
    <div align="center"><img src="../images/bandeauapublic.GIF" width="650" height="156" border="0" usemap="#Map" />
    <map name="Map" id="Map">
      <area shape="rect" coords="6,114,156,157" href="catalogue.php" />
    <area shape="rect" coords="187,115,299,155" href="panier.php" />
    <area shape="rect" coords="316,114,495,159" href="commande.php" /><area shape="rect" coords="529,114,642,160" href="../Administrateur/index.php" />
    </map></div>
    <table width="912" height="94" border="0" align="center">
      <tr><!-- InstanceBeginEditable name="regionPublicModifiable" -->
        <th scope="col">
     
    <?php
        if(isset($liste)) //affiche le tableau que s'il y a au moins un article.
    {
    ?>
     
        <form id="formulairePanier" name="formulairePanier" method="get" action="panier.php">
          <table width="802" border="2">
            <tr>
              <th width="188" scope="col">R&eacute;f&eacute;rence</th>
              <th width="158" scope="col">Quantit&eacute;</th>
              <th width="182" scope="col">Prix</th>
              <th width="244" scope="col">Supprimer</th>
            </tr>
     
    <?php
        $total=0.00;        // Initialisation du total de la commande à 0.
        for($i=0;$i<count($liste);$i++)
            { // Déf. de la requête SQL afin de récupérer les informations de l'article stockées dans la BDD
            // La requete suiv. prend tous les champs de la table articles en fonction de la référence de chaque article:
            $query_rsPanier="select * from articles where reference='".$liste[$i][0]."'"; // dimx=$i : Les articles /                                                                                            //dimy=0: reference
            $rsPanier=mysql_query($query_rsPanier, $ConnexionBoutique);
            $row_rsPanier=mysql_fetch_assoc($rsPanier); // Retourne un tableau associatif qui contient la ligne lue dans le                                                         // résultat $rsPanier
    ?>
     
            <tr>
              <td><div align="center">
     
              <?php
              echo $row_rsPanier['nom']
              ?></div></td>
     
              <td><label>
                <div align="center">
     
                  <select name="nb<?php echo $i ?>"  id="nb" >    <!-- Affiche nb0, nb1, nb2, etc.-->
                  <!-- value indique la valeur envoyée au serveur si cette option est choisie -->
                      <option value="1"  <?php if($liste[$i][1]==1) echo "SELECTED"; ?>>1</option>
                      <option value="2"  <?php if($liste[$i][1]==2) echo "SELECTED"; ?>>2</option>
                      <option value="3"  <?php if($liste[$i][1]==3) echo "SELECTED"; ?>>3</option>
                  </select>
                  </div>
              </label></td>
     
              <td><div align="center">
              <?php
                  echo $row_rsPanier['prix']
              ?>
              </div></td>
     
              <td><div align="center">
     
                  <a href="panier.php?suppPanier=SUPPRIMER&article=<?php echo $i ?>">
     
              <img src="../images/Next.gif" width="20" height="12" /></div></td>
            </tr>
        <?php
            $total+=$row_rsPanier['prix'] * $liste[$i][1];
     
    } // FIN DU BLOC FOR
     
            $_SESSION['total']=$total; // Mémorise le total dans la session.
        ?>
     
            <tr>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td><div align="center">TOTAL: <?php echo $total ?> Euros </div></td>
              <td>&nbsp;</td>
            </tr>
          </table>
                            <p>
                              <label>       
                              <input type="submit" name="modifPanier" value="ACTUALISER" />
                              </label>
                              <label>
                              <input type="submit" name="enregistreCommande" value="COMMANDER" />
                              </label>
                            </p>
        </form>
     
         <?php } else { ?>
          <p align="center"><strong><font size="4" face="Verdana, Arial, Helvetica, sans-serif">Votre panier est vide</font></strong></p>
     
        </th>
        <?php
    } // FIN DU TEST isset($liste)
        ?>
      <!-- InstanceEndEditable --></tr>
    </table>
    <div align="center"><img src="../images/BarreBasPublic.GIF" width="649" height="18" />
    </div>
    </body>
    <!-- InstanceEnd --></html>

    J'ai essayé d'être le plus concis possible, au détriment d'une certaine longueur.
    Merci pour votre aide.
    Cordialement.

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Citation Envoyé par mikacontact
    Problème n°1: Avec le code ci-dessous, lorsque je clique sur "actualiser" après avoir saisie une quantité de "2", ça me remet ma liste déroulante sur la valeur initiale ( à savoir '1'). Comment faire pour qu'après avoir cliquer sur "actualiser", la valeur "2" reste affichée sur ma page.
    tu dois passer ta valeur 2 en paramètres et le récupérer.
    En gros au début de ta page tu test si ta variable nb_articles est définie. Si elle l'est tu la récupères et tu fais tes traitements sinon c'est que la personne vient d'arrivée sur la page et qu'elle n'a pas encore sélectionné le nombre d'articles.

  3. #3
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    tu dois passer ta valeur 2 en paramètres et le récupérer.

    Il me semble que c'est ce qu'il tente de faire ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $list[$i][1]=$_GET["$nbi"]; // recup du nombre d'article dans la liste
    Mais ce qu'il a du oublier, c'est que l'on quote les noms et pas les variables... Je pense que ceci devrait mieux fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $list[$i][1]=$_GET[$nbi]; // recup du nombre d'article dans la liste
    Mais bon, a 4H42 du matin on n'est jamais tres operationnel !

    L'explication est assez simple. Vu que tu quote entre crochet, il ne tente pas de remettre la variable, il cherche la valeur en parametre appellée $nbi et vu quelle n'existe pas cela donne un bon vieux 0. Et quand tu multiplie par zéro tu obtiens... 0.
    Sinon, si tu aimes les concaténations tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $list[$i][1]=$_GET['nb'.$i]; // recup du nombre d'article dans la liste
    Avec ceci tu gagnes une ligne de code !!

    @+
    cadou
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Marche pas
    Merci messieurs d'avoir pris le temps de jeter un oeil à ce code...
    Cependant, vos propositions, qui m'avaient l'air très pertinentes, ne fonctionnent pas. A savoir que lorsque je clique sur actualiser apres avoir saisi "2" dans ma liste déroulante, je reviens à la valeur initiale au niveua de l'affichage, cad "1". Et mon total ne prend toujours pas compte la valeur "2" saisie ds la liste déroulante...
    Visiblement, a 15h45, je ne suis pas plus performant qu'a 4h du mat

  5. #5
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    OUlalala... Bon je crois que je me suis fracturé un neurone...
    J'aime pas la focn de programmer qui consiste a mélanger la mise en page et le code PHP... Je préfère nettement les templates... Mais bon c'est pas le sujet...

    Alors J'aibien l'impression que tu nous initialise le tableau $liste de cette maniere :
    $liste[]=array($reference,$nb,$prix,$prix); // Création d'un tableau dynamique.

    Derriere tu fais tes petits calculs et tout ce qu'il faut et tu reinjecte le tout dans
    $_SESSION['liste']=$liste; // mAj de la liste

    Mais a la fin, tu réutilise $liste pour calculer ton select avec tes options, alors que la plupart des variables calculées etc... elle sont toujours dans $_SESSION['liste'] et que en théorie $liste ne doit pas etre si différent du tableau initialisé à la base...
    Donc déja y a un truc louche par là à mon avis... Mais partons du principe que tu sais ce que tu fais....

    En second lieu, quand on lis ceci avec un peu de recul.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nbi='nb'.$i; // Concaténation
    $list[$i][1]=$_GET["$nbi"]; // recup du nombre d'article dans la liste
    $liste[$i][3]=$liste[$i][1]*$liste[$i][2]; // prixArticle=nbre*prixUnitaire
    On se dit forcement que l'on a passer pas mal de temps sur un probleme tout con car il te manque vraisemeblablement un "e" a $list[$i][1]=$_GET["$nbi"];

    Il faudrait ecrire :
    $liste[$i][1]=$_GET["$nbi"];

    Ceci cumulé aux conseils précédent... Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $liste[$i][1]=$_GET['nb'.$i];
    @+
    cadou
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Tu es un dieux
    Cadou... Dis moi où tu veux que je te dresse une statut et je le ferai! TU te rends compte que j'ai cherché ce pb pendant environ 5 heures !!!! Et c'est juste un 'e'...
    ALors tout d'abord je te remercie, et maintenant, je vais me pendre

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

Discussions similaires

  1. [SQL] Liste déroulante et affichage
    Par sara2001 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/07/2007, 11h44
  2. [Tableaux] multiples listes déroulante
    Par -Neo- dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2007, 15h27
  3. [Tableaux] résultat liste déroulante au dessous
    Par Lyna31 dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2007, 14h36
  4. Sélection liste déroulante puis affichage de text box
    Par dolu007 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/11/2006, 00h03
  5. Lien en entre listes déroulantes et affichage d'Etat
    Par Sofie109 dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2006, 15h08

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