Aide développement application - PHP/MySQL

Outils de gestion de demandes de corrections

a marqué ce sujet comme résolu.

Bonjour,

Je suis novice en programmation et me forme via les tutos en lignes. Je souhaite développer une application web qui permettra d’analyser des bases de données projet pour éditer des demandes de correction ou queries (données manquantes et discordantes).

1. Paramétrage de l’outil

Les requêtes permettant de générer les queries seront automatisées à l’aide d’un fichier de paramétrage excel. Ce fichier sera uploadé par l’utilisateur pour mettre à jour les définitions des requêtes.

2. Mise à jour de la base de données projet

L’utilisateur pourra uploader une base de données projet pour mettre à jour les queries. Les queries générées seront stockées dans une base de données MySQL. L’utilisateur pourra afficher toutes les queries et naviguer par pages et par filtres. J’affiche donc mes queries dans un tableau en utilisant PHP. J’utilise une pagination pour naviguer (tuto de Ymox sur le site Zeste de savoir). Je voudrais également que l’utilisateur puisse filtrer ses données un peu à la manière d’excel. C’est pour cela que je me suis intéressé à JQUery qui semblait permettre de le faire simplement mais la mise en forme m’a paru un peu compliqué pour arriver au résultat que je souhaite. Enfin, l’utilisateur pourra imprimer les queries (impression prenant en compte les filtres appliqués par l’utilisateur) ce qui génèrera également un fichier pdf ou excel qui sera automatiquement archivé dans l’outil.

3. Traitement des queries

Les queries seront analysées et les corrections seront apportées dans la base de données projet. Ensuite, l’utilisateur devra pouvoir (1) apporter des commentaires pour chaque query et (2) désactiver certaines queries. Cela nécessite donc de saisir dans la base de données. J’aimerais que l’utiisateur puisse le faire via la même interface que celle ayant permis d’afficher les queries.

Voilà globalement l’outil dans sa version basique. A ces fonctionnalités, il faut ajouter un module de connexion sécurisé (administration des utilisateurs via PHP/MYSQL).

J’ai donc commencé par l’affichage des queries car cela me semblait plus simple et permettant de développer les premières interfaces utilisateur de l’outil. Mon application est connectée à une base de données MySQL que j’administre à l’aide de PhpMyAdmin. Je n’ai pour le moment qu’une seule table qui me sert à développer les interfaces d’affichage. J’ai commencé la programmation sur VBA/Access. J’ai donc développé un outil sous access qui me permet de faire ce que j’ai décrit plus haut.

Est-ce que quelqu’un pourrait m’aider progressivement à développer cette application ? Actuellement, je bloque sur le filtres à l’affichage.

d’avance merci,

Bonjour,

Je pense avoir compris ce que tu souhaitais faire. Je pense que pour avoir plus d’aide de la communauté, tu devrais davantage décrire le problème que tu as. En fait, tu fais tenir ce problème en moins de dix mots.

Actuellement, je bloque sur le filtres à l’affichage.

LE CARROU

Qu’est-ce qui te bloques concernant le filtrage ?

Bonjour Helmasaur, moins de dix mots… dur ! je me connecte et j’arrive pour la première fois sur ma page 1 demande_de_correction_page?page=1 (cf capture 1)Image utilisateur Sur cette page 1, je peux naviguer de page en page via les liens et çà fonctionne.

Ensuite, j’ai mis des filtres sur 2 des variables de mon tableau (Patient et Fiche), qui me redirige sur une autre page (demande_de_correction_page_filtres.php).

Une fois sur cette page_filtres, çà se complique car mes liens de navigations ne fonctionnent plus et j’obtient le message d’erreur ci dessous Image utilisateur

Alors je comprends mes variable de navigation par page ne sont plus définies et je bloque sur l’algo…

désolé, çà fait plus de 10 mots mais je pense que çà précise bien le problème

