Selection par liste deroulante

Résolu
Bonjour,



Je veux répartir mes résultats de requete sur plusieurs pages sur d'autres champs mais dans la même table mysql :
Je ne comprends pas... Pourriez vous m'éclairer ? Merci d'avance.

le premier activé à partir d'un simple lien lien affiche les éléments recherchés et si on vérifie 'echo $max_page' donne le nombre exact de pages nécessaires à la pagination.

Le 2eme activé a partir d'une liste deroulante affiche les éléments recherchés mais donne toujours le chiffre 1 pour le nombre de pages nécessaires à la pagination.

1/

<?php 
 // Numéro de la page à afficher 
$page = 0; 
if(isset($_GET['page'])) { 
    $page = intval($_GET['page']); 
} 
// Nombre de résultats par page 
$nb = 10; 
if(isset($_GET['nb'])) { 
    $nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page 
} 
// Connexion au serveur de base de données 
 include("adm/perlinpinpin.php");  


$result = 'SELECT COUNT(capitale) AS capitale FROM etat WHERE capitale="'.$_GET['capitale'].'"'; 
$query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error()); 
$row = mysql_fetch_row($query); 
$total = $row[0]; 
// Nombre maximum de pages 
$max_pg = ceil($total / $nb); 
echo $max_pg; 

///etc........ 
?> 

2/
 <?php 
 // Numéro de la page à afficher 
$page = 0; 
if(isset($_GET['page'])) { 
    $page = intval($_GET['page']); 
} 
// Nombre de résultats par page 
$nb = 10; 
if(isset($_GET['nb'])) { 
    $nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page 
} 
// Connexion au serveur de base de données 

 include("adm/perlinpinpin.php"); //connection a sdb 

$result = 'SELECT COUNT(lyst) AS lyst FROM etat WHERE pyst="'.$_GET['lyst'].'"'; 
$query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error()); 
$row = mysql_fetch_row($query); 
$total = $row[0]; 
// Nombre maximum de pages 
$max_pg = ceil($total / $nb); 
echo $max_pg; 

///etc........ 
?>

5 réponses

  1. cas 1, par un lien je suppose que tu passes via l'url nb , page ,capitale
    cas 2 comment fais tu pour passer ces valeurs depuis une liste déroulante ?
    et notamment lyst

    et est ce normal: WHERE pyst="'.$_GET['lyst'].'"'; ?
    0
    1. bonsoir,

      Il faut lire « lyst », c'est juste une faute de frappe, sinon ça entrainerait une erreur.
      Absolument, dans le premier cas, je passe mes valeurs via l'URL (ça fonctionne correctement ).
      Dans le 2° cas, celui qui m'intéresse maintenant,je pensais que la valeur correspondant à l'option choisie dans ma liste était prise en compte dans la variable pyst="'.$_GET['lyst'].'" (C'est bien là le problème, le comptage de mes lignes avec COUNT )-

      Dans un 2° temps, je récupère mes elements comme ci-dessous et jusque là, l'affichage des 10 premières fiches souhaitées ci-dessus est pourtant normal.

      //ici je sélectionne les éléments que je souhaite obtenir

      $start = (($page_courante - 1) * $nb); //première fiche
      $result = 'SELECT pays,capitale,image2,population FROM etat WHERE
      lyst="'.$_POST['lyst'].'"
      LIMIT '.$start.','.$nb.'';
      $query = mysql_query($result, $db);

      // extraction des éléments ci-dessus dans le tableau formaté ci-dessous
      $comp=1;
      while($data = mysql_fetch_array($query)){
      //while($data = mysql_query($query)){
      extract ($data);
      $toto =(($page * $nb) + $comp); //n° de comptage dans la page que je souhaite aussi afficher
      echo '<table border=0 width=500 cellpadding=0 cellspacing=0>';
      echo '<tr>';
      echo '<th width="100%" COLSPAN=2>'.$data['pays'].'</th>';
      echo '</tr>';
      echo '<tr>';
      echo '<td width="50%">'.$data['capitale'].'</td>';
      echo '<td width="50%">'$data['image2'].'</td>';
      echo '</tr>';
      echo '<tr>';
      echo '<th width="50%">$toto</th>';
      echo '<th width="50%">'.$data['population'].'</th>';
      echo '</tr>';
      //le "$comp++" ci-dessous pour l'incrémentation des lignes....
      $comp++;
      0
      1. si ton formulaire qui contient la liste déroulante est en method="post",au lieu de :
        $_GET['lyst']
        il faut mettre :
        $_POST['lyst']

        et ta liste doit avoir comme name="lyst"

        de plus:
        while($data = mysql_fetch_array($query)){ 
        //while($data = mysql_query($query)){ 
        // extract ($data); 
        //ne fais pas extract puisque tu utilises plus bas directement $data['.......'] 
        $toto =(($page * $nb) + $comp); //n° de comptage dans la page que je souhaite aussi afficher 
        echo '<table border=0 width=500 cellpadding=0 cellspacing=0>'; 
        echo '<tr>'; 
        echo '<th width="100%" COLSPAN=2>'.$data['pays'].'</th>';  
        
        0
        1. bonjour,

          J'ai bien mis en application les conseils donnés , mais ça n'a rien amené de plus, les articles s'affichant correctement (1ere page).

          Mon problème c'est le comptage de ces articles avec COUNT, objet de mon message primitif (2° cas). Le nombre d'articles trouvés dans la Base de données m'est absolument nécessaire en vue d'une pagination ( le résultat devant être étalé sur plusieurs pages avec 10 articles par page comme indiqué dans code ci-dessous).

          Il semble que la variable « $total » est vide, ce qui voudrait dire que COUNT ne fonctionne pas..... La vérification par « echo $total ; » qui devrait afficher le nombre correspondant, affiche le nombre 11 quel que soit le nombre d'articles trouvés. J'avoue ne pas comprendre car le codification me semble correcte.

          2/
          <?php
          // Numéro de la page à afficher
          $page = 0;
          if(isset($_GET['page'])) {
          $page = intval($_GET['page']);
          }
          // Nombre de résultats par page
          $nb = 10;
          if(isset($_GET['nb'])) {
          $nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page
          }
          // Connexion au serveur de base de données
          include("adm/perlinpinpin.php"); //connection a sdb
          $result = 'SELECT COUNT(lyst) AS lyst FROM etat WHERE lyst="'.$_GET['lyst'].'"';
          $query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error());
          $row = mysql_fetch_row($query);
          $total = $row[0];
          // Nombre maximum de pages
          $max_pg = ceil($total / $nb);
          echo $total;
          ///etc........
          ?>
          0
      2. $result = 'SELECT COUNT(lyst) AS lyst FROM etat WHERE lyst="'.$_GET['lyst'].'"';

        comment ta liste envoie en GET ?

        donnes nous la partie de code de ta liste et de la balise <form

        et aussi avec:
        $result = 'SELECT COUNT(lyst) AS lst FROM etat WHERE lyst="'.$_GET['lyst'].'"';
        $query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error());
        
        $total = mysql_result($query,0); 
        
        0
        1. bonjour

          Toujours aucun changement.

          - extrait du formulaire html :
          <form action=test31.php method=POST>
          <select name=lyst style="background:green; color:#900000">
          <optgroup label="EUROPE">
          <option value="albanie">Albanie</option>
          <option value="allemagne">Allemagne</option>
          <option value="arménie">Arménie</option>
          <option value="autriche">Autriche</option>
          etc............................
          </optgroup>
          </select>
          <input type=submit value=Validez style="background-color:#ff99ff; color:#900000">
          </form>

          extrait du code php correspondant en tenant compte des derniers conseils :

          $result = 'SELECT COUNT(lyst) AS lyst from pays WHERE lyst="'.$_post['lyst'].'"';
          $query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error());
          //$row = mysql_fetch_row($total);
          $total = mysql_result($query,0);
          //$total = $row[0];

          // On calcule le nombre de pages à créer

          $max_pg = ceil($total / $nb);
          echo $total;
          0
      3. $result = 'SELECT COUNT(lyst) AS lyst from pays WHERE lyst="'.$_post['lyst'].'"';

        $_POST doit être en majuscules

        $result = 'SELECT COUNT(lyst) AS lyst from pays WHERE lyst="'.$_POST['lyst'].'"'; 


        et en html il faut que les valeurs des arguments dans les balises soient entre "

        <form action="test31.php" method="POST">
        <select name="lyst" style="background:green; color:#900000;">
        <optgroup label="EUROPE">
        <option value="albanie">Albanie</option>
        <option value="allemagne">Allemagne</option>
        <option value="arménie">Arménie</option>
        <option value="autriche">Autriche</option>
        etc............................
        </optgroup>
        </select>
        <input type="submit" value="Validez" style="background-color:#ff99ff; color:#900000;">
        </form> 
        0
        1. Bonsoir,

          Cette fois ça marche avec le code PHP ci-dessous. C'est ce que je recherchais. J'ai employé la méthode GET car ma pagination ne fonctionnait pas avec POST.
          Merci beaucoup pour l'aide apportée et la rapidité des réponses. J'étais prêt à jeter l'éponge. Il est vrai que j'ai encore beaucoup à apprendre en PHP.
          Le problème est résolu.
          Encore merci et bonne soirée.

          $result = 'SELECT COUNT(lyst) AS lyst FROM pays WHERE district="'.$_GET['lyst'].'"';
          $query = mysql_query($result, $db) or die('Erreur MySQL : '.mysql_error());
          $total = mysql_result($query,0);
          // On calcule le nombre de pages à créer
          $max_pg = ceil($total / $nb);
          0