Comment accéder à l'enregistrement suivant ou précédent?

Comment accéder à l'enregistrement suivant ou précédent? - PHP - Programmation

Marsh Posté le 12-08-2008 à 13:29:59    

Salut à tous,
 
Je cherche désespérément le moyen d'afficher les enregistrements de ma table, un par un, avec des liens 'suivant' et 'précédent'.
Voilà où j'en suis, mais après, j'ignore vmt ce que je dois mettre...

Code :
  1. include("../../../connexion.php" ); 
  2.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<"'.$_GET['id_membre'].'" ORDER BY id_membre DESC LIMIT 1') or die(mysql_error());
  3.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>"'.$_GET['id_membre'].'" ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());


Merci d'avance...

Reply

Marsh Posté le 12-08-2008 à 13:29:59   

Reply

Marsh Posté le 12-08-2008 à 14:19:21    

Heu pourquoi id_membre < .. ou > ... ?
Si tu veux sortir un record à la fois :  
 
precendent : id_membre = $_GET['id_membre]-1
suivant :  id_membre = $_GET['id_membre]+1


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-08-2008 à 14:31:09    

esox_ch a écrit :

Heu pourquoi id_membre < .. ou > ... ?
Si tu veux sortir un record à la fois :  
 
precendent : id_membre = $_GET['id_membre]-1
suivant :  id_membre = $_GET['id_membre]+1


Mais si les id ne se suivent pas, c'est la merde.
Dans ce cas, il faut jouer avec le LIMIT. Tu appelles ta table toujours dans le même sens (DESC ou ASC, au choix) et tu stockes id_aff qui sera l'id à afficher. Et tu fais :

Code :
  1. $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres ORDER BY id_membre DESC LIMIT 1,'.$_GET['id_aff'].') or die(mysql_error());


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 12-08-2008 à 16:05:48    

bingojm a écrit :

Salut à tous,
 
Je cherche désespérément le moyen d'afficher les enregistrements de ma table, un par un, avec des liens 'suivant' et 'précédent'.
Voilà où j'en suis, mais après, j'ignore vmt ce que je dois mettre...

Code :
  1. include("../../../connexion.php" ); 
  2.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<"'.$_GET['id_membre'].'" ORDER BY id_membre DESC LIMIT 1') or die(mysql_error());
  3.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>"'.$_GET['id_membre'].'" ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());


Merci d'avance...


 
Il faut que tu échappes tes données avec mysql_real_escape_string() avant de les placer dans ta requête SQL.
($_GET['id_membre'])

Reply

Marsh Posté le 12-08-2008 à 18:31:00    

Je suis perdu moi...
Si on prend ca dans l'ordre, je dois faire un mysql_real_escape_string() avant mon $result2=mysql_query...?
Si tel est le cas, vous voulez bien me donner un exemple d'écriture, parce que j'ai vmt du mal à suivre...  
Mais après, quel lien dois-je mettre pour avoir un suivant, précédent?  
et mon $result2 va me permettre de passer au champ suivant ou juste afficher une info?
Merci pour votre aide, vmt sympa.

Reply

Marsh Posté le 12-08-2008 à 18:39:10    

=> mysql_read_escape_string() est une fonction de la doc, le plus simple pour que tu comprennes à quoi elle sert c'est que tu regardes dans la doc
 
=> T'as compris à quoi sert mysql_query?
 
=> T'as compris ce que fait ta requete?
 
Parce que ta phrase "et mon $result2 va me permettre de passer au champ suivant ou juste afficher une info? " veut rien dire :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-08-2008 à 09:42:27    

Voilà où j'en suis. J'ai récupéré les données de ma table une par une, maintenant, le problème est bien "comment passer au champ suivant en cliquant sur suivant et précédent":
Est-ce que les $result1 et $result2 sont corrects? Mais je ne vois pas comment exécuter ca avec une lien sur suivant et précédent...

Code :
  1. include("../../../connexion.php" ); 
  2. //pour récolter les infos une par une
  3. $query = "SELECT id_membre, nom, prenom FROM membres ORDER BY BINARY id_membre ASC LIMIT 1";
  4. $result = mysql_query($query) or die("Query failed" );
  5.    //pour passer à l'enregistrement suivant
  6.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<"'.$_GET['id_membre'].'" ORDER BY id_membre DESC LIMIT 1')or die(mysql_error());
  7.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>"'.$_GET['id_membre'].'" ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());
  8. while ($ligne = mysql_fetch_assoc($result)) {
  9. $nom = $ligne['nom'];
  10. $prenom = $ligne['prenom'];
  11. echo "<table border=\"0\" align=\"center\">\n";
  12. echo "<tr>\n";
  13. foreach ($ligne as $col_name => $col_value) {
  14.   if ($col_name == 'nom')
  15. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Nom :</td>";
  16.   echo "<td width=\"160\">$nom</td>"; }
  17. elseif ($col_name == 'prenom')
  18. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Prénom :</td>";
  19.   echo "<td width=\"160\">$prenom</td></tr>";
  20.   echo "<tr><td></td>";
  21.   echo "<td align=\"right\" valign=\"bottom\" >Précédent</td>";
  22.   echo "<td align=\"left\" valign=\"bottom\" >Suivant</td>"; }
  23. elseif ($col_name <> 'id_membre')
  24.    {   echo "<td></td>";}
  25. }
  26.     echo "</tr><hr>";
  27. }
  28. echo "</table>\n";