code de ma page 1 demande_de_corrections_page

  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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>
        
        <!--début du bloc page-->
        <div id="page">

            <!-- En-tête -->
            <div class="element_page"> 
                <?php include("entete.php"); ?>
            </div>

            <!-- Le corps --> 
            <div class="element_page">
                <div id="corps">
                    
                    <?php include("menus.php"); ?>
                    <!--Tableau avec le contenu de la table GBD_DAT-->
                                
                    <div id='element_tableau'>
                      <div id="tableau">

                          <?php

                          //*******************************************************************
                          //affichage page par page tutoriel Ymox sur le site Zeste de Savoir
                          //https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/

                          //*******************************************************************
                          

                          //*Connexion à la base de données
                          //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                          try
                          {
                          // On se connecte à MySQL
                          $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                          }
                          catch(Exception $e)
                          {
                          // En cas d'erreur, on affiche un message et on arrête tout
                          die('Erreur : '.$e->getMessage());
                          }

                          $limite = 15;
                          $page = (!empty($_GET['page']) ? $_GET['page'] : 1);
                          $debut = ($page - 1) * $limite;

                          // Partie "Requête"
                          /* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
                          /*sans tenir compte du critère limit*/
                          $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat` LIMIT :limite OFFSET :debut';
                          $query = ($sql);
                          /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                          $query = $bdd->prepare($query);
                          /* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
                          $query->bindValue(
                          'limite',         // Le marqueur est nommé « limite »
                          $limite,         // Il doit prendre la valeur de la variable $limite
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );
                          $query->bindValue(
                          'debut',         // Le marqueur est nommé « début »
                          $debut,         // Il doit prendre la valeur de la variable $debut
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );

                          /* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
                          $resultSet = $query->execute();

                          /* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
                          * faut pas oublier qu'on ne récupère pas directement le nombre.
                          * De plus, comme la requête ne contient aucune donnée client pour fonctionner,
                          * on peut l'exécuter ainsi directement */
                          $resultFoundRows = $bdd->query('SELECT found_rows()');
                          /* On doit extraire le nombre du jeu de résultat */
                          $nombredElementsTotal = $resultFoundRows->fetchColumn();

                          // début du tableau
                          echo '<table>'."\n";
                          // première ligne on affiche les titres prénom et surnom dans 2 colonnes
                          echo '<tr class="class01">';
                          echo '<td>#ID</td>';
                          echo '<td>Patient</td>';
                          echo '<td>Fiche</td>';
                          echo '<td>Question</td>';
                          echo '<td>Description</td>';
                          echo '<td>Details</td>';
                          echo '<td>Corrections</td>';
                          echo '<td>NR</td>';
                          echo '<td>Commentaires</td>';
                          echo '</tr>'."\n";

                          // Partie "Boucle"
                          // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
                          while($element= $query -> fetch()) {
                          echo '<tr class="class02">';
                          echo '<td class="ID">'.$element['id'].'</td>';
                          echo '<td class="Patient">'.$element['pat'].'</td>';
                          echo '<td class="Fiche">'.$element['fic'].'</td>';
                          echo '<td class="Question">'.$element['que'].'</td>';
                          echo '<td class="Description">'.$element['des'].'</td>';
                          echo '<td class="Details">'.$element['det'].'</td>';
                          echo '<td class="Correction">'.$element['cor'].'</td>';
                          echo '<td class="NR">'.$element['non_rec'].'</td>';
                          echo '<td class="Commentaires">'.$element['com'].'</td>';
                          echo '</tr>'."\n";
                          }
                          echo '</table>'."\n";
                          // fin du tableau.

                          // on libère le résultat
                          //unset($resultSet);
                          
                          ?>

                      <!--fin du bloc tableau-->  
                      </div>
                          
                      <?php
                      $query->closeCursor();
                      ?>

                    <!--fin du bloc element_tableau-->
                    </div>

                <!--fin du bloc corps-->
                </div>

            <!--fin du bloc element_page correspondant au CORPS-->
            </div>

            <div class="element_page">
              <!--// Partie "Filtres"-->
              <div id='filtres'>
                  <form action="demande_de_corrections_page_filtres.php" method="post">
                    <select onselect="this.form.submit()" name="patient" id="patient">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql); 
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['pat'];?>"><?php echo $donnees['pat'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <select onselect="this.form.submit()" name="fiche" id="fiche">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                  <input type="submit" value="Valider" />                             
                  </form> 
              </div>

               <!--// Partie "Liens"-->
              
              <div id='liens'>
                  <?php
                  /* On calcule le nombre de pages */
                  $nombreDePages = ceil($nombredElementsTotal / $limite);

                  /* Si on est sur la première page, on n'a pas besoin d'afficher de lien
                  * vers la précédente. On va donc l'afficher que si on est sur une autre
                  * page que la première */
                  if ($page > 1):
                  ?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
                  endif;

                  /* On va effectuer une boucle autant de fois que l'on a de pages */
                  for ($i = 1; $i <= $nombreDePages; $i++):
                  ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
                  endfor;

                  /* Avec le nombre total de pages, on peut aussi masquer le lien
                  * vers la page suivante quand on est sur la dernière */
                  if ($page < $nombreDePages):
                  ?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
                  endif;
                  ?>         
              </div> 
          </div>

            <!-- Le pied de page -->
            <div class="element_page"> 
            <div id="pied_de_page"/>
            Pied de page
            <?php include("pied_de_page.php"); ?>
            </div>
            </div> 

        <!--fin du bloc page-->
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <!-- jQuery est inclus ! -->
   <script>

        jQuery(document).ready(function(){
        // Du code en jQuery va pouvoir être tapé ici !
        console.log("jQuery est prêt !");
      });


      

   </script>
    </body>

</html>

code de la page demande_de_correction_page_filtres (lorsque que l’on active les filtres :

  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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>
        
        <!--début du bloc page-->
        <div id="page">

            <!-- En-tête -->
            <div class="element_page"> 
                <?php include("entete.php"); ?>
            </div>

            <!-- Le corps --> 
            <div class="element_page">
                <div id="corps">
                    
                    <?php include("menus.php"); ?>
                    <!--Tableau avec le contenu de la table GBD_DAT-->
                                
                    <div id='element_tableau'>
                      <div id="tableau">

                          <?php

                          //*******************************************************************
                          //affichage page par page tutoriel Ymox sur le site Zeste de Savoir
                          //https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/

                          //*******************************************************************
                          

                          //*Connexion à la base de données
                          //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                          try
                          {
                          // On se connecte à MySQL
                          $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                          }
                          catch(Exception $e)
                          {
                          // En cas d'erreur, on affiche un message et on arrête tout
                          die('Erreur : '.$e->getMessage());
                          }

                          $limite = 5;
                          $page = (!empty($_GET['page']) ? $_GET['page'] : 1);
                          $debut = ($page - 1) * $limite;
                            if(isset($patient) && isset($fiche))  // si les variables $patient et $fiche sont vides (première visite sur la page)
                            {
                                $patient = $_SESSION['patient'];   // on récupère les valeurs stockées en $_SESSION
                                $fiche = $_SESSION['fiche'];                                
                            }
                            if(!isset($patient) && !isset($fiche))  // si les valeurs variables $patient et $fiche ne sont pas vides (càd qu'on est déjà sur la page)  
                            {
                                $patient = $_POST['patient'];      // on récupère les valeurs appliquées sur les filtres pour n'afficher que les données filtrées
                                $fiche = $_POST['fiche'];
                            }

                          // Partie "Requête"
                          /* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
                          /*sans tenir compte du critère limit*/
                          $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat` WHERE pat = :patient AND fic = :fiche LIMIT :limite OFFSET :debut';
                          $query = ($sql);
                          /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                          $query = $bdd->prepare($query);
                          /* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
                          $query->bindValue(
                                              'patient',         // Le marqueur est nommé « patient »
                                              $patient,         // Il doit prendre la valeur de la variable $debut
                                              PDO::PARAM_STR   // Cette valeur est de type texte
                                              );
                          $query->bindValue(
                                              'fiche',         // Le marqueur est nommé « fiche »
                                              $fiche,         // Il doit prendre la valeur de la variable $debut
                                              PDO::PARAM_STR   // Cette valeur est de type texte
                                              );
                          $query->bindValue(
                                              'limite',         // Le marqueur est nommé « limite »
                                              $limite,         // Il doit prendre la valeur de la variable $limite
                                              PDO::PARAM_INT   // Cette valeur est de type entier
                                              );
                          $query->bindValue(
                                              'debut',         // Le marqueur est nommé « début »
                                              $debut,         // Il doit prendre la valeur de la variable $debut
                                              PDO::PARAM_INT   // Cette valeur est de type entier
                                              );

                          /* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
                          $resultSet = $query->execute();

                          /* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
                          * faut pas oublier qu'on ne récupère pas directement le nombre.
                          * De plus, comme la requête ne contient aucune donnée client pour fonctionner,
                          * on peut l'exécuter ainsi directement */
                          $resultFoundRows = $bdd->query('SELECT found_rows()');
                          /* On doit extraire le nombre du jeu de résultat */
                          $nombredElementsTotal = $resultFoundRows->fetchColumn();

                          // début du tableau
                          echo '<table>'."\n";
                          // première ligne on affiche les titres prénom et surnom dans 2 colonnes
                          echo '<tr class="class01">';
                          echo '<td>#ID</td>';
                          echo '<td>Patient</td>';
                          echo '<td>Fiche</td>';
                          echo '<td>Question</td>';
                          echo '<td>Description</td>';
                          echo '<td>Details</td>';
                          echo '<td>Corrections</td>';
                          echo '<td>NR</td>';
                          echo '<td>Commentaires</td>';
                          echo '</tr>'."\n";

                          // Partie "Boucle"
                          // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
                          while($element= $query -> fetch()) {
                          echo '<tr class="class02">';
                          echo '<td class="ID">'.$element['id'].'</td>';
                          echo '<td class="Patient">'.$element['pat'].'</td>';
                          echo '<td class="Fiche">'.$element['fic'].'</td>';
                          echo '<td class="Question">'.$element['que'].'</td>';
                          echo '<td class="Description">'.$element['des'].'</td>';
                          echo '<td class="Details">'.$element['det'].'</td>';
                          echo '<td class="Correction">'.$element['cor'].'</td>';
                          echo '<td class="NR">'.$element['non_rec'].'</td>';
                          echo '<td class="Commentaires">'.$element['com'].'</td>';
                          echo '</tr>'."\n";
                          }
                          echo '</table>'."\n";
                          // fin du tableau.

                          // on libère le résultat
                          //unset($resultSet);
                          
                          ?>

                      <!--fin du bloc tableau-->  
                      </div>
                          
                      <?php
                      $query->closeCursor();
                      ?>

                    <!--fin du bloc element_tableau-->
                    </div>

                <!--fin du bloc corps-->
                </div>

            <!--fin du bloc element_page correspondant au CORPS-->
            </div>

            <div class="element_page">
              <!--// Partie "Filtres"-->
              <div id='filtres'>
                  <form action="demande_de_corrections_page_filtres.php" method="post">
                  <select onselect="this.form.submit()" name="patient" id="patient">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql); 
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['pat'];?>"><?php echo $donnees['pat'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <select onselect="this.form.submit()" name="fiche" id="fiche">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                  <input type="submit" value="Valider" />                             
                  </form> 
              </div>

               <!--// Partie "Liens"-->
              
              <div id='liens'>
                  <?php
                  /* On calcule le nombre de pages */
                  $nombreDePages = ceil($nombredElementsTotal / $limite);

                  /* Si on est sur la première page, on n'a pas besoin d'afficher de lien
                  * vers la précédente. On va donc l'afficher que si on est sur une autre
                  * page que la première */
                  if ($page > 1):
                  ?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
                  endif;

                  /* On va effectuer une boucle autant de fois que l'on a de pages */
                  for ($i = 1; $i <= $nombreDePages; $i++):
                  ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
                  endfor;

                  /* Avec le nombre total de pages, on peut aussi masquer le lien
                  * vers la page suivante quand on est sur la dernière */
                  if ($page < $nombreDePages):
                  ?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
                  endif;
                  ?>         
              </div> 
          </div>

            <!-- Le pied de page -->
            <div class="element_page"> 
            <div id="pied_de_page"/>
            Pied de page
            <?php include("pied_de_page.php"); ?>
            </div>
            </div> 

        <!--fin du bloc page-->
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <!-- jQuery est inclus ! -->
   <script>

        jQuery(document).ready(function(){
        // Du code en jQuery va pouvoir être tapé ici !
        console.log("jQuery est prêt !");
      });


      

   </script>
    </body>

