Page 1 sur 1

suivant et précedent

Posté : 24 mai 2005, 11:19
par Nadège
Bonjour,
J'ai un probleme qui peut paraitre simple mais je dois avouer que ca fait un moment que je bloque.
J'ai une table (articles) avec des enregistrements, certains peuvent etre publiés et d'autres non.
Quand le champ 'publier' est indiqué 'non' alors l'article ne s'affiche pas.

J'ai une barre de navigation où l'on peut faire défiler article après article grâce à leur id.
Mon probleme c que mes "precedent" et "suivant" ne tiennent pas compte du fait que l'article soit publié ou non..Je voudrais que qi l'article n'est pas publier alors dans le defilé des articles il n'apparaissent pas, ce qui n'est pas le cas en ce moment.

le code :

//ref précedente
$num=$idp-1;
if($num=="0"){ echo "rien";}
else{
echo "<a href=\"poubelle2.php?idp=$num\"> référence préc&eacute;dente</a>";
}



//reference suivante
$requete=mysql_query("SELECT id FROM articles WHERE publier='OUI' ORDER BY id DESC");
$idmax=mysql_result($requete,0);
$num=$idp+1;
if($num>$idmax){ echo "rien";}
else {
echo "<a href=\"poubelle2.php?idp=$num\">référence suivante </a>";}

Les id sont passées par l'url , style : poubelle2.php?idp=240



Merci de votre aide.
Nadege

Posté : 24 mai 2005, 11:29
par zeus
C'est normal, tu pense bienà récupérer tes enregistrements, mais tu incrémente de 1, sans tester si il est interdit ou non !!!

A mon avis, il faut que tu change $num=$idp-1; et $num=$idp+1;

Je regarde comment est ce que tu pourrais faire

Posté : 24 mai 2005, 11:33
par Invité
Merci de ta reponse
en fait j'avais essayer un truc du style

//reference suivante


$requete=mysql_query("SELECT id FROM articles WHERE id>$idp && publier='OUI' ORDER BY id DESC LIMIT 1");
$data = mysql_fetch_assoc($requete);
echo "nadege $date[id]";
echo "<a href=\"poubelle2.php?idp=${data['id']}\"> référence suivante </a>";

mais là non plus ca ne fonctionne pas ca me renvois au tout dernier enregistrement de la base

[RESOLU]suivant et precedent

Posté : 24 mai 2005, 12:00
par Nadège
Je ne sais pas pouruqoi aujuord'hui j'ai toruvé mais ca fonctionne....
j'ia directement essayé dans la base de données et la réponse est venue
c'etait juste un léger soucis d'ecriture

pour ceux que ca interesse

<?
//reference suivante

$requete=mysql_query("SELECT * FROM articles WHERE id>'$idp' && publier LIKE 'OUI' LIMIT 1 ");

$data = mysql_fetch_assoc($requete);
echo "<a href="poubelle.php?idp=${data['id']}">référence suivante </a>";

?>

Posté : 24 mai 2005, 12:06
par Cyrano
La première chose que je dirais : aère un peu ton code, ça facilite la lecture; Ensuite: par rapport au premier post, tu utilises une variable sans en récupérer la valeur: $idp n'est pas initialisée dans ce que tu nous montres, on devrait voir en début de page:
<?php
if(isset($_GET['idp']))
{
    $idp = $_GET['idp'];
}
Suivi éventuellement d'un else pour attribuer une valeur par défaut, ça évitera les messages d'erreur.

Ensuite dans ton dernier message, si au lieu d'obtenir le dernier tu veux le premier élément de la base, inverse l'ordre de tri :
$requete = mysql_query("SELECT id FROM articles WHERE id > ".$idp." AND publier='OUI' ORDER BY id ASC LIMIT 1");
$data = mysql_fetch_assoc($requete);
echo "nadege ". $data['id'];
echo "<a href=\"poubelle2.php?idp=". $data['id'] ."\"> référence suivante </a>"; 
Tu noteras que je sépare le SQL du PHP en faisant des concaténations de chaines propres, ça limite considérablement les risques d'erreurs.

Posté : 24 mai 2005, 13:52
par Elie
Je dirait meme plus :
$idp = ((isset($_GET['idp'])) AND (is_int($_GET['idp']))) ? addslashes($_GET['idp']) : 0;