Merci d'avance pour votre aide!

Reply

Marsh Posté le 13-08-2008 à 09:44:38    

avant ta requête, fait :

Code :
  1. <?php
  2. $id_membre=(int)$_GET['id_membre'];
  3. ?>


 
Puis dans ta requête remplace $_GET['id_membre'] par $id_membre. Ca remplace le mysql_real_escape_string, et force le type de id_membre à int.

Message cité 1 fois
Message édité par Profil supprimé le 13-08-2008 à 09:45:02
Reply

Marsh Posté le 13-08-2008 à 09:53:31    


Merci bien. Voici les modifs. sachant que cette page s'appelle liste_membres.php, comment dois-je adapter les liens "suivant" et "précédent" pour que la page se recharge et affiche les infos suivantes (ou précédentes).

Code :
  1. php$id_membre=(int)$_GET['id_membre'];
  2. //pour récolter les infos une par une
  3. $query = "SELECT id_membre, nom, prenom FROM membres ORDER BY BINARY id_membre ASC LIMIT 1";
  4. $result = mysql_query($query) or die("Query failed" );
  5.    //pour passer à l'enregistrement suivant
  6.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<$id_membre ORDER BY id_membre DESC LIMIT 1')or die(mysql_error());
  7.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>$id_membre ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());
  8. while ($ligne = mysql_fetch_assoc($result)) {
  9. $nom = $ligne['nom'];
  10. $prenom = $ligne['prenom'];
  11. echo "<table border=\"0\" align=\"center\">\n";
  12. echo "<tr>\n";
  13. foreach ($ligne as $col_name => $col_value) {
  14.   if ($col_name == 'nom')
  15. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Nom :</td>";
  16.   echo "<td width=\"160\">$nom</td>"; }
  17. elseif ($col_name == 'prenom')
  18. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Prénom :</td>";
  19.   echo "<td width=\"160\">$prenom</td></tr>";
  20.   echo "<tr><td></td>";
  21.   echo "<td align=\"right\" valign=\"bottom\" ><a class=\"lien2\" href=\"liste_membres.php\">Précédent</a></td>";
  22.   echo "<td align=\"left\" valign=\"bottom\" ><a class=\"lien2\" href=\"liste_membres.php\">Suivant</a></td>"; }
  23. elseif ($col_name <> 'id_membre')
  24.    {   echo "<td></td>";}
  25. }
  26.     echo "</tr><hr>";
  27. }
  28. echo "</table>\n";

Reply

Marsh Posté le 13-08-2008 à 10:00:09    

Tu fais :
 

Code :
  1. <?php
  2. $id_membre--;
  3. <a href="<?php echo $id_membre ?>">précédent</a>
  4. $id_membre+=2;
  5. <a href="<?php echo $id_membre ?>">Suivant</a>
  6. ?>


 
:??:

Message cité 1 fois
Message édité par Profil supprimé le 13-08-2008 à 10:00:34
Reply

