dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005
-
18 avril 2005 à 05:04
dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005
-
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???
A voir également:
Liste déroulante + affichage résultats par tranches (PHP)
dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005 18 avril 2005 à 16:26
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.
<?
$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)
{
?>
----
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 ?
dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005 18 avril 2005 à 16:58
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.
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 18 avril 2005 à 17:03
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 !
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 18 avril 2005 à 17:15
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.
dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005 18 avril 2005 à 20:06
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.
dj_mess
Messages postés6Date d'inscriptionlundi 6 décembre 2004StatutMembreDernière intervention20 avril 2005 20 avril 2005 à 21:24
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++