Liste déroulante + affichage résultats par tranches (PHP)

[Résolu]
Signaler
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005
-
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005
-
salut,

en fait je désire afficher des résultats d'une requête sur plusieurs pages en fonction d'un choix effectué sur une liste déroulante.
Ex: un disquaire
J'ai une table Article avec les champs : id_article, artiste, titre, id_genre, prix (ce sont les disques) et une table Genre (id_genre, libgenre) qui reprend les genres musicaux R&B, Rap, etc.....
J'ai une page php avec une liste déroulante que j'ai bien rempli avec les genres.
Liste déroulante:
-tous les genres-
R&B
Rap
Ragga
.....
J'aimerais afficher dans cette page php les disques en fonction du genre choisi.
Quand je sélectionne -tous les genres- j'obtiens tous les disques sur 9 pages (10 par page) ca marche.
Mais quand je choisis R&B par ex, je devrais obtenir que les disques R&B, et c ce qu'il fait il trouve 4 pages et sur la 1ere page ca à l'air correct j'ai les 10 premiers disques R&B, et c maintenant que j'en viens au problème lorsque je cliques sur la page 2 pour voir les 10 disques R&B suivants, il me met aussi des autres genres et je me rends compte que ce n'est en fait que la 2eme page des 9 pages totales (qd choix = -tous les genres-), donc en fait des que jveux changer de page il ne tient plus compte du choix du genre que j'avais fait dans la liste déroulante. En résumé qd je navigue sur la page pour voir les résultats suivants, il ne tient plus compte du choix effectué cad il revient automatiquement sur -tous les genres-
J'espère que jme suis fait comprendre lol
Qqn peut m'aider svp???

12 réponses

Messages postés
13
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
15 novembre 2005

salut dj_mess



j'avais fait un truc qui fonctionnait sous mysql et qui reprenait tout ce que tu demande.

je viens de le poster sur phpcs ici : http://www.phpcs.com/code.aspx?ID=30867

je viens de l'adapter selon ton exemple,

il y a sûrement des améliorations à apporter et très certainemant des
corrections (je débute aussi) mais vois si tu peux t'en inspirer.
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
salut,

peut etre a tu oublié de faire suivre ta variable ou alors tu a changer ta requete?

fait voir le code ! on comprendra mieux

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005

Salut,
Merci pour ta réponse rapide.
Voici le code. En fait j'utilise Postgres j'espère que ça posera pas problème, ya juste les noms de fontctions qui changent. Ya surement une erreur de logique ou qqch que j'ai oublié de faire.

<form method="post" name="frmmusic" target="_self">
<select name="lstgenre" onChange="submit()">
<option value="">-Tous les genres-</option>

