Page 1 sur 1

Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 10:07
par Invité
Bonjour à tous, je débute en PHP et je souhaiterais mettre en place un système de pagination du résultat de ma requête lorsque ce lui ci est > 5. Je veux afficher simplement 2 liens "précédent et suivant" sous mon dernier résultat lorsque il y en a plus que 5 et ne pas l'afficher ou du moins les désactiver si le nombre de résultat est < 5.
Voici mon code:
<?php require_once('connections/connection.php'); ?>
<?php
mysql_select_db($database_connection, $connection);
$query_Recordset1 = "SELECT DISTINCT constructeur FROM voilier ORDER BY constructeur";
$Recordset1 = mysql_query($query_Recordset1, $connection) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
 
mysql_select_db($database_connection, $connection);
$query_Recordset3 = "SELECT DISTINCT modele FROM voilier ORDER BY modele";
$Recordset3 = mysql_query($query_Recordset3, $connection) or die(mysql_error());
$row_Recordset3 = mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 = mysql_num_rows($Recordset3);
 
$var_constructeur = "tous";
if (isset($_POST['sel_constructeur'])) {
  $var_constructeur = (get_magic_quotes_gpc()) ? $_POST['sel_constructeur'] : addslashes($_POST['sel_constructeur']);
}
$var_modele = "tous";
if (isset($_POST['sel_modele'])) {
  $var_modele = (get_magic_quotes_gpc()) ? $_POST['sel_modele'] : addslashes($_POST['sel_modele']);
}
 
mysql_select_db($database_connection, $connection);
$query_select = "SELECT * FROM voilier" ;
$query_where = " WHERE 1 = 1 ";
if ($var_constructeur <> "tous")
{
   $query_where .= " AND constructeur = '".$var_constructeur."'";
}
 
if ($var_modele <> "tous")
{
   $query_where .= " AND modele = '".$var_modele."'";
}
 