</html>

Modération : ajout de balises « secret ».

+0 -0

Je pense que pour avoir plus d’aide de la communauté, tu devrais davantage décrire le problème que tu as. En fait, tu fais tenir ce problème en moins de dix mots.

Helmasaur

En fait c’est parce qu’il ne souhaite pas résoudre ce problème en particulier, ce qu’il souhaite c’est recruter un tuteur qui effectue un suivi de projet. (du coup le sujet a peut-être plus sa place dans le forum "vos projets")

Il a déjà créé ce topic dans les forums d’OC, où son premier post était un peu maladroit mais laisse apparaître quelques autres informations, notamment qu’il est en reconversion professionnelle.
De ce que j’ai cru comprendre, il recherche quelqu’un qui soit capable de : lui valider des algos, le renseigner sur les technos disponibles et leurs utilités, lui parler des bonnes pratiques et l’aider à mettre en place une architecture logicielle

PS : Grillé, on est parti sur le problème du filtre, mais je poste quand même :D

+0 -0

Je ne reprochais pas du tout cette phrase. Je faisais la comparaison avec le descriptif complet du projet. Il est par contre possible de ne pas avoir bien compris la demande de ton sujet. Je ne sais pas si tu cherches à résoudre ton problème de filtrage ou si tu souhaites recruter quelqu’un pour t’aider.

