affichage page/page et session

Répondre
imboa
imboa
Déconnecté
imboa
bonjour à tous
j'ai utiliser ce script pour afficher la liste de mes membres mais sur une page admin que je veux protéger par mot de passe donc avec une session admin.
  1. <?php
  2.  
  3. //<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. function barre_navigation ($nb_total,  
  6. $nb_affichage_par_page,  
  7. $debut,  
  8. $nb_liens_dans_la_barre) {  
  9.  
  10. $barre = '';  
  11.  
  12. // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT  
  13. if ($_SERVER['QUERY_STRING'] == "") {  
  14. $query = $_SERVER['PHP_SELF'].'?debut=';  
  15. }  
  16. else {  
  17. $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);  
  18. $nb_element = count ($tableau);  
  19. if ($nb_element == 1) {  
  20. $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';  
  21. }  
  22. else {  
  23. if ($tableau[0] == "") {  
  24. $query = $_SERVER['PHP_SELF'].'?debut=';  
  25. }  
  26. else {  
  27. $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';  
  28. }  
  29. }  
  30. }  
  31.  
  32. // on calcul le numéro de la page active  
  33. $page_active = floor(($debut/$nb_affichage_par_page)+1);  
  34. // on calcul le nombre de pages total que va prendre notre affichage  
  35. $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);  
  36.  
  37. // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)  
  38. // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11  
  39. if ($nb_liens_dans_la_barre%2==0) {  
  40. $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;  
  41. $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);  
  42. }  
  43. else {  
  44. $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));  
  45. $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));  
  46. }  
  47.  
  48. if ($cpt_deb1 <= 1) {  
  49. $cpt_deb = 1;  
  50. $cpt_fin = $nb_liens_dans_la_barre;  
  51. }  
  52. elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {  
  53. $cpt_deb = $cpt_deb1;  
  54. $cpt_fin = $cpt_fin1;  
  55. }  
  56. else {  
  57. $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;  
  58. $cpt_fin = $nb_pages_total;  
  59. }  
  60.  
  61. if ($nb_pages_total <= $nb_liens_dans_la_barre) {  
  62. $cpt_deb=1;  
  63. $cpt_fin=$nb_pages_total;  
  64. }  
  65.  
  66. // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page  
  67. if ($cpt_deb != 1) {  
  68. $cible = $query.(0);  
  69. $lien = '<A HREF="'.$cible.'">|&lt;</A>&nbsp;&nbsp;';  
  70. }  
  71. else {  
  72. $lien='';  
  73. }  
  74. $barre .= $lien;  
  75.  
  76. // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active  
  77. for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {  
  78. if ($cpt == $page_active) {  
  79. if ($cpt == $nb_pages_total) {  
  80. $barre .= $cpt;  
  81. }  
  82. else {  
  83. $barre .= $cpt.'&nbsp;-&nbsp;';  
  84. }  
  85. }  
  86. else {  
  87. if ($cpt == $cpt_fin) {  
  88. $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);  
  89. $barre .= "'>".$cpt."</A>";  
  90. }  
  91. else {  
  92.  
  93. $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);  
  94. $barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";  
  95. }  
  96. }  
  97. }  
  98.  
  99. $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));  
  100. if (($nb_total % $nb_affichage_par_page) == 0) {  
  101. $fin = $fin - $nb_affichage_par_page;  
  102. }  
  103.  
  104. // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation  
  105. if ($cpt_fin != $nb_pages_total) {  
  106. $cible = $query.$fin;  
  107. $lien = '&nbsp;&nbsp;<A HREF="'.$cible.'">&gt;|</A>';  
  108. }  
  109. else {  
  110. $lien='';  
  111. }  
  112. $barre .= $lien;  
  113.  
  114. return $barre;  
  115.  
  116.  
  117. }  
  118.  
  119.  
  120. ?> 