Marsh Posté le 13-08-2008 à 10:00:09   

Reply

Marsh Posté le 13-08-2008 à 10:22:12    

Voilà ce que j'ai mis:

Code :
  1. include("../../../connexion.php" ); 
  2. $id_membre=(int)$_GET['id_membre'];
  3. //pour récolter les infos une par une
  4. $query = "SELECT id_membre, nom, prenom FROM membres ORDER BY BINARY id_membre ASC LIMIT 1";
  5. $result = mysql_query($query) or die("Query failed" );
  6.    //pour passer à l'enregistrement suivant
  7.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<$id_membre ORDER BY id_membre DESC LIMIT 1')or die(mysql_error());
  8.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>$id_membre ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());
  9. while ($ligne = mysql_fetch_assoc($result)) {
  10. $nom = $ligne['nom'];
  11. $prenom = $ligne['prenom'];
  12. echo "<table border=\"0\" align=\"center\">\n";
  13. echo "<tr>\n";
  14. foreach ($ligne as $col_name => $col_value) {
  15.   if ($col_name == 'nom')
  16. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Nom :</td>";
  17.   echo "<td width=\"160\">$nom</td>"; }
  18. elseif ($col_name == 'prenom')
  19. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Prénom :</td>";
  20.   echo "<td width=\"160\">$prenom</td></tr>";
  21.   echo "<tr><td></td>";
  22.   $id_membre--;
  23.   echo "<td align=\"right\" valign=\"bottom\" ><a class=\"lien2\" href=\"echo $id_membre\">Précédent</a></td>";
  24.   $id_membre+=2;
  25.   echo "<td align=\"left\" valign=\"bottom\" ><a class=\"lien2\" href=\"echo $id_membre\">Suivant</a></td>"; }
  26. elseif ($col_name <> 'id_membre')
  27.    {   echo "<td></td>";}
  28. }
  29.     echo "</tr><hr>";
  30. }
  31. echo "</table>\n";


Et avec ca, j'ai le message suivant: Unknown column '$id_membre' in 'where clause'
Une idée?

Reply

Marsh Posté le 13-08-2008 à 11:03:09    

J'ai trouvé une erreur, j'ai oublié les quotes.
Maintenant, voici mon code, mais je n'arrive pas à passer à l'enregistrement suivant. Est-ce que $id_membre--; et $id_membre+=2; sont bien liés avec $result1 et $result2? J'ai plutôt l'impression que ca me fait juste +1 ou -1, mais j'aime mieux utiliser < et > (voir $result1) car si un enregistrement est supprimé, ca n'ira plus...
Mais je coince vraiment pour afficher cet enregistrement suivant. Si $result1 et $result2 sont corrects, comment écrire le lien "suivant" en le liant avec $result1?
 

Code :
  1. $id_membre=(int)$_GET['id_membre'];
  2. //pour récolter les infos une par une
  3. $query = "SELECT id_membre, nom, prenom FROM membres ORDER BY BINARY id_membre ASC LIMIT 1";
  4. $result = mysql_query($query) or die("Query failed" );
  5.    //pour passer à l'enregistrement suivant
  6.    $result2=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre<"$id_membre" ORDER BY id_membre DESC LIMIT 1')or die(mysql_error());
  7.    $result1=mysql_query('SELECT id_membre, nom, prenom FROM membres WHERE id_membre>"$id_membre" ORDER BY id_membre ASC LIMIT 1')or die(mysql_error());
  8. while ($ligne = mysql_fetch_assoc($result)) {
  9. $nom = $ligne['nom'];
  10. $prenom = $ligne['prenom'];
  11. echo "<table border=\"0\" align=\"center\">\n";
  12. echo "<tr>\n";
  13. foreach ($ligne as $col_name => $col_value) {
  14.   if ($col_name == 'nom')
  15. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Nom :</td>";
  16.   echo "<td width=\"160\">$nom</td>"; }
  17. elseif ($col_name == 'prenom')
  18. { echo "<td bgcolor=\"#F5CA89\" width=\"100\" align=\"right\">Prénom :</td>";
  19.   echo "<td width=\"160\">$prenom</td></tr>";
  20.   echo "<tr><td></td>";
  21.   $id_membre--;
  22.   echo "<td align=\"right\" valign=\"bottom\" ><a class=\"lien2\" href=\"liste_membres.php?$id_membre\">Précédent</a></td>";
  23.   $id_membre+=2;
  24.   echo "<td align=\"left\" valign=\"bottom\" ><a class=\"lien2\" href=\"liste_membres.php?$id_membre\">Suivant</a></td>"; }
  25. elseif ($col_name <> 'id_membre')
  26.    {   echo "<td></td>";}
  27. }
  28.     echo "</tr><hr>";
  29. }
  30. echo "</table>\n";