Je n’ai pas le temps de lire tout le code en ce moment même. Je le ferai ce soir, en espérant l’interventions de d’autres personnes.

EDIT : je ne suis pas le seul ayant ce compréhension ambigüe.

merci

oui, on peut dire que j’essaie de "recruter un coach" si ma demande est peu précise c’est que je me doutais qu’elle serait peut-être mal interprétée si je mettais le détail du projet

et j’avance petit à petit et là ou je bloque en ce moment ce sont les filtres… mais ma demande est donc plus globale sur le suivi de mon projet pour m’aider à partir sur les bonnes pistes de développement je n’attendant pas de quelqu’un qu’il me fasse le code car je veux apprendre

merci de prendre le temps d’y jeter un œil ce soir… d’ici là j’essaie de comprendre mon erreur plus précisément

Salut !

La méthode pour le formulaire est POST. Soit on adapte la pagination pour utiliser POST aussi, mais c’est pas super courant, soit on adapte ton formulaire de filtre pour qu’il utilise GET.

Pour cette dernière possibilité, il faut que dans les liens vers les autres pages, tu aies les valeurs filtres s’il y en a, d’où http_build_query(), fonction à laquelle il suffira de passer les valeurs de $_GET après éventuelle modification (notamment pour le numéro de page). Normalement pour le formulaire, pas grand-chose à modifier sinon le verbe.