puis ça entre <body></body>

  1. <?php // on se connecte à notre base  
  2. $base = mysql_connect ('localhost', 'root', '');  
  3. mysql_select_db ('nom de la base', $base);  
  4.  
  5. // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages  
  6. $sql = 'SELECT count(*) FROM membre';  
  7. $reference = 'SELECT societe FROM membre';  
  8.  
  9. // on exécute cette requête  
  10. $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
  11.  
  12. // on récupère le nombre d'éléments à afficher  
  13. $nb_total = mysql_fetch_array($resultat);  
  14.  
  15. // on teste si ce nombre de vaut pas 0  
  16. if (($nb_total = $nb_total[0]) == 0) {  
  17. echo 'Aucune réponse trouvée';  
  18. }  
  19. else {  
  20. //echo '<table>
  21. //<tr><td><td>Description</td></tr>';  
  22.  
  23. // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0  
  24. if (!isset($_GET['debut'])) $_GET['debut'] = 0;  
  25.  
  26. $nb_affichage_par_page = 26;  
  27.  
  28. // Préparation de la requête avec le LIMIT  
  29. $sql = 'SELECT * FROM membre ORDER BY num_membre ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;  
  30.  
  31. // on exécute la requête  
  32. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
  33.  
  34. echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 6).'</span>'; 
  35.  
  36.  
  37.  
  38.       
  39. while ($data = mysql_fetch_array($req)) 
  40.  
  41.       { 
  42.       $societe=htmlentities(trim($data['societe'])); 
  43.       $adresse= htmlentities(trim($data['adresse'])); 
  44.       $mail= htmlentities(trim($data['mail'])); 
  45.       
  46.       
  47.       // on affiches les résultats dans la <table>
  48.       echo '<table width=450 height=30 border=0 >
  49.  
  50.           <tr>
  51.                <td width=400 align=left valign=left>',$societe,'</td>
  52.                <td width=385 align=right valign=right>',$mail,'</a></td>
  53.                </tr>
  54.  
  55.             </table>'; 
  56.  
  57.       } 
  58.       
  59.          
  60. //<td width=385 align=left valign=middle>',$mail,'</td>        
  61. }  
  62.  
  63. // on libère l'espace mémoire alloué pour cette requête  
  64. mysql_free_result ($req);  
  65.  
  66. //echo '</table><br />';  
  67. {  
  68. // on affiche enfin notre barre  
  69. echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 6).'</span>';  
  70. }  
  71.  
  72.  
  73. // on libère l'espace mémoire alloué pour cette requête  
  74. mysql_free_result ($resultat);  
  75. // on ferme la connexion à la base de données.  
  76. mysql_close ();  
  77. //echo '</table><br />';  
  78.  
  79. ?> 



enfin ça dans le <head></head>

  1. <?php // On prolonge la session  
  2. session_start();  
  3.  
  4. //On teste si la variable de session existe et contient une valeur  
  5. if(empty($_SESSION['login'])) {  
  6.  
  7. // Si inexistante ou nulle, on redirige vers le formulaire de login  
  8. header('Location: Admin_login.php');  
  9. exit();  
  10. } 
  11.       
  12.       
  13. // Ici on est bien loggué, on affiche un message  
  14. echo 'Bienvenue ', $_SESSION['login'];  
  15. ?> 


alors mon prob est que j'ai toujours cette erreur dans la page à proteger

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\www\site\admin\admin\admin_membres\admin_membres.php:143) in c:\www\site\admin\admin\admin_membres\admin_membres.php on line 289
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Alors, le problème est simple, tu ne dois jamais faire de sortie HTML avant l'utilisation d'un session_start.

Or la, tu affiches quelque chose à la ligne 143 de admin_membres.php alors que tu as un session_start à la ligne 289 de admin_membres.php.
imboa
imboa
Déconnecté
imboa
merci bcp la globule
tu vois,il n'y a que de script java à la ligne 143 et si je met de ligne vide là il affiche la même erreur 143.
mais si je comprends bien le script "affichage page par page" c'est qu'à chaque fois si la premiere page ne suffit pas pour afficher les lignes de la base de donnée il recharge à nouveau la même page afin d'afficher les lignes suivantes, et de même pour les autres page,
alors là à chaque chargement de la même page qu'il verifie session_start()
et c'est ici que je demande où je dois mettre session_start()
ça c'est mon raisonnement je dis mais je sais pas s'il y en a d'autre avec solution
merci bien
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
smiley

Bon, pour dire la vérité, je n'ai rien compris à ton charabia, mais la solution, je te l'ai donné.

Sinon, pour ton problème de refresh, ce n'est pas l'affichage "page par page" qui le provoque, mais surement un problème de ton code.
imboa
imboa
Déconnecté
imboa
ok merci,
je vais essayer de voir ça
imboa
imboa
Déconnecté
imboa
encore moi la globule
j'ai fini de trouver le prob.donc je suis bien logé sans erreur
mais quand je bascule vers les autres pages, le 2eme par ex, il n'affiche rien, il affiche du blanc.
imboa
imboa
Déconnecté
imboa
l'url dans la barre d'adresse devient :
http://site/admin_membres/identification.php?debut=26
imboa
imboa
Déconnecté
imboa
non ça exactement:
http://localhost/site/admin/admin/admin_membres/identification.php?debut=26
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Ben une page blanche... on n'est pas devant ton PC pour voir ce qu'il se passe. Surement un problème dans ton PHP, genre un exit ou un truc Z.
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Php