Liste déroulante + affichage résultats par tranches (PHP) [Résolu]

dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention - 18 avril 2005 à 05:04 - Dernière réponse : dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention
- 20 avril 2005 à 21:24
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???
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
freeloony 13 Messages postés jeudi 2 novembre 2000Date d'inscription 15 novembre 2005 Dernière intervention - 20 avril 2005 à 17:40
3
Merci
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.

Merci freeloony 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de freeloony
tucsoufle 1251 Messages postés mardi 15 juillet 2003Date d'inscription 30 septembre 2007 Dernière intervention - 18 avril 2005 à 06:00
0
Merci
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
Commenter la réponse de tucsoufle
dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention - 18 avril 2005 à 16:26
0
Merci
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 ?
Commenter la réponse de dj_mess
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 18 avril 2005 à 16:37
0
Merci
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
/>
Commenter la réponse de JoJo738
dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention - 18 avril 2005 à 16:58
0
Merci
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.
Commenter la réponse de dj_mess
JoJo738 1267 Messages postés mercredi 7 juillet 2004Date d'inscription 29 juin 2010 Dernière intervention - 18 avril 2005 à 17:03
0
Merci
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 !
Commenter la réponse de JoJo738
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 18 avril 2005 à 17:15
0
Merci
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.
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 18 avril 2005 à 17:15
0
Merci
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.
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 18 avril 2005 à 17:20
0
Merci
Pour NE PAS AMELIORER, desole, petit oubli dans ma phrase qui du coup prend un tout autre sens lol.
Commenter la réponse de malalam
freeloony 13 Messages postés jeudi 2 novembre 2000Date d'inscription 15 novembre 2005 Dernière intervention - 18 avril 2005 à 18:07
0
Merci
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...
Commenter la réponse de freeloony
dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention - 18 avril 2005 à 20:06
0
Merci
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.
Commenter la réponse de dj_mess
dj_mess 6 Messages postés lundi 6 décembre 2004Date d'inscription 20 avril 2005 Dernière intervention - 20 avril 2005 à 21:24
0
Merci
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++
Commenter la réponse de dj_mess

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.