Si jamais, pour avoir la coloration syntaxique du PHP et du HTML, c’est html+php après ```.

Je te propose d’éditer ton message pour séparer les deux codes que tu nous as fourni (un des ``` se retrouve en fin de message, on a les deux codes en un et ce dernier ``` qui est ésseulé), mettre la bonne coloration syntaxique et éventuellement englober les deux blocs séparément dans un [[secret]] (sélectionne un bloc de code, va sur le bouton ⓘ "Blocs spéciaux" puis clique sur le cadenas).

+0 -0

sur la page demande_de_correction_page à la première visite, les n=31 enregistrements de ma table s’affichent si je filtre sur ’CINT003’ et ’CRF004’ je n’ai plus que 19 enregistrements (2 pages) lorsque je clique sur suivant, je veux donc passer en paramètre de ma requête \$sql les parmètres suivants :

1
2
3
4
pat='CINT003'
fic='CRF004'
limite=15
debut=15

donc si j’ai bien saisie ce que tu m’as dit, il faut que je transmette entre mes pages demande_de_corrections_page et demande_de_corrections_page_filtres par methode GET $_GET['patient'] et $_GET['fiche'] plutôt que par méthode POST ; j’ai corrigé en ce sens

mes variables passent bien dans l’url (http://localhost/mereva_dms/demande_de_corrections_page_filtres.php?patient=CINT003&fiche=CRF004) le calcul du nombre d’éléments et du nombre de page après filtrage est pris en compte également (2 pages)

ensuite, sur ma page filtrées demande_de_corrections_page_filtres, lorsque je clique sur le lien suivant ou précédent, il faut que je transmette les valeurs des filtres avec la méthode http_build_query() ; j’ai corrigé en ce sens également $parametres = ['patient'=>$_GET['patient'], 'fiche'=>$_GET['fiche']]; <a href="?page=<?php echo $page + 1 .http_build_query($parametres); ?>">Suivante</a>

mais j’ai du louper un truc car j’ai toujours la variable patient non définie lorsque je clique sur suivant lorsque je regarde mon adresse url (http://localhost/mereva_dms/demande_de_corrections_page_filtres.php?page=2patient=CINT003&fiche=CRF004) je crois qu’il manque un & entre page=2 et patient=CINT003 ; j’ai essayé de corriger en ajoutant &amp; mais j’ai un problème de syntaxe qu’il faut que je corrige

PS : j’ai essayé d’éditer le code comme tu le proposes mais j’ai pas l’impression que çà ait changé quelque chose…

Code demande_de_correction_page :

  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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>
        
        <!--début du bloc page-->
        <div id="page">

            <!-- En-tête -->
            <div class="element_page"> 
                <?php include("entete.php"); ?>
            </div>

            <!-- Le corps --> 
            <div class="element_page">
                <div id="corps">
                    
                    <?php include("menus.php"); ?>
                    <!--Tableau avec le contenu de la table GBD_DAT-->
                                
                    <div id='element_tableau'>
                      <div id="tableau">

                          <?php

                          //*******************************************************************
                          //affichage page par page tutoriel Ymox sur le site Zeste de Savoir
                          //https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/

                          //*******************************************************************
                          

                          //*Connexion à la base de données
                          //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                          try
                          {
                          // On se connecte à MySQL
                          $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                          }
                          catch(Exception $e)
                          {
                          // En cas d'erreur, on affiche un message et on arrête tout
                          die('Erreur : '.$e->getMessage());
                          }

                          $limite = 15;
                          $page = (!empty($_GET['page']) ? $_GET['page'] : 1);
                          $debut = ($page - 1) * $limite;


                          // Partie "Requête"
                          /* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
                          /*sans tenir compte du critère limit*/
                          $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat` LIMIT :limite OFFSET :debut';
                          $query = ($sql);
                          /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                          $query = $bdd->prepare($query);
                          /* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
                          $query->bindValue(
                          'limite',         // Le marqueur est nommé « limite »
                          $limite,         // Il doit prendre la valeur de la variable $limite
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );
                          $query->bindValue(
                          'debut',         // Le marqueur est nommé « début »
                          $debut,         // Il doit prendre la valeur de la variable $debut
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );

                          /* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
                          $resultSet = $query->execute();

                          /* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
                          * faut pas oublier qu'on ne récupère pas directement le nombre.
                          * De plus, comme la requête ne contient aucune donnée client pour fonctionner,
                          * on peut l'exécuter ainsi directement */
                          $resultFoundRows = $bdd->query('SELECT found_rows()');
                          /* On doit extraire le nombre du jeu de résultat */
                          $nombredElementsTotal = $resultFoundRows->fetchColumn();

                          // début du tableau
                          echo '<table>'."\n";
                          // première ligne on affiche les titres prénom et surnom dans 2 colonnes
                          echo '<tr class="class01">';
                          echo '<td>#ID</td>';
                          echo '<td>Patient</td>';
                          echo '<td>Fiche</td>';
                          echo '<td>Question</td>';
                          echo '<td>Description</td>';
                          echo '<td>Details</td>';
                          echo '<td>Corrections</td>';
                          echo '<td>NR</td>';
                          echo '<td>Commentaires</td>';
                          echo '</tr>'."\n";

                          // Partie "Boucle"
                          // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
                          while($element= $query -> fetch()) {
                          echo '<tr class="class02">';
                          echo '<td class="ID">'.$element['id'].'</td>';
                          echo '<td class="Patient">'.$element['pat'].'</td>';
                          echo '<td class="Fiche">'.$element['fic'].'</td>';
                          echo '<td class="Question">'.$element['que'].'</td>';
                          echo '<td class="Description">'.$element['des'].'</td>';
                          echo '<td class="Details">'.$element['det'].'</td>';
                          echo '<td class="Correction">'.$element['cor'].'</td>';
                          echo '<td class="NR">'.$element['non_rec'].'</td>';
                          echo '<td class="Commentaires">'.$element['com'].'</td>';
                          echo '</tr>'."\n";
                          }
                          echo '</table>'."\n";
                          // fin du tableau.

                          // on libère le résultat
                          //unset($resultSet);
                          
                          ?>

                      <!--fin du bloc tableau-->  
                      </div>
                          
                      <?php
                      $query->closeCursor();
                      ?>

                    <!--fin du bloc element_tableau-->
                    </div>

                <!--fin du bloc corps-->
                </div>

            <!--fin du bloc element_page correspondant au CORPS-->
            </div>

            <div class="element_page">
              <!--// Partie "Filtres"-->
              <div id='filtres'>
                  <form action="demande_de_corrections_page_filtres.php" method="get">
                    <select onselect="this.form.submit()" name="patient" id="patient">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql); 
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['pat'];?>"><?php echo $donnees['pat'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <select onselect="this.form.submit()" name="fiche" id="fiche">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                  <input type="submit" value="Valider" />                             
                  </form> 
              </div>

               <!--// Partie "Liens"-->
              
              <div id='liens'>

                  <?php
                  /* On calcule le nombre de pages */
                  $nombreDePages = ceil($nombredElementsTotal / $limite);



                  /* Si on est sur la première page, on n'a pas besoin d'afficher de lien
                  * vers la précédente. On va donc l'afficher que si on est sur une autre
                  * page que la première */
                  if ($page > 1):
                  ?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
                  endif;

                  /* On va effectuer une boucle autant de fois que l'on a de pages */
                  for ($i = 1; $i <= $nombreDePages; $i++):
                  ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
                  endfor;

                  /* Avec le nombre total de pages, on peut aussi masquer le lien
                  * vers la page suivante quand on est sur la dernière */
                  if ($page < $nombreDePages):
                  ?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
                  endif;
                  ?>         
              </div> 
          </div>

            <!-- Le pied de page -->
            <div class="element_page"> 
            <div id="pied_de_page"/>
            Pied de page
            <?php include("pied_de_page.php"); ?>
            </div>
            </div> 

        <!--fin du bloc page-->
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <!-- jQuery est inclus ! -->
   <script>

        jQuery(document).ready(function(){
        // Du code en jQuery va pouvoir être tapé ici !
        console.log("jQuery est prêt !");
      });


      

   </script>
    </body>

