Se connecter avec
S'enregistrer | Connectez-vous

PHP Ancre lien contenu d'une page vers l'autre

Dernière réponse : dans Programmation

Bonjour,

J'ai un problem quand j'essai de faire un lien d'une page vers une autre avec une ancre en PHP.

Enfait en cliquant sur un lien sur la premiere page jaimerais que la deuxieme page retombe automatiquement sur le meme article que sur le lien sur lequel j'ai cliqué (il y a plusieurs pages il ne faut pas oublier).


Premiere page: http://www.articlesfromparis.com/francais/archivefr.php
Deuxieme page: http://www.articlesfromparis.com/francais/archivefrall....

Code de la premiere page:

  1. <div id="mainContent">
  2.  
  3.  
  4.  
  5. <h1>Archive <a href="archivefrall.php">(voir les articles en entier)</a></h1>
  6.  
  7.  
  8.  
  9.  
  10. <p class="pages">
  11.  
  12. <?php
  13. mysql_connect("localhost", "sdad", "asdad");
  14. mysql_select_db("asdad");
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. $nombreDeMessagesParPage = 10;
  23.  
  24. $retour = mysql_query('SELECT COUNT(*) AS nb_news FROM articlefr');
  25. $donnees = mysql_fetch_array($retour);
  26. $totalDesMessages = $donnees['nb_news'];
  27.  
  28. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  29.  
  30. echo 'Page : ';
  31. for ($i = 1; $i <= $nombreDePages; $i++)
  32. {
  33. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  34. }
  35. ?>
  36.  
  37. </p>
  38.  
  39.  
  40. <?php
  41.  
  42.  
  43.  
  44.  
  45. if (isset($_GET['page']))
  46. {
  47. $page = $_GET['page'];
  48. }
  49. else
  50. {
  51. $page = 1;
  52. }
  53.  
  54.  
  55. $n= $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  56.  
  57. $retour = mysql_query('SELECT * FROM articlefr ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
  58. ?>
  59.  
  60.  
  61.  
  62. <ul style="font-size: 12px;font-weight: bold;">
  63. <?php
  64.  
  65. while ($donnees = mysql_fetch_array($retour))
  66. {?>
  67. <li><?php
  68.  
  69. $n++;
  70. echo $n;
  71. echo '. <a href="archivefrall.php">';
  72. $titre = nl2br(stripslashes($donnees['titre']));
  73. echo $titre;
  74. echo '</a>';?>
  75. </li><?php
  76. } ?>
  77. </ul>
  78.  
  79. <br />
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88. <p class="pages">
  89.  
  90. <?php
  91. echo 'Page : ';
  92. for ($i = 1; $i <= $nombreDePages; $i++)
  93. {
  94. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  95. }
  96. ?>
  97. </p>
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110. </div>





Code de la deuxieme page:

  1. <div id="mainContent">
  2.  
  3.  
  4.  
  5.  
  6. <h1>Archive: les articles en entier</h1>
  7.  
  8. <p class="pages">
  9.  
  10. <?php
  11. mysql_connect("localhost", "asdad", "asdad");
  12. mysql_select_db("asdada");
  13.  
  14.  
  15.  
  16.  
  17. // --------------- Etape 2 -----------------
  18. // On écrit les liens vers chacune des pages
  19. // -----------------------------------------
  20.  
  21. // On met dans une variable le nombre de messages qu'on veut par page
  22. $nombreDeMessagesParPage = 5; // Essayez de changer ce nombre pour voir :o)
  23. // On récupère le nombre total de messages
  24. $retour = mysql_query('SELECT COUNT(*) AS nb_news FROM articlefr');
  25. $donnees = mysql_fetch_array($retour);
  26. $totalDesMessages = $donnees['nb_news'];
  27. // On calcule le nombre de pages à créer
  28. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  29. // Puis on fait une boucle pour écrire les liens vers chacune des pages
  30. echo 'Page : ';
  31. for ($i = 1; $i <= $nombreDePages; $i++)
  32. {
  33. echo '<a href="archivefrall.php?page=' . $i . '">' . $i . '</a> ';
  34. }
  35. ?>
  36.  
  37. </p>
  38.  
  39.  
  40. <?php
  41.  
  42.  
  43. // --------------- Etape 3 ---------------
  44. // Maintenant, on va afficher les messages
  45. // ---------------------------------------
  46.  
  47. if (isset($_GET['page']))
  48. {
  49. $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (arkivalla.php?page=4)
  50. }
  51. else // La variable n'existe pas, c'est la première fois qu'on charge la page
  52. {
  53. $page = 1; // On se met sur la page 1 (par défaut)
  54. }
  55.  
  56. // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
  57. $n= $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  58.  
  59. $retour = mysql_query('SELECT * FROM articlefr ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
  60. ?>
  61.  
  62.  
  63.  
  64.  
  65. <?php
  66.  
  67. while ($donnees = mysql_fetch_array($retour))
  68. {
  69. ?>
  70.  
  71.  
  72.  
  73. <ul style="font-size: 12px;font-weight: bold;">
  74.  
  75. <li><?php
  76.  
  77. $n++;
  78. echo $n;
  79. echo '. ';
  80.  
  81. $titre = nl2br(stripslashes($donnees['titre']));
  82. echo $titre;
  83. ?>
  84. </li>
  85.  
  86.  
  87. </ul>
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95. <p>
  96. <?php
  97.  
  98. $contenu = nl2br(stripslashes($donnees['contenu']));
  99. $contenu = preg_replace('#\[gras\](.+)\/gras\#isU', '<strong>$1</strong>', $contenu);
  100. $contenu = preg_replace('#\[italique\](.+)\/italique\#isU', '<em>$1</em>', $contenu);
  101. $contenu = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\/color\#isU', '<span style="color:$1">$2</span>', $contenu);
  102. $contenu = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $contenu);
  103. $contenu = preg_replace ('#\[img\](.+)\/img\#iU', '<img src="../images/$1.jpg" alt="$1" style="float:right;margin:10px;margin-right:0px;" />', $contenu);
  104. echo $contenu;
  105. ?>
  106. </p>
  107.  
  108. <p><em> Anne Edelstam <?php echo date('d/m/Y k\l H\hi', $donnees['timestamp']); ?></em></p><br />
  109.  
  110. <?php
  111. } // Fin de la boucle des news
  112. ?>
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. <p class="pages">
  121.  
  122. <?php
  123. echo 'Page : ';
  124. for ($i = 1; $i <= $nombreDePages; $i++)
  125. {
  126. echo '<a href="archivefrall.php?page=' . $i . '">' . $i . '</a> ';
  127. }
  128. ?>
  129. </p>
  130.  
  131.  
  132.  
  133.  
  134.  
  135. </div>


Configuration: Windows 7 / Firefox 3.5.8
Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

Pour faire une ancre il faut ajouter un attribut name à un endroit de ta page.
Exemple : <p name="ancre1">contenu du message qui a une ancre</p>

Après, quand tu appelles la page, tu mets:
mapage.php#ancre1

Et ça va directement scroller jusqu'à l'élément ayant pour nom "ancre1"

oui mais le problem, c'est que les articles dans ce site je les ajoute sur une base de donnée. donc comment je pourai modifier mon code pour que quand je clique sur un lien ca retombe sur le meme article en passant par l'id de l'article dans la base de donnée?
Expert Programmation

ben tu fais un truc du genre


<p name="ancre<?=id_article?>"> titre de ton article </p>

Contenu de l'article....





et lorsque tu insère le lien vers l'article tu fais
<a href ="page.php#ancre<?=id_article?>""> lien vers la page</a>

et ça devrait rouler, si mes souvenirs sont bons....


PS : il faudra remplir la donnée "id_article" en interrogeant la base de données....

Expert Programmation

Salut,

Ca ne change rien que tu les ajoutes dans une base de données...
Tu ajoutes un name sur cet élément par exemple :
<ul style="font-size: 12px;font-weight: bold;">
Avec j'imagine $donnees['id'], tu peux mettre un préfixe si tu veux.

Et dans ta page Archive, tu remplaces ton lien
echo '. <a href="archivefrall.php">';
par un lien avec archivefrall.php#id

N'oublies pas que tu vas devoir gérer les pages aussi, vu que tu n'as pas le même paging dans la page Archive et Archive: les articles en entier.
Tu auras juste besoin de diviser l'élément de la boucle courant par le nombre d'éléments par page et ajouter 1 pour avoir la bonne page.

je comprend pas vraiment... j'ai changé en ajoutant #id sur la premiere page et name="id" dans le <ul style="font-size: 12px;font-weight: bold;"> de la deuxieme mais ca ne marche toujours pas... tu pourai me le montrer sur mon script ce que tu veu dir?

ah non jai mis

  1. echo '. <a href="archivefrall.php?article='.$n.'#article-'.$n.'">';
sur la premiere page

et
  1. echo '<p id="article-'.$n.'?page='.$i.'">'.$titre.'</p>';
sur la deuxieme

sauf que en cliquant sur un lien par exemple le numéro 8, le navigateur ne va pas automatiquement sur la "?page=2" de la Deuxieme page : http://www.articlesfromparis.com/francais/archivefrall....

Jai essayé en ajoutant '?page='.i$.' sur le lien de la premiere page et sur lancre de la deuxieme page mais ca ne fait rien...
Expert Programmation

Salut,

Il ne faut pas mettre des ? pour séparer des paramètres, mais des &
Le ? va au début pour indiquer que ce qui suit sont des paramètres, mais après on les sépare par des &

Exemple
archivefrall.php?article=123&page=2

Par contre, ce que tu utilises pour compter le nombre de page n'a pas l'air d'être correct vu que tu affiches tout le temps page=3
Expert Programmation

Comme je t'ai dit plus haut, le format c'est pas de rajouter des ?
Il faut que ton lien soit de la forme:
archivefrall.php?article=8&page=3#article-8

Après, pour ton numéro de page incorrect, je ne sais pas à quoi correspond ta variable $i mais elle a l'air d'être égal au nombre de pages plutôt qu'a la page de l'item.
Vu que tu as 5 items par page, il faut que tu calcules la page de ton élément en fonction de son numéro et du nombre d'items par page.

Comme ca donc? J'ai créé
$nombreDeMessagesParPageAncre
et $p pour indiquer la page
mais j'ai l'impression que c'est faut comme la ca me donne juste le nombredepages... je n'arrive pas à trouver la vrai solution ma cervelle est en feu.

  1. <p class="pages">
  2.  
  3. <?php
  4. mysql_connect("asdad");
  5. mysql_select_db("sada");
  6.  
  7.  
  8.  
  9.  
  10. $nombreDeMessagesParPageAncre = 5;
  11. $nombreDeMessagesParPage = 10;
  12.  
  13. $retour = mysql_query('SELECT COUNT(*) AS nb_news FROM articlefr');
  14. $donnees = mysql_fetch_array($retour);
  15. $totalDesMessagesAncre = $donnees['nb_news'];
  16. $totalDesMessages = $donnees['nb_news'];
  17.  
  18. $nombreDePagesAncre = ceil($totalDesMessagesAncre / $nombreDeMessagesParPageAncre);
  19. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  20.  
  21. echo 'Page : ';
  22. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  23. {
  24. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  25. }
  26. ?>
  27.  
  28. </p>
  29.  
  30.  
  31. <?php
  32.  
  33.  
  34.  
  35.  
  36. if (isset($_GET['page']))
  37. {
  38. $page = $_GET['page'];
  39. }
  40. else
  41. {
  42. $page = 1;
  43. }
  44.  
  45.  
  46. $n= $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  47.  
  48. $retour = mysql_query('SELECT * FROM articlefr ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
  49. ?>
  50.  
  51.  
  52.  
  53. <ul style="font-size: 12px;font-weight: bold;">
  54. <?php
  55. for($p = 1 ; $p <= $nombreDePagesAncre ; $p++)
  56. {
  57. while ($donnees = mysql_fetch_array($retour))
  58. {?>
  59. <li><?php
  60.  
  61. $n++;
  62. echo $n;
  63. echo '. <a href="archivefrall.php?article='.$n.'&page='.$p.'#article-'.$n.'">';
  64.  
  65. $titre = nl2br(stripslashes($donnees['titre']));
  66. echo $titre;
  67. echo '</a>';?>
  68. </li><?php
  69. } } ?>
  70. </ul>
  71.  
  72. <br />
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81. <p class="pages">
  82.  
  83. <?php
  84. echo 'Page : ';
  85. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  86. {
  87. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  88. }
  89. ?>
  90. </p>
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103. </div>
Expert Programmation

il te faut juste un algorithme...
Comment tu calculerais la page en sachant le nombre d'éléments par page et le numéro de l'élément ?
L'élément 1 sera sur la page 1,
Elément 2 = page 1
élément 3 = page 1
élément 4 = page 1
élément 5 = page 1
élément 6 = page 2
...
élément 10 = page 2
élément 11 = page 3

A partir de ça, tu peux calculer ton numéro de page non ?
Expert Programmation

Fais voir la requête que tu as fait, parce qu'il fallait changer les noms de variables.
Et plutôt que floor() + 1, tu peux plutôt utiliser ceil :
ceil($id_element / $nb_elements_par_page)

1er page

  1. <h1>Archive <a href="archivefrall.php">(voir les articles en entier)</a></h1>
  2.  
  3.  
  4.  
  5.  
  6. <p class="pages">
  7.  
  8. <?php
  9. mysql_connect("dfgdg);
  10. mysql_select_db("fgdf
  11.  
  12.  
  13.  
  14.  
  15. $nombreDeMessagesParPageAncre = 5;
  16. $nombreDeMessagesParPage = 10;
  17.  
  18. $retour = mysql_query('SELECT COUNT(*) AS nb_news FROM articlefr');
  19. $donnees = mysql_fetch_array($retour);
  20. $totalDesMessagesAncre = $donnees['nb_news'];
  21. $totalDesMessages = $donnees['nb_news'];
  22.  
  23. $nombreDePagesAncre = ceil($totalDesMessagesAncre / $nombreDeMessagesParPageAncre);
  24. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  25.  
  26. echo 'Page : ';
  27. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  28. {
  29. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  30. }
  31. ?>
  32.  
  33. </p>
  34.  
  35.  
  36. <?php
  37.  
  38.  
  39.  
  40.  
  41. if (isset($_GET['page']))
  42. {
  43. $page = $_GET['page'];
  44. }
  45. else
  46. {
  47. $page = 1;
  48. }
  49.  
  50.  
  51. $n= $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  52.  
  53. $retour = mysql_query('SELECT * FROM articlefr ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
  54. ?>
  55.  
  56.  
  57.  
  58. <ul style="font-size: 12px;font-weight: bold;">
  59. <?php
  60. for($p = 1 ; $p <= $nombreDePagesAncre ; $p++)
  61. {
  62. while ($donnees = mysql_fetch_array($retour))
  63. {?>
  64. <li><?php
  65.  
  66. $n++;
  67. echo $n;
  68. echo '. <a href="archivefrall.php?article='.$n.'&page='.$p.'#article-'.$n.'">';
  69.  
  70. $titre = nl2br(stripslashes($donnees['titre']));
  71. echo $titre;
  72. echo '</a>';?>
  73. </li><?php
  74. } } ?>
  75. </ul>
  76.  
  77. <br />
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86. <p class="pages">
  87.  
  88. <?php
  89. echo 'Page : ';
  90. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  91. {
  92. echo '<a href="archivefr.php?page=' . $i . '">' . $i . '</a> ';
  93. }
  94. ?>
  95. </p>
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. </div>


2e page
  1. <h1>Archive: les articles en entier</h1>
  2.  
  3. <p class="pages">
  4.  
  5. <?php
  6. mysql_connect("sdaadsd");
  7. mysql_select_db("sadad");
  8.  
  9.  
  10.  
  11.  
  12. // --------------- Etape 2 -----------------
  13. // On écrit les liens vers chacune des pages
  14. // -----------------------------------------
  15.  
  16. // On met dans une variable le nombre de messages qu'on veut par page
  17. $nombreDeMessagesParPage = 5; // Essayez de changer ce nombre pour voir :o)
  18. // On récupère le nombre total de messages
  19. $retour = mysql_query('SELECT COUNT(*) AS nb_news FROM articlefr');
  20. $donnees = mysql_fetch_array($retour);
  21. $totalDesMessages = $donnees['nb_news'];
  22. // On calcule le nombre de pages à créer
  23. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  24. // Puis on fait une boucle pour écrire les liens vers chacune des pages
  25. echo 'Page : ';
  26. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  27. {
  28. echo '<a href="archivefrall.php?page=' . $i . '">' . $i . '</a> ';
  29. }
  30. ?>
  31.  
  32. </p>
  33.  
  34.  
  35. <?php
  36.  
  37.  
  38. // --------------- Etape 3 ---------------
  39. // Maintenant, on va afficher les messages
  40. // ---------------------------------------
  41.  
  42. if (isset($_GET['page']))
  43. {
  44. $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (arkivalla.php?page=4)
  45. }
  46. else // La variable n'existe pas, c'est la première fois qu'on charge la page
  47. {
  48. $page = 1; // On se met sur la page 1 (par défaut)
  49. }
  50.  
  51. // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
  52. $n= $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  53.  
  54. $retour = mysql_query('SELECT * FROM articlefr ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
  55. ?>
  56.  
  57.  
  58.  
  59.  
  60. <?php
  61.  
  62. while ($donnees = mysql_fetch_array($retour))
  63. {
  64. ?>
  65.  
  66.  
  67.  
  68. <ul style="font-size: 12px;font-weight: bold;">
  69.  
  70. <li><?php
  71.  
  72. $n++;
  73. echo $n;
  74. echo '. ';
  75.  
  76. $titre = nl2br(stripslashes($donnees['titre']));
  77. echo '<p id="article-'.$n.'">'.$titre.'</p>';
  78.  
  79. ?>
  80. </li>
  81.  
  82.  
  83. </ul>
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91. <p>
  92. <?php
  93.  
  94. $contenu = nl2br(stripslashes($donnees['contenu']));
  95. $contenu = preg_replace('#\[gras\](.+)\[/gras\]#isU', '<strong>$1</strong>', $contenu);
  96. $contenu = preg_replace('#\[italique\](.+)\[/italique\]#isU', '<em>$1</em>', $contenu);
  97. $contenu = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $contenu);
  98. $contenu = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $contenu);
  99. $contenu = preg_replace ('#\[img\](.+)\[/img\]#iU', '<img src="../images/$1.jpg" alt="$1" style="float:right;margin:10px;margin-right:0px;" />', $contenu);
  100. echo $contenu;
  101. ?>
  102. </p>
  103.  
  104. <p><em> Anne Edelstam <?php echo date('d/m/Y k\l H\hi', $donnees['timestamp']); ?></em></p><br />
  105.  
  106. <?php
  107. } // Fin de la boucle des news
  108. ?>
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116. <p class="pages">
  117.  
  118. <?php
  119. echo 'Page : ';
  120. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  121. {
  122. echo '<a href="archivefrall.php?page=' . $i . '">' . $i . '</a> ';
  123. }
  124. ?>
  125. </p>
  126.  
  127.  
  128.  
  129.  
  130.  
  131. </div>
Lassé par la pub ? Créez un compte
Tom's guide dans le monde