$query_Recordset2 = $query_select.$query_where.$query_order." ORDER BY RAND() ASC LIMIT 5";
$Recordset2 = mysql_query($query_Recordset2, $connection) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
?>
 
 
<body>
   <form action="" method="post" name="filtre" target="_self" id="filtre">
          <table>
            <tr>
              <td>Recherche</td>
            </tr>
            <tr>
              <td>
                Modele:
              </td>
              <td>
                <select name="sel_modele" id="sel_modele">
                  <option value="tous">TOUS</option>
                  <?php do { ?>
                  <option value="<?php echo strtoupper($row_Recordset3['modele']); ?>"><?php echo strtoupper($row_Recordset3['modele']); ?></option>
                  <?php
                  } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3));
                  $rows = mysql_num_rows($Recordset3);
                  if($rows > 0) {
                  mysql_data_seek($Recordset3, 0);
                  $row_Recordset3 = mysql_fetch_assoc($Recordset3);
                  }
                  ?>
                 </select>
               </td>
              </tr>
            <tr>
              <td>
                Chantier:
              </td>
              <td>
                <select name="sel_constructeur" id="sel_constructeur">
                <option value="tous">TOUS</option>
                <?php
                do {  
                ?>
                <option value="<?php echo $row_Recordset1['constructeur']?>"><?php echo $row_Recordset1['constructeur']?></option>
                <?php
                } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
                $rows = mysql_num_rows($Recordset1);
                if($rows > 0) {
                mysql_data_seek($Recordset1, 0);
                $row_Recordset1 = mysql_fetch_assoc($Recordset1);
                }
                ?>
                </select>
                </td>
              </tr>
            <tr>
              <td>                 
                <input type="submit" name="Submit" value="Trouver" > </td>
              </tr>
         </table>
     </form>
          <?php if ($totalRows_Recordset2 > 0) { // Show if recordset not empty ?>
           <?php do { ?>
         <table width="300" border="5px">
             <tr>
                <td>Modèle:
                 <?php echo strtoupper($row_Recordset2['modele']); ?></td>
              </tr>
              <tr>
                <td>Chantier:
                <?php echo $row_Recordset2['constructeur']; ?></td>
              </tr>
           </table>
              <?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?>
              <?php }else{
                echo "Désolé, il n'y a pas de bateau correspondant à votre requête.";
                } ?>
</body>
</html>
<?php
mysql_free_result($Recordset2);
?>
Merci d'avance

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 10:12
par jojolapine
Bonjour,

Voici un tutoriel très bien fait: faq-tutoriels/afficher-des-elements-pag ... t8874.html

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 10:49
par lr44
C'est tout à fait ce que je veux faire, quelqu'un peut il m'aider à intégrer ce code au mien ?
D'avance merci

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 12:10
par Cyrano
C'est tout à fait ce que je veux faire, quelqu'un peut il m'aider à intégrer ce code au mien ?
Il s'agit d'un tutorial, pas d'un code à copier/coller pour intégration : c'est fait pour que tu apprennes à justement ne pas avoir besoin que quelqu'un le fasse à ta place, c'est une aide en soi.

Je te suggère donc de lire le tuto dans ses moindres détails et de revenir si tu butes sur un point particulier que tu ne comprends pas. Ils ne devraient pas être très nombreux.

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 13:29
par lr44
J'ai mis en place le code du tuto que j'ai essayé d'adapter à mon code:
- 1 - Je n'ai pas compris ce que signifiait /* <!&#91;CDATA&#91; */ et /* &#93;&#93;> */
- 2 - La différence avec mon cas perso c'est que je doit paginer le résultat d'une requête générée par mes listes déroulantes
- 3 - Comme j'ai indiqué dans mon premier mail, je suis débutant et j'ai vraiment besoin d'une aide appuyée pour mettre tout ça en place.+

Voici le code adapté

Code : Tout sélectionner

<?php require_once('connections/connection.php'); ?> <?php mysql_select_db($database_connection, $connection); $query_Recordset1 = "SELECT DISTINCT constructeur FROM voilier ORDER BY constructeur"; $Recordset1 = mysql_query($query_Recordset1, $connection) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1); mysql_select_db($database_connection, $connection); $query_Recordset3 = "SELECT DISTINCT modele FROM voilier ORDER BY modele"; $Recordset3 = mysql_query($query_Recordset3, $connection) or die(mysql_error()); $row_Recordset3 = mysql_fetch_assoc($Recordset3); $totalRows_Recordset3 = mysql_num_rows($Recordset3); $var_constructeur = "tous"; if (isset($_POST['sel_constructeur'])) { $var_constructeur = (get_magic_quotes_gpc()) ? $_POST['sel_constructeur'] : addslashes($_POST['sel_constructeur']); } $var_modele = "tous"; if (isset($_POST['sel_modele'])) { $var_modele = (get_magic_quotes_gpc()) ? $_POST['sel_modele'] : addslashes($_POST['sel_modele']); } mysql_select_db($database_connection, $connection); $query_select = "SELECT * FROM voilier" ; $query_where = " WHERE 1 = 1 "; if ($var_constructeur <> "tous") { $query_where .= " AND constructeur = '".$var_constructeur."'"; } if ($var_modele <> "tous") { $query_where .= " AND modele = '".$var_modele."'"; } $query_Recordset2 = $query_select.$query_where.$query_order." ORDER BY RAND() ASC LIMIT 5"; $Recordset2 = mysql_query($query_Recordset2, $connection) or die(mysql_error()); $row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); /* Paramètres de pagination */ $nb_nouv_par_page = 1; /* Nombre de nouvelles qui seront affichées sur chaque page */ $url = "./test.php?page="; /* On détermine quelle est la page qui est actuellement affichée */ $page_en_cours = isset($_GET['constructeur']) ? $_GET['modele']; : 0; $page_affichee = ($page_en_cours + 1); /* Connexion au serveur de base de données */ mysql_select_db($database_connection, $connection); /* Requête pour compter les nouvelles présentes dans notre base de données */ $sql_nb = "SELECT COUNT(*) FROM `voilier`"; /* Exécution de la requête et récupération du résultat */ $resultat_1 = mysql_query($sql_nb); $nb_nouvelles = mysql_result($resultat_1, 0); /* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */ $nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page); /** Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation. Première chose à vérifier : avons-nous plusieurs pages, et au moins une ? */ if($nb_pages > 0) { /* On définit une variable qui contiendra les données de navigation */ $barre_nav = ""; /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */ if($nb_pages > 1) { /** Nous avons plusieurs pages: nous allons afficher successivement les liens vers les pages précédentes s'il y en a, la page en cours et les liens vers les pages suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables sauf pour la page en cours dont nous mettrons le chiffre en gras */ if($page_en_cours > 0) { for($i = 0; $i < $page_en_cours; $i++) { $p = $i + 1; $barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | "; } } /** On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente */ $barre_nav .= "<strong>". $page_affichee ."</strong>"; /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */ if(($page_affichee) < $nb_pages) { /* Il reste encore d'autres pages à afficher */ $nb_suivantes = $nb_pages - ($page_affichee); for($j = ($page_affichee); $j < $nb_pages; $j++) { $p = $j + 1; $barre_nav .= " | <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>"; } } /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */ $page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages."; } else { /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */ $barre_nav .= "page 1/1"; } /** On peut maintenant afficher notre page. On va commencer par récupérer les informations On doit définir à partir de quelle nouvelle on doit récupérer les données dans la clause LIMIT. */ $debut = $page_en_cours * $nb_nouv_par_page; $sql_n = "SELECT constructeur, modele FROM voilier LIMIT ". $debut .", ". $nb_nouv_par_page .";"; $nouvelles = mysql_query($sql_n); ?> ?> <body> <form action="" method="post" name="filtre" target="_self" id="filtre"> <table> <tr> <td>Recherche</td> </tr> <tr> <td> Modele: </td> <td> <select name="sel_modele" id="sel_modele"> <option value="tous">TOUS</option> <?php do { ?> <option value="<?php echo strtoupper($row_Recordset3['modele']); ?>"><?php echo strtoupper($row_Recordset3['modele']); ?></option> <?php } while ($row_Recordset3 = mysql_fetch_assoc($Recordset3)); $rows = mysql_num_rows($Recordset3); if($rows > 0) { mysql_data_seek($Recordset3, 0); $row_Recordset3 = mysql_fetch_assoc($Recordset3); } ?> </select> </td> </tr> <tr> <td> Chantier: </td> <td> <select name="sel_constructeur" id="sel_constructeur"> <option value="tous">TOUS</option> <?php do { ?> <option value="<?php echo $row_Recordset1['constructeur']?>"><?php echo $row_Recordset1['constructeur']?></option> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); $rows = mysql_num_rows($Recordset1); if($rows > 0) { mysql_data_seek($Recordset1, 0); $row_Recordset1 = mysql_fetch_assoc($Recordset1); } ?> </select> </td> </tr> <tr> <td> <input type="submit" name="Submit" value="Trouver" > </td> </tr> </table> </form> <?php if ($totalRows_Recordset2 > 0) { // Show if recordset not empty ?> <?php do { ?> <table width="300" border="5px"> <tr> <td>Modèle: <?php echo strtoupper($row_Recordset2['modele']); ?></td> </tr> <tr> <td>Chantier: <?php echo $row_Recordset2['constructeur']; ?></td> </tr> </table> <?php } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2)); ?> <?php }else{ echo "Désolé, il n'y a pas de bateau correspondant à votre requête."; } ?> <?php echo($barre_nav); ?></p> <?php } else { /** Nous n'avons aucune page, on peut alors afficher un message autre sans devoir nous préoccuper de la navigation */ ?> <h3>Aucune nouvelle n'a encore été publiée à ce jour</h3> <hr /> <?php } ?> </body> </html> <?php mysql_free_result($Recordset2); ?>
Merci

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 13:38
par Cyrano
Tu mets la charrue avant les bœufs.

Pour ton point 1, c'est de la syntaxe XML, et comme le reste du code généré est en XHTML, on est dans du XML. Fais un petit tour des tutos qui existent en nombre sur Internet à propos du X(HT)ML.

Pour le point 2 : attention, soit tu fais du dynamique client/serveur et en fonction du choix dans les listes déroulantes l'affichage sera changé après un rechargement de page, soit tu fais de l'évènementiel et dans ce cas, PHP ne peut pas grand chose pour toi, il faudra te tourner vers le JavaScript et éventuellement AJAX.

Quant à ton point 3, je renouvelle ma suggestion : lis les tutos dans leurs moindres détails, ce qui inclut les commentaires du code parce qu'ils indiquent des éléments qu'il est important de comprendre. Là, tu envoies plus de trois cent lignes de code, ce qui indique que tu n'as pas cerné ton problème avec précision. Prends les choses une par une, tente de comprendre le déroulement logique du code pas à pas, fais-toi des croquis afin de visualiser comment ça fonctionne : là, tu avanceras parce que tu apprendras le pourquoi et le comment. Autrement, tu seras toujours dépendant d'une aide extérieure qui ne sera pas toujours disponible.

J'ajoute enfin que tenter d'intégrer un code tout fait dans du code généré par DreamWeaver est une très très mauvaise méthode d'apprentissage : il serait de loin préférable que tu comprennes au moins le code que tu fais. Sinon, personne ne pourra t'aider à avancer.

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 14:02
par lr44
Je comprends bien, ce que tu veux me dire, et je suis d'accord qu'il faudrait que je parte de zéro pour avoir de bonnes bases, mais malheureusement le temps et les bases me manquent.
je pensais qu'il serait plus simple et rapide de passer par des forums pour améliorer mon formulaire.
Merci quand même

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 14:14
par Cyrano
Tu vas peut-être me trouver sévère, mais tout de même. Il y a deux options.
- Soit tu fais ça pour ton plaisir personnel et dans ce cas, le temps a peu d'importance, prends ton temps, tu y gagneras en efficacité à court terme;
- Soit tu développes dans le cadre d'un emploi correspondant et là je suis tenté de te dire de te dépatouiller tout seul parce que tu as obtenu un poste pour lequel tu n'as pas les qualifications minimum requises, et je n'aurai aucune pitié, il y a déjà quelques années, je cherchais un boulot et je voyais sur ce forum des gens appelant au secours pour résoudre leurs problèmes et ils avaient pourtant été embauchés alors que j'étais largement plus qualifiés qu'eux mais sans emploi et ignoré des recruteurs. Filer des réponses gratuites à un autre qui va en toucher le salaire, désolé, mais j'ai déjà donné.

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 14:29
par lr44
En fait je ne suis pas du tout dans ce métier et je tente simplement d'améliorer le site d'un proche.
Je suis complètement autodidacte et j'ai eu recours à Dreamweaver pour la partie PHP, mais là je ne me sens pas capable d'aller plus loin sans aide extérieure, voilà pourquoi je suis passé par ici.

Re: Système de pagination résultat d'un formulaire

Posté : 26 oct. 2010, 14:56
par Cyrano
Je devrais donc en conclure que tu fais ça à titre bénévole : soit.

Mais garde quand même à l'esprit un élément majeur : DreamWeaver est un excellent outil... à l'usage d'un directeur de projet qui veut monter en vitesse une maquette à peu près fonctionnelle pour une présentation de base à un client. Ce n,est en aucun cas un outil de développement et ça ne doit pas être utilisé comme tel. Le code généré est dégueu, pas optimisé pour ne pas dire pénible à manipuler lorsque vient le temps d'y apporter des modification manuelles.
Donc tu as comme solution très peu de choix.
Le premier, si le développement de sites en PHP te tient à cœur et t'intéresse, on va t'aider à apprendre petit à petit et tu deviendras rapidement suffisament autonome pour être un jour en mesure de venir ici faire du support au lieu de poser des questions, ça, c'est quand même une satisfaction énorme. Soit ça ne t'intéresse quand même pas plus que ça et tu fais ça juste pour faire plaisir à un copain, ben là, désolé, dis a ton copain qu'il serait inspiré de chercher un développeur qui connait bien ça parce que tu vas te vautrer, et si tu le fais quand même, ton copain risque fort de t'en vouloir à mort parce que tu lui auras promis un truc que tu n'es pas en mesure d'assumer : en d'autres termes, tu te discréditerais.

Disons que je vais partir du principe que tu as quand même un intérêt pour la chose, sinon tu ne te serais pas lancé du tout : Mais dans ce cas, dis à ton copain que ce sera peut-être un peu plus long que prévu : respire à fond un grand coup, fais le tour du tuto et apprends : lorsque tu butes sur un détail dont tu n,es pas certain de comprendre la nature, pose une question, il se trouvera toujours quelqu'un ici pour te donner la réponse ou au moins t'aiguiller vers la documentation appropriée. L'idée générale, c'est qu'on ne te donnera pas une réponse toute faite, on va t'apprendre à la trouver toi-même. Ce sera plus satisfaisant pour tout le monde, toi-compris.