Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2985 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1772449
bingojm
Posté le 12-08-2008 à 13:29:59  profilanswer
 

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...

mood
Publicité
Posté le 12-08-2008 à 13:29:59  profilanswer
 

n°1772480
esox_ch
Posté le 12-08-2008 à 14:19:21  profilanswer
 

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
n°1772497
babasss
Posté le 12-08-2008 à 14:31:09  profilanswer
 

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
n°1772559
Profil sup​primé
Posté le 12-08-2008 à 16:05:48  answer
 

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'])

n°1772630
bingojm
Posté le 12-08-2008 à 18:31:00  profilanswer
 

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.

n°1772634
esox_ch
Posté le 12-08-2008 à 18:39:10  profilanswer
 

=> 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
n°1772762
bingojm
Posté le 13-08-2008 à 09:42:27  profilanswer
 

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!

n°1772763
Profil sup​primé
Posté le 13-08-2008 à 09:44:38  answer
 

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
n°1772766
bingojm
Posté le 13-08-2008 à 09:53:31  profilanswer
 


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";

n°1772768
Profil sup​primé
Posté le 13-08-2008 à 10:00:09  answer
 

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
mood
Publicité
Posté le 13-08-2008 à 10:00:09  profilanswer
 

n°1772775
bingojm
Posté le 13-08-2008 à 10:22:12  profilanswer
 

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?

n°1772800
bingojm
Posté le 13-08-2008 à 11:03:09  profilanswer
 

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";

n°1772839
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 12:12:30  profilanswer
 

 


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
n°1772866
esox_ch
Posté le 13-08-2008 à 13:46:50  profilanswer
 

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
n°1772869
babasss
Posté le 13-08-2008 à 13:58:23  profilanswer
 

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
n°1773018
Profil sup​primé
Posté le 13-08-2008 à 20:39:10  answer
 

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:
 

n°1773022
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 20:43:37  profilanswer
 


 
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
n°1773031
Profil sup​primé
Posté le 13-08-2008 à 21:06:25  answer
 

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:

n°1773033
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2008 à 21:26:52  profilanswer
 

:o


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[C] accéder à une zone de mémoire allouée en dehors d'une DLLacceder a la base de donnes en selection et ajout en mm temps
Repérer un enregistrement défectueux[PHP] Acceder a un fichier depuis n'importe qu'elle page d'un site ?
[ACCESS] Procédure double clic sur enregistrementAccéder aux infos systèmes
faire un système de login sur plusieurs pages suivant le login.htmlspecialchars(), à l'affichage ou à l'enregistrement ?
problème de conflit avec Include suivant langue, avec script pas à moiInclude suivant langue : pb de conflit ?
Plus de sujets relatifs à : Comment accéder à l'enregistrement suivant ou précédent?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR