Partage
  • Partager sur Facebook
  • Partager sur Twitter

liste déroulante des données stockées dans un BDD

Sujet résolu
    20 septembre 2021 à 8:25:50

    Bonjour tout le monde,

    J'ai vraiment besoin d'aide, j'utilise cakePHP pour faire une liste déroulante avec des données qui sont stockées dans ma base de données, mais le problème c'est que j'arrive pas avoir une liste déroulante normale; Au lieu d'avoir une seule liste pour toute les données j'ai autant de liste que de données (c'est à dire chaque données est dans sa propre liste).

    Voici mon code :

    <pre class="brush: php;"> 

    <?php if(!empty($historyList)) : ?>

                      <?php foreach ($historyList as $key => $historyData) : ?>

                        <?php if ($historyData['DATA_BASE_NAME'] == 'FACTORY_CODE' and $historyData['ID_DATA'] == $mold['REF_MOULE']) :  ?>

                          <?php  $liste = $historyData['NEW_VALUE']   ?>

                                <td class="mdl-data-table__cell--non-numeric middle"><select>                

                          <option value="<?= $historyData['ID_DATA'] ?>"><?php echo $liste ?></option>

                          </select></td>

                          <?php endif; ?>

                          <?php endforeach; ?>

                          <?php else: ?>

                          <p>Aucune donnée récupérée.</p>

                          <?php endif; ?>

    </pre>



    -
    Edité par AdamaAichaNdiaye 20 septembre 2021 à 14:12:38

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2021 à 8:42:30

      Bonjour,

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        20 septembre 2021 à 11:29:44

        Il faut mettre les td + select hors boucle (foreach), pas dedans.

        cakePHP n'emploie pas un système de templates ? Parce que, là, il n'y a pas de htmlspecialchars, ça pue les XSS ...

        -
        Edité par julp 20 septembre 2021 à 11:31:17

        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2021 à 12:12:54

          Bonjour Julp

          Meci pour ta réponse , mais si je les met hors du foreach je ne récupère qu'une seule valeur (précisément la dernère valeur), les autres valeurs ne s'affichent pas




          julp a écrit:

          Il faut mettre les td + select hors boucle (foreach), pas dedans.

          cakePHP n'emploie pas un système de templates ? Parce que, là, il n'y a pas de htmlspecialchars, ça pue les XSS ...

          -
          Edité par julp il y a 38 minutes



          • Partager sur Facebook
          • Partager sur Twitter
            20 septembre 2021 à 13:36:35

            Tu as vu ce que notre estimé modérateur Lamecarlate t'a demandé ?


            On ne voit pas tes images.

            Ton if est foireux ? Si tu fais afficher la source/Ctrl + U, quel est le code HTML généré ?

            -
            Edité par julp 20 septembre 2021 à 13:37:31

            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2021 à 18:39:27

              j'ai l'impression que tu as encore une boucle par dessus le code que tu nous donnes, et que tu n'as qu'une ligne d'infos dans $historyList

              Sinon ta boucle doit parcourir ta liste (foreach($history in $historyList)) et ne contenir que la ligne sur <option> rempli avec $history['ID_DATA'] en value et $history['NEW_VALUE'] dans l'affichage

              • Partager sur Facebook
              • Partager sur Twitter
                21 septembre 2021 à 11:25:36

                          <tbody id="content">
                            <!-- Affichage de chaque moule -->
                            <?php $i = 1 ?>
                            <?php foreach ($moldList as $id => $mold) : ?>
                              <tr>
                                <!-- Affichage de chaque ligne de données des moules -->
                                <?php foreach ($dataRule as $dataBaseName => $rule) : ?>
                                  <?php if (isset($rule['primary'])) : ?>
                                    <?php switch ($dataBaseName): default: ?>
                                      
                                        <td data-id="<?= $mold[$dataBaseName] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand">
                                        <?= isset($mold[$dataBaseName]) ? $mold[$dataBaseName] : $this->getVerifyTranslate($translate, 'NoData') ?></td>
                
                                   
                                    
                                        <?php break; ?>
                
                                      <?php
                                              case 'STATUS': ?>
                                        <?php if ($mold['STATUS_MOULE'] != '') : ?>
                                          <td style="background-color: <?= '#' . $statusList[$mold['STATUS_MOULE']] ?>" data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand">
                                            <span style="color:<?= $toolsController->autoTextColor($statusList[$mold['STATUS_MOULE']]) ?>;"><?= isset($translateStatusList[$mold['STATUS_MOULE']]) ? $this->getVerifyTranslate($translateStatusList, $mold['STATUS_MOULE']) : $mold['STATUS_MOULE'] . 'BAD FORMAT' ?></span>
                                          </td>
                                        <?php else : ?>
                                          <td data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand">
                                            <span><?= $mold[$dataBaseName]  != '' ? $mold[$dataBaseName] : $this->getVerifyTranslate($translate, 'NoData') ?></span>
                                          </td>
                                        <?php endif; ?>
                                        <?php break; ?>
                
                                      <?php
                                              case 'LOCATION_TYPE': ?>
                                        <?php if ($mold[$dataBaseName] != '') : ?>
                                          <td style="background-color: <?= '#' . $locationTypeList[$mold[$dataBaseName]] ?>" data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand">
                                            <span style="color:<?= $toolsController->autoTextColor($locationTypeList[$mold[$dataBaseName]]) ?>;"><?= $this->getVerifyTranslate($translateLocationTypeList, $mold[$dataBaseName]) ?></span>
                                          </td>
                                        <?php else : ?>
                                          <td data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand">
                                            <span><?= $mold[$dataBaseName]  != '' ? $mold[$dataBaseName] : $this->getVerifyTranslate($translate, 'NoData') ?></span>
                                          </td>
                                        <?php endif; ?>
                                        <?php break; ?>
                
                                      <?php
                                              case 'CLOGGED_HOLES': ?>
                                        <td data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand"><?= $mold[$dataBaseName] == 'Y' ? $this->getVerifyTranslate($translate, 'cloggedHolesOK') : $this->getVerifyTranslate($translate, 'cloggedHolesNO') ?></td>
                                        <?php break; ?>
                
                                      <?php
                                              case 'LAST_RESULT': ?>
                                        <td data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-data-table__cell--non-numeric middle view_one_link cursorHand"><?= isset($mold[$dataBaseName]) ? $this->getVerifyTranslate($translate, $mold[$dataBaseName]) : $this->getVerifyTranslate($translate, 'NoData') ?></td>
                                        <?php break; ?>
                                      <?php endswitch; ?>
                                    <?php endif; ?>
                                  <?php endforeach; ?>
                
                
                          <!----------------------                             End contenue tableau                     ------------------------>
                
                
                 <!-- Test cellule avec liste déroulante >
                                        <td class="mdl-data-table__cell--non-numeric middle "> <select name ="">
                                         <option value="<?= $mold[$dataBaseName] ?>"><?= isset($mold[$dataBaseName]) ? $mold[$dataBaseName] : $this->getVerifyTranslate($translate, 'NoData') ?></option> </select>
                                      </td-->
                
                
                
                                  <!-- Affichage de la barre des actions -->
                                  <td class="mdl-data-table__cell--non-numeric middle">
                                    
                                      <!--code avant : historique du moule -->
                                    <!--  <button id="view_history_button_<?= $i ?>" data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color-text--white view_history_one" style='background-color: #4e94c7;'>
                                        <i class="material-icons">history</i>
                                      </button>
                                      <div class="mdl-tooltip" for="view_history_button_<?= $i ?>"><?= $this->getVerifyTranslate($translate, 'viewHistoryToolTip') ?></div> -->
                
                                   <!-- Bouton de visualisation du croquis d'un moule --> 
                                   <button data-id="<?= $mold['FACTORY_CODE'] ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color-text--white view_croquis_one" style='background-color: green';>
                                        <i class="material-icons">assignment</i>
                                      </button>
                                      <div class="mdl-tooltip" for="croquis_button_<?= $i ?>"><?= $this->getVerifyTranslate($translate, 'viewHistoryToolTip') ?></div>
                
                                      <!-- Bouton pour visualier le pf vulcanisation du moule selectionner -->
                                      <button  data-id="<?= $mold['FACTORY_CODE'] ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color-text--white view_pf_vulc" style='background-color: #ffd700';>                                      
                                      <i class="material-icons">ballot</i>
                                      </button> 
                                      <div class="mdl-tooltip" for="pf_button_<?= $i ?>">PF VULCANISATION</div>
                
                                    <!-- Bouton de visualisation d'un moule -->
                                    <button id="view_button_<?= $i ?>" data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--purple-500 mdl-color-text--white view_one">
                                      <i class="material-icons">visibility</i>
                                    </button>
                                    <div class="mdl-tooltip" for="view_button_<?= $i ?>"><?= $this->getVerifyTranslate($translate, 'viewToolTip') ?></div>
                
                                    <!-- Bouton d'édition d'un moule -->
                                    <?php if (frontController::haveRight('edit', 'Mold_App') ) : ?>
                                      <button id="edit_button_<?= $i ?>" data-id="<?= $mold['REF_MOULE'] ?>" name = "<?= $productType ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--blue-500 mdl-color-text--white edit_one">
                                        <i class="material-icons">edit</i>
                                      </button>
                                      <div class="mdl-tooltip" for="edit_button_<?= $i ?>"><?= $this->getVerifyTranslate($translate, 'editToolTip') ?></div>
                                    <?php endif; ?>
                
                                    <!-- Bouton de suppression unitaire d'un moule -->
                                  <!--  <?php if (frontController::haveRight('remove', 'Mold_App'))  : ?>
                                      <button id="remove_button_<?= $i ?>" data-id="<?= $mold['REF_MOULE'] ?>" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon mdl-color--red-500 mdl-color-text--white remove_one">
                                        <i class="material-icons">remove</i>
                                      </button>
                                      <div class="mdl-tooltip" for="remove_button_<?= $i ?>"><?= $this->getVerifyTranslate($translate, 'removeToolTip') ?></div>
                                    <?php endif; ?> -->
                                  </td>
                
                
                
                
                
                                <!-- test liste déroulante pour factory code-->
                                 <!-- test liste déroulante pour factory code-->
                                    <!-- test liste déroulante pour factory code-->
                                   <?php if(!empty($historyList)) : ?>
                                  <?php foreach ($historyList as $key => $historyData) : ?>
                                    <?php if ( $historyData('DATA_BASE_NAME') == 'FACTORY_CODE' and $historyData['ID_DATA'] == $mold['REF_MOULE']) :  ?>
                                      <?php  $liste = $historyData['NEW_VALUE']   ?>
                                            
                                      <td class="mdl-data-table__cell--non-numeric middle"><select name =" " id= "<?= $historyData['ID_DATA'] ?>" >                
                                      <option value=" "><?php echo $liste ?></option>
                                      </select></td>
                
                                   
                                      <?php endif; ?>
                                      <?php endforeach; ?>
                                   
                                      <?php else: ?>
                                      <p>Aucune donnée récupérée.</p>
                                      <?php endif; ?>
                                      <?php error_reporting(0); ?>
                                  
                                    
                                   <!--td style="background-color: <?= '#' . $fcList[$mold['FACTORY_CODE']] ?>" class="mdl-data-table__cell--non-numeric middle "> <select name ="">
                
                                     <option value="<?=$mold['REF_MOULE'] ?>"> <span style="color:#000;"><?= isset($translatefcList[$mold['FACTORY_CODE']]) ? $this->getVerifyTranslate($translatefcList, $mold['FACTORY_CODE']) : $mold['FACTORY_CODE'] . '' ?></span></option>
                                      and $mold['REF_MOULE'] == $historyData['ID_DATA']
                                    </td-->
                
                
                
                                             <!--td  style="background-color: <?= '#' . $fcList[$mold['FACTORY_CODE']] ?>" class="mdl-data-table__cell--non-numeric middle"><select name ="">                   
                                             <option value="<?= $historyData['ID_DATA'] ?>"><span style="color:#000;"><?= $historyData['NEW_VALUE'] ?></span></option></select></td-->
                
                
                
                
                
                
                
                
                
                
                
                              </tr>
                              <?php $i = $i + 1 ?>
                            <?php endforeach; ?>
                                    
                          </tbody>
                        </table>
                      <?php endif; ?>
                    </div>
                  </div>
                C'est ça que j'ai comme sorti : les listes déroulantes ne s'affiche pas comme je veux, normalement pour chaque ligne il doit y avoir une seul liste avec les données à l'intérieur


                Donc j'ai joint une capture d'écran du resultat : c'est à la dernière colonne où se trouve le problème, par exemple si je prend la 2em ligne dernière colonne j'ai trois données qui doivent normalement tous être dans une même liste, mais le soucis c'est que chaque donnée prend sa propre liste


                umfred a écrit:

                j'ai l'impression que tu as encore une boucle par dessus le code que tu nous donnes, et que tu n'as qu'une ligne d'infos dans $historyList

                Sinon ta boucle doit parcourir ta liste (foreach($history in $historyList)) et ne contenir que la ligne sur <option> rempli avec $history['ID_DATA'] en value et $history['NEW_VALUE'] dans l'affichage




                -
                Edité par AdamaAichaNdiaye 21 septembre 2021 à 11:46:07

                • Partager sur Facebook
                • Partager sur Twitter
                  21 septembre 2021 à 13:21:27

                  Donc il faut faire comme on te dit depuis le début, ne mettre que l'option dans la boucle sur historyList et il faudra donner comme id au select la valeur de $modl('REF_MOULE'].

                  Si j'ai pas fait d'erreur de copier/coller, ça doit donner ça:

                                     <!-- test liste déroulante pour factory code-->
                                    <?php if(!empty($historyList)) : ?>
                                        <td class="mdl-data-table__cell--non-numeric middle">
                                        <select name =" " id= "<?= $modl['REF_MOULE'] ?>" >               
                                        <?php foreach ($historyList as $key => $historyData) : ?>
                                            <?php if ( $historyData('DATA_BASE_NAME') == 'FACTORY_CODE' and $historyData['ID_DATA'] == $mold['REF_MOULE']) :  ?>
                                               <?php  $liste = $historyData['NEW_VALUE']   ?>
                                              
                                               <option value=" "><?php echo $liste ?></option>
                                           <?php endif; ?>
                                       <?php endforeach; ?>
                                       </select></td>
                                     
                                     
                                   <?php else: ?>
                                       <p>Aucune donnée récupérée.</p>
                                   <?php endif; ?>



                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 septembre 2021 à 13:45:29

                    umfred a écrit:

                    Donc il faut faire comme on te dit depuis le début, ne mettre que l'option dans la boucle sur historyList et il faudra donner comme id au select la valeur de $modl('REF_MOULE'].

                    Si j'ai pas fait d'erreur de copier/coller, ça doit donner ça:

                                       <!-- test liste déroulante pour factory code-->
                                      <?php if(!empty($historyList)) : ?>
                                          <td class="mdl-data-table__cell--non-numeric middle">
                                          <select name =" " id= "<?= $modl['REF_MOULE'] ?>" >               
                                          <?php foreach ($historyList as $key => $historyData) : ?>
                                              <?php if ( $historyData('DATA_BASE_NAME') == 'FACTORY_CODE' and $historyData['ID_DATA'] == $mold['REF_MOULE']) :  ?>
                                                 <?php  $liste = $historyData['NEW_VALUE']   ?>
                                                
                                                 <option value=" "><?php echo $liste ?></option>
                                             <?php endif; ?>
                                         <?php endforeach; ?>
                                         </select></td>
                                       
                                       
                                     <?php else: ?>
                                         <p>Aucune donnée récupérée.</p>
                                     <?php endif; ?>



                    Merci beaucoup ça fonctionne bien. Merci encore pour votre aide

                    • Partager sur Facebook
                    • Partager sur Twitter

                    liste déroulante des données stockées dans un BDD

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown