Selection par liste deroulante

Résolu
jami -  
 jami -
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. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  2. jami
     
    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
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    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. jami
       
      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
  4. Alain_42 Messages postés 5413 Statut Membre 904
     
    $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. jami
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    $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. jami
       
      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