<?
$db=db_con(); // connection à ma base
$query_genre = @pg_exec($db,"SELECT * FROM Genre");
while ($val2 = @pg_fetch_array($query_genre))
{ // je remplis ma liste dérouante avec les éléments de la table Genre
?>
<option value="<? echo $val2['libgenre'] ?>"><? echo $val2['libgenre'] ?></option>
<? } ?>
</select></form>
<?
$genre = $_POST["lstgenre"]; // je récupère le choix de l'utilisateur
if(!empty($_POST["lstgenre"])) // si l'utilisateur a spécifié un genre
{ // requête avec le genre choisi
$result = @pg_exec($db,"SELECT * FROM Article, Genre, Type, Support WHERE Article.idgenre Genre.idgenre AND Article.idtype Type.idtype AND
Article.idsupport = Support.idsupport AND libgenre LIKE '$genre'");
} // si genre non spécifié
else
{ // requête qui cherche tous les disques
$result = @pg_exec($db,"SELECT * FROM Article, Genre, Type, Support WHERE Article.idgenre Genre.idgenre AND Article.idtype Type.idtype AND
Article.idsupport = Support.idsupport");
}
$Nmax = 10; // nombre par page
$Ncur = 0; // n° de la fiche courante


$Ndeb=@$_GET["num"]; // 1ère fiche transmise par l'URL


?>
<?
// tant qu'il y a des fiches
while (($val = @pg_fetch_array($result)) && ($Ncur<$Nmax+$Ndeb))
{ // affichage des résultats
if($Ncur>=$Ndeb)
{
?>
----

" width="75" height="75"
border="0">,
<? echo "".$val['artiste']."

". $val['titre'].""; ?>,
<?echo "".$val['libgenre']."
". $val['libsupport']."&nbsp;".$val
['libtype'].""; ?>,
<? echo "".$val['prix']."&nbsp;€".""; ?>, <?
}
$Ncur++;
} ?>


<? // Navigation des fiches avant
if($Ndeb > 0) { ?>
"> <<< Précédent,
<? } ?>
<? // N° des pages
$Npag = ceil(@pg_numrows($result)/$Nmax);
for($i = 1;$i<=$Npag;$i++) {
// Page courante ?
if($Ndeb == ($i-1)*$Nmax) { ?>
Page <? echo $i; ?>
<? } else { ?>
"
>&nbsp;<? echo $i; ?>&nbsp;
<? }
} ?>,
<? // Des fiches après ?
if($val) { ?>
">Suivant >>>,
<? } ?>


<? pg_close(); ?>

Voilà en postant mon code je crois que j'ai trouvé l'erreur. En fait quand je change la page pour voir les résultats suivants, le $_POST["lstgenre"] revient automatiquement à -Tous les genres- du coup il rentre dans le ELSE et cherche tous les disques (au lieu de continuer à m'afficher les résultats du genre sélectionné). Ya-t-il un moyen de sauvegarder ce que l'utilisateur a selectionné dans la liste déroulante ?
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
lu, c'est pas vraimant bien codé :

<?php et pas <?

Priviligie les ' aux "

dans les echo mets , et pas .

Et ton code html, n'est pas tres aux normes ! (
<hr
/>
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005

Salut jojo,
merci pour ton commentaire mais le problème n'est pas dans les balises html ou les ' ou " ou que sais-je, ça marche très bien. En fait g pas mis tout mon code c juste le bout de code où ya le problème. C'est plutôt une question de logique et je pense avoir bien établi le problème. Je dois trouver un moyen de sauvegarder la valeur sélectionnée dans la liste déroulante pour pouvoir continuer à voir les bons résultats qd je change de page.
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Re,

je le sais ... Mais Progres je ne connais pas.

Mais tu crois que ton probleme n'est pas dans ton html ? Et bien si,
car si tu code bien, ton script ira plus vite, et un plus grand nombre
de visiteurs veront ton site comme tu l'as voulus. Et sinon dans
quelques années quand on passeras au XHtml, tu devras tous refaire,
mais si tu code bien maintenant, tu n'auras presque rien à coriger

<hr style="width: 100%; height: 2px;">Si ma reponse te convient, merci de l'accepter !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,



ok, mais ce n'est pas une raison pour ameliorer un code mal ecrit, meme s'il fonctionne ;-)



Pourquoi tu n'utilises pas LIMIT, pour ton truc ? ce serait bien plus
simple. Cela doit exister aussi avec Postgres, ca reste une clause
banale en sql il me semble.



Ensuite, dans tes liens :

[?num=<? echo $Ndeb-$Nmax; ?> <<< Précédent] ...



il faut que tu passes effectivement ton post (le choix utilisateur), en plus du reste. c'est tout ce qui te manque.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Sauf qu'alors, tu vas le recuperer avec un $_GET et pas un $_POST, donc
avant de faire ta requete, tu dois aussi tester l'existence d'un $_GET.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Pour NE PAS AMELIORER, desole, petit oubli dans ma phrase qui du coup prend un tout autre sens lol.
Messages postés
13
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
15 novembre 2005

Salut dj_mess,



pour conserver le choix de l'utilisateur dans la liste tu peux utiliser une condition :



<?php

while ($val2 = @pg_fetch_array($query_genre))

{ // je remplis ma liste dérouante avec les éléments de la table Genre

?>

<option value="<?php echo $val2['libgenre'] ?>"

<?php

// garde la sélection

if($genre == $val['libgenre'] {

echo 'selected="selected"';

}

?>

><?php echo $val2['libgenre'] ?></option>

<? } ?>



quant à ton premier problème je pense qu'il faut rajouter dans tes liens le critère de recherche :

<?php

$genre = $_GET['lstgenre'];

if(!$genre) { $genre = "un genre_par_défaut"; }

?>



[?num=<?php echo $Ncur; ?>&genre=<?php echo $genre;
?> Suivant >>>]



...

en espèrant que ça te servira à quelque chose...
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005

Merci à tous pour toutes vos réponses !
En effet c'était plus facile de gérer les pages avec LIMIT hélas je ne peux pas utiliser ce genre de requête $resultat=mysql_query($requete. "limit, $debut, $nbre)
Le SGBD PostgreSQL accepte seulement la syntaxe LIMIT # et non LIMIT #,#


Erreur SQL :
ERROR: LIMIT #,# syntax is not supported

Freelony,
Peux-tu développer ton idée avec le selected et les critères de recherche dans les liens ainsi que le GET. Ca a l'air d'être la solution à mon problème. Dsl je suis débutant.
Merci d'avance.
Messages postés
6
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
20 avril 2005

salut freeloony,

J'ai trouvé la solution ya 2-3 jours en fait j'avais qq erreurs mais ta solution est nickel. Moi j'ai du le faire sans le LIMIT car Postgres n'accepte pas la syntaxe LIMIT x, y. Sinon merci bcp pour ton aide j'accepte qd meme ta solution car il fallait effectivement un echo 'selected="selected"'; pour mémoriser les sélections et aussi passer les parametres offset, genre... dans mes liens. J'ai meme combiné 3 select dans mon formulaire: genre (r&b, rap....), support (cd, vinyl....) et langue (fr, en.....)
A++