</html>

|

Code demande_de_correction_page_filtres :

  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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>
        
        <!--début du bloc page-->
        <div id="page">

            <!-- En-tête -->
            <div class="element_page"> 
                <?php include("entete.php"); ?>
            </div>

            <!-- Le corps --> 
            <div class="element_page">
                <div id="corps">
                    
                    <?php include("menus.php"); ?>
                    <!--Tableau avec le contenu de la table GBD_DAT-->
                                
                    <div id='element_tableau'>
                      <div id="tableau">

                          <?php

                          //*******************************************************************
                          //affichage page par page tutoriel Ymox sur le site Zeste de Savoir
                          //https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/

                          //*******************************************************************
                          

                          //*Connexion à la base de données
                          //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                          try
                          {
                          // On se connecte à MySQL
                          $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                          }
                          catch(Exception $e)
                          {
                          // En cas d'erreur, on affiche un message et on arrête tout
                          die('Erreur : '.$e->getMessage());
                          }

                          $limite = 15;
                          $page = (!empty($_GET['page']) ? $_GET['page'] : 1);
                          $debut = ($page - 1) * $limite;


                          // Partie "Requête"
                          /* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
                          /*sans tenir compte du critère limit*/
                          $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat` LIMIT :limite OFFSET :debut';
                          $query = ($sql);
                          /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
                          $query = $bdd->prepare($query);
                          /* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
                          $query->bindValue(
                          'limite',         // Le marqueur est nommé « limite »
                          $limite,         // Il doit prendre la valeur de la variable $limite
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );
                          $query->bindValue(
                          'debut',         // Le marqueur est nommé « début »
                          $debut,         // Il doit prendre la valeur de la variable $debut
                          PDO::PARAM_INT   // Cette valeur est de type entier
                          );

                          /* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
                          $resultSet = $query->execute();

                          /* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
                          * faut pas oublier qu'on ne récupère pas directement le nombre.
                          * De plus, comme la requête ne contient aucune donnée client pour fonctionner,
                          * on peut l'exécuter ainsi directement */
                          $resultFoundRows = $bdd->query('SELECT found_rows()');
                          /* On doit extraire le nombre du jeu de résultat */
                          $nombredElementsTotal = $resultFoundRows->fetchColumn();

                          // début du tableau
                          echo '<table>'."\n";
                          // première ligne on affiche les titres prénom et surnom dans 2 colonnes
                          echo '<tr class="class01">';
                          echo '<td>#ID</td>';
                          echo '<td>Patient</td>';
                          echo '<td>Fiche</td>';
                          echo '<td>Question</td>';
                          echo '<td>Description</td>';
                          echo '<td>Details</td>';
                          echo '<td>Corrections</td>';
                          echo '<td>NR</td>';
                          echo '<td>Commentaires</td>';
                          echo '</tr>'."\n";

                          // Partie "Boucle"
                          // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
                          while($element= $query -> fetch()) {
                          echo '<tr class="class02">';
                          echo '<td class="ID">'.$element['id'].'</td>';
                          echo '<td class="Patient">'.$element['pat'].'</td>';
                          echo '<td class="Fiche">'.$element['fic'].'</td>';
                          echo '<td class="Question">'.$element['que'].'</td>';
                          echo '<td class="Description">'.$element['des'].'</td>';
                          echo '<td class="Details">'.$element['det'].'</td>';
                          echo '<td class="Correction">'.$element['cor'].'</td>';
                          echo '<td class="NR">'.$element['non_rec'].'</td>';
                          echo '<td class="Commentaires">'.$element['com'].'</td>';
                          echo '</tr>'."\n";
                          }
                          echo '</table>'."\n";
                          // fin du tableau.

                          // on libère le résultat
                          //unset($resultSet);
                          
                          ?>

                      <!--fin du bloc tableau-->  
                      </div>
                          
                      <?php
                      $query->closeCursor();
                      ?>

                    <!--fin du bloc element_tableau-->
                    </div>

                <!--fin du bloc corps-->
                </div>

            <!--fin du bloc element_page correspondant au CORPS-->
            </div>

            <div class="element_page">
              <!--// Partie "Filtres"-->
              <div id='filtres'>
                  <form action="demande_de_corrections_page_filtres.php" method="get">
                    <select onselect="this.form.submit()" name="patient" id="patient">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql); 
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['pat'];?>"><?php echo $donnees['pat'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <select onselect="this.form.submit()" name="fiche" id="fiche">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                  <input type="submit" value="Valider" />                             
                  </form> 
              </div>

               <!--// Partie "Liens"-->
              
              <div id='liens'>

                  <?php
                  /* On calcule le nombre de pages */
                  $nombreDePages = ceil($nombredElementsTotal / $limite);



                  /* Si on est sur la première page, on n'a pas besoin d'afficher de lien
                  * vers la précédente. On va donc l'afficher que si on est sur une autre
                  * page que la première */
                  if ($page > 1):
                  ?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
                  endif;

                  /* On va effectuer une boucle autant de fois que l'on a de pages */
                  for ($i = 1; $i <= $nombreDePages; $i++):
                  ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
                  endfor;

                  /* Avec le nombre total de pages, on peut aussi masquer le lien
                  * vers la page suivante quand on est sur la dernière */
                  if ($page < $nombreDePages):
                  ?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
                  endif;
                  ?>         
              </div> 
          </div>

            <!-- Le pied de page -->
            <div class="element_page"> 
            <div id="pied_de_page"/>
            Pied de page
            <?php include("pied_de_page.php"); ?>
            </div>
            </div> 

        <!--fin du bloc page-->
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <!-- jQuery est inclus ! -->
   <script>

        jQuery(document).ready(function(){
        // Du code en jQuery va pouvoir être tapé ici !
        console.log("jQuery est prêt !");
      });


      

   </script>
    </body>

</html>

Édit modération : ajout de balise code.

+0 -0

çà y est, j’ai résolu mon problème de syntaxe comme çà

1
2
3
<a href="?page=<?php echo $page + 1 .'&' . http_build_query($parametres) ; ?>">Suivante</a>

`

maintenant, il faut que je gère les cas ou les critères sélectionnés dans les filtres ne retournent aucun résultat de la base car là même si çà ne bug pas, je perd la mise en forme de mon tableau ??

merci à vous !!!

+0 -0

As-tu regardé le code source de la page quand il n’y a aucun résultat et que tu "perds la mise en forme de ton tableau" ?

Dans la plupart des navigateurs sous Windows, le raccourci Ctrl + U permet de voir ça, justement. Cela devrait t’aider à comprendre ce qui cloche.

Edit

Merci Taurre et Gabbro pour le "re-formatage" des messages  :)

+0 -0

Ce qui est normal s’il n’y a aucun résultat, non ? Comment voudrais-tu remplir un tableau avec rien ? ;)

Edit

Je te propose de comparer la première et la dernière version de tes deux messages qui ont du code pour que tu puisses voir comment fonctionne le bloc [[secret]]  ;)

+0 -0

oui, tout à fait :lol: c’est bien ce que je veux, afficher simplement les en-têtes du tableau ce que je ne comprends pas, c’est pourquoi la largeur des colonnes que je fixe en css n’est plus appliquée quand le tableau est vide ? je sais pas si ma question est claire ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte