Discussion:
next et previus
(trop ancien pour répondre)
elia
2006-12-28 15:02:04 UTC
Permalink
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
Surfoo
2006-12-28 20:37:32 UTC
Permalink
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.
Post by elia
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
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 ..
Eric
2007-01-01 16:03:51 UTC
Permalink
Bonjour !
Post by Surfoo
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.
Post by Surfoo
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
Manu
2006-12-31 17:40:56 UTC
Permalink
Post by elia
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
Cbc
2007-01-02 12:49:53 UTC
Permalink
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?

Continuer la lecture sur narkive:
Loading...