Reply

Marsh Posté le 13-08-2008 à 12:12:30    

 


T'aime bien te faire chier toi :o

 

T'as pas l'impression que ce serait plus simple comme ça :

 
Code :
  1. <a href="<?=$id_membre-1?>">précédent</a>
  2. <a href="<?=$id_membre+1?>">Suivant</a>
 

:o (ou en remplaçant <?= par <?php echo au besoin quoi).

 

Et de toute façon ça va pas ton truc... C'est PAS parce qu'un membre à l'ID 591 que le membre précédent à le 590 et le suivant le 592 :o

Message cité 1 fois
Message édité par Dj YeLL le 13-08-2008 à 20:43:50

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 13-08-2008 à 13:46:50    

Il peut s'en sortir avec un select sur toute la base avec id > $id_membre LIMIT 1 (et id < $id_membre respectivement) mais niveau perf c'est bof :o
 
Doit surement avoir moyen de faire mieux


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-08-2008 à 13:58:23    

esox_ch a écrit :

Doit surement avoir moyen de faire mieux


Yes, le mieux est de gérer directement l'emplacement dans la table (attention, ca ne marche bien que si : ou une seule personne travaille sur la table, ou les enregistrements s'ajoutent à la fin)
Tu vas gérer un nouvel id (seulement dans les pages php), en pseudo code, ca donne :

Code :
  1. if($id_aff existe)
  2. {
  3. //on affiche seulement l'enregistrement qu'il faut
  4. $sql = "SELECT * FROM matable LIMIT 1, $id_aff" //on afffiche un enregistrement à partir de la ligne  $id_aff
  5. }
  6. else
  7. {
  8. $sql = "SELECT * FROM matable LIMIT 1, 1"
  9. $id_aff = 1;
  10. }
  11. //on récupère le nb de ligne
  12. $nb_ligne = "COUNT ($id_membre) FROM matable"
  13. //on excécute la requete
  14. ....
  15. //on gère le suivant-précédent
  16. if($id_aff > 1) { <a href="<?php echo $id_aff - 1 ?>">précédent</a> }
  17. if($id_aff < $nb_ligne) { <a href="<?php echo $id_aff + 1 ?>">suivant</a> }



---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 13-08-2008 à 20:39:10    

Dj YeLL a écrit :


[quotemsg=1772839,13,13108]
 

Code :
  1. <a href="<?=$id_membre-1?>">précédent</a>
  2. <a href="<?=$id_membre+1?>">Suivant</a>


 
[b]:o (ou en remplaçant <?= par <?php echo au besoin quoi).


 
Marche pas chez moi (short_open_tags) :o
 

Dj YeLL a écrit :


Et de toute façon ça va pas ton truc... C'est parce qu'un membre à l'ID 591 que le membre précédent à le 590 et le suivant le 592 :o


 
 :heink:
 

Reply

Marsh Posté le 13-08-2008 à 20:43:37    


 
Y'a quelque chose de pas clair dans ce que j'ai mis entre parenthèses ?
 
 
 
Quoi ? T'arrives pas comprendre que j'ai oublié un "pas" :o


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 13-08-2008 à 21:06:25    

Dj YeLL a écrit :


 
Y'a quelque chose de pas clair dans ce que j'ai mis entre parenthèses ?
 


 

Dj YeLL a écrit :


 
Quoi ? T'arrives pas comprendre que j'ai oublié un "pas" :o


 
Dans les deux cas j'ai lu trop, vite c'est bon quoi  :sweat:

Reply

Marsh Posté le 13-08-2008 à 21:26:52    

:o


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed