Selection par liste deroulante

Résolu/Fermé
jami - Modifié par Chris 94 le 5/04/2013 à 17:44
 jami - 1 avril 2013 à 23:03
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

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 mars 2013 à 18:06
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
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 29/03/2013 à 19:56
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
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 mars 2013 à 09:53
$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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
31 mars 2013 à 18:58
$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
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