OVH Cloud OVH Cloud

next et previus

4 réponses
Avatar
elia
Bonjour,

Pour faire défiler des objets dans une base de donnée, j'ai deux
images-flèches (prévious et next)
J'incrémente et je décrémente de "-1" et de "+1" dans la requête à
la base pour afficher mes objets, si l'id est zéro je n'affiche pas
l'image-fléche, idem pour le dernier objet.

Mais comme certain objets de ma base sont effacés cela ne marche plus.
Il me faudrait un paramêtre comme "précédent" et "suivant" pour la
requête sql à la place de -1 et +1 :

Ma base ce présente donc comme suit:

1 objet rouge
2 objet bleue
3 objet bleue
6 objet orange
7 objet noir ...

mon code est le suivant:

<?php
if ($row_R_oeuvre['id'] > 1) { // Show if not first page ?>
<a href="details.php?id=<?php echo $row_R_oeuvre['id'] - 1 ; ?>">
<img src="Previous.gif"/></a>
<?php } ?>

et pour avancer ...

<?php
if ($row_R_oeuvre['id'] < 145 ) { // Show if not last page ?>
<a href="details.php?id=<?php echo $row_R_oeuvre['id'] + 1 ; ?>">
<img src="Next.gif"/></a>
<?php } ?>


Merci, quel code dois-je faire pour sauter de id 3 à l'id 6 par
exemple ..

pascal

4 réponses

Avatar
Surfoo
Il faut chercher s'il y a un élément avant et après l'élément en cours :

Pour le précedent :

SELECT id
FROM oeuvre
WHERE id < '$row_R_oeuvre['id']'
ORDER BY id DESC
LIMIT 0, 1

Pour le suivant :

SELECT id
FROM oeuvre
WHERE id > '$row_R_oeuvre['id']'
ORDER BY id ASC
LIMIT 0, 1

Et pour chacune des requetes tu regardes s'il y a un résultat
(mysql_num_rows()>0) et dans ce cas tu affiche l'image adéquat. Ça
t'évitera d'avoir ton "if ($row_R_oeuvre['id'] > 1)" et "if
($row_R_oeuvre['id'] < 145 )"


Baptiste.

Pour faire défiler des objets dans une base de donnée, j'ai deux
images-flèches (prévious et next)
J'incrémente et je décrémente de "-1" et de "+1" dans la requête à
la base pour afficher mes objets, si l'id est zéro je n'affiche pas
l'image-fléche, idem pour le dernier objet.

Mais comme certain objets de ma base sont effacés cela ne marche plus.
Il me faudrait un paramêtre comme "précédent" et "suivant" pour la
requête sql à la place de -1 et +1 :

Ma base ce présente donc comme suit:

1 objet rouge
2 objet bleue
3 objet bleue
6 objet orange
7 objet noir ...

Merci, quel code dois-je faire pour sauter de id 3 à l'id 6 par
exemple ..


Avatar
Manu

Ma base ce présente donc comme suit:

1 objet rouge
2 objet bleue
3 objet bleue
6 objet orange
7 objet noir ...



Peut être pourrais-tu stocker la liste des id dans un tableau indicé via
une boucle sur les enregistrements.

$tablo[0]=1;
$tablo[1]=2;
$tablo[2]=3;
$tablo[3]=6;
$tablo[4]=7;
...

Les indices du tableau se suivant, tu peux aisément récupérer l'id
précédent et suivant en décrémentant/incrémentant l'indice.


Par exemple, si tu es à l'enregistrement d'id 3, tu peux déterminer
qu'il corresepond à l'indice 2 de tablo.
Le précédent est à l'indice 2-1=1 soit l'id=$tablo[2-1]=$tablo[1]=2
Le suivant est à l'indice 2+1=3 soit l'id=$tablo[2+1]=$tablo[3]=6


Les tests pour savoir si tu es au début indice 0 du tableau et à la fin
l'indice vaut n-1 (pour n correspondant à la taille du tableau) sont
alors facile à faire.

Je pense que ca peut être une solution envisageable si le nombre
d'enregistrements est peu élevé. Il est sans doute possible, de ne
récupérer que les valeurs "autour" de l'id, ca dépend de ta boucle et de
ce que tu comptes réellement faire.


--
Manu

Avatar
Eric
Bonjour !

SELECT id
FROM oeuvre
WHERE id < '$row_R_oeuvre['id']'
ORDER BY id DESC
LIMIT 0, 1


Je ne suis pas sur que les apostrophes autour de $row_R_oeuvre['id'] soient
ici nécessaires, on travaille sur des chiffres, pas sur des chaines de
caractères.
$row_R_oeuvre['id'] vient de la base de données, on peut considérer cette
info comme plutôt fiable.

Et pour chacune des requetes tu regardes s'il y a un résultat
(mysql_num_rows()>0) et dans ce cas tu affiche l'image adéquat. Ça
t'évitera d'avoir ton "if ($row_R_oeuvre['id'] > 1)" et "if
($row_R_oeuvre['id'] < 145 )"


C'est vrai que ces valeurs en dur me font mal aux yeux.

Eric

Avatar
Cbc
Quelque chose du style :

$id = $row_R_oeuvre['id'];
$query = "
SELECT id
FROM oeuvre
ORDER BY id ASC
LIMIT $id, {$id+1}";

ne devrait-il pas marcher?