affichage page/page et session
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.
puis ça entre <body></body>
enfin ça dans le <head></head>
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
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.
- <?php
- //<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- function barre_navigation ($nb_total,
- $nb_affichage_par_page,
- $debut,
- $nb_liens_dans_la_barre) {
- $barre = '';
- // 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
- if ($_SERVER['QUERY_STRING'] == "") {
- $query = $_SERVER['PHP_SELF'].'?debut=';
- }
- else {
- $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
- $nb_element = count ($tableau);
- if ($nb_element == 1) {
- $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
- }
- else {
- if ($tableau[0] == "") {
- $query = $_SERVER['PHP_SELF'].'?debut=';
- }
- else {
- $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
- }
- }
- }
- // on calcul le numéro de la page active
- $page_active = floor(($debut/$nb_affichage_par_page)+1);
- // on calcul le nombre de pages total que va prendre notre affichage
- $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
- // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
- // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
- if ($nb_liens_dans_la_barre%2==0) {
- $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
- $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
- }
- else {
- $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
- $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
- }
- if ($cpt_deb1 <= 1) {
- $cpt_deb = 1;
- $cpt_fin = $nb_liens_dans_la_barre;
- }
- elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
- $cpt_deb = $cpt_deb1;
- $cpt_fin = $cpt_fin1;
- }
- else {
- $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
- $cpt_fin = $nb_pages_total;
- }
- if ($nb_pages_total <= $nb_liens_dans_la_barre) {
- $cpt_deb=1;
- $cpt_fin=$nb_pages_total;
- }
- // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
- if ($cpt_deb != 1) {
- $cible = $query.(0);
- $lien = '<A HREF="'.$cible.'">|<</A> ';
- }
- else {
- $lien='';
- }
- $barre .= $lien;
- // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
- for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
- if ($cpt == $page_active) {
- if ($cpt == $nb_pages_total) {
- $barre .= $cpt;
- }
- else {
- $barre .= $cpt.' - ';
- }
- }
- else {
- if ($cpt == $cpt_fin) {
- $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
- $barre .= "'>".$cpt."</A>";
- }
- else {
- $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
- $barre .= "'>".$cpt."</A> - ";
- }
- }
- }
- $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
- if (($nb_total % $nb_affichage_par_page) == 0) {
- $fin = $fin - $nb_affichage_par_page;
- }
- // 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
- if ($cpt_fin != $nb_pages_total) {
- $cible = $query.$fin;
- $lien = ' <A HREF="'.$cible.'">>|</A>';
- }
- else {
- $lien='';
- }
- $barre .= $lien;
- return $barre;
- }
- ?>
puis ça entre <body></body>
- <?php // on se connecte à notre base
- $base = mysql_connect ('localhost', 'root', '');
- mysql_select_db ('nom de la base', $base);
- // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
- $sql = 'SELECT count(*) FROM membre';
- $reference = 'SELECT societe FROM membre';
- // on exécute cette requête
- $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
- // on récupère le nombre d'éléments à afficher
- $nb_total = mysql_fetch_array($resultat);
- // on teste si ce nombre de vaut pas 0
- if (($nb_total = $nb_total[0]) == 0) {
- echo 'Aucune réponse trouvée';
- }
- else {
- //echo '<table>
- //<tr><td><td>Description</td></tr>';
- // 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
- if (!isset($_GET['debut'])) $_GET['debut'] = 0;
- $nb_affichage_par_page = 26;
- // Préparation de la requête avec le LIMIT
- $sql = 'SELECT * FROM membre ORDER BY num_membre ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
- // on exécute la requête
- $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
- echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 6).'</span>';
- while ($data = mysql_fetch_array($req))
- {
- $societe=htmlentities(trim($data['societe']));
- $adresse= htmlentities(trim($data['adresse']));
- $mail= htmlentities(trim($data['mail']));
- // on affiches les résultats dans la <table>
- echo '<table width=450 height=30 border=0 >
- <tr>
- <td width=400 align=left valign=left>',$societe,'</td>
- <td width=385 align=right valign=right>',$mail,'</a></td>
- </tr>
- </table>';
- }
- //<td width=385 align=left valign=middle>',$mail,'</td>
- }
- // on libère l'espace mémoire alloué pour cette requête
- mysql_free_result ($req);
- //echo '</table><br />';
- {
- // on affiche enfin notre barre
- echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 6).'</span>';
- }
- // on libère l'espace mémoire alloué pour cette requête
- mysql_free_result ($resultat);
- // on ferme la connexion à la base de données.
- mysql_close ();
- //echo '</table><br />';
- ?>
enfin ça dans le <head></head>
- <?php // On prolonge la session
- session_start();
- //On teste si la variable de session existe et contient une valeur
- if(empty($_SESSION['login'])) {
- // Si inexistante ou nulle, on redirige vers le formulaire de login
- header('Location: Admin_login.php');
- exit();
- }
- // Ici on est bien loggué, on affiche un message
- echo 'Bienvenue ', $_SESSION['login'];
- ?>
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
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.
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.
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
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

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.
ok merci,
je vais essayer de voir ça
je vais essayer de voir ça
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.
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.
l'url dans la barre d'adresse devient :
http://site/admin_membres/identification.php?debut=26
http://site/admin_membres/identification.php?debut=26
non ça exactement:
http://localhost/site/admin/admin/admin_membres/identification.php?debut=26
http://localhost/site/admin/admin/admin_membres/identification.php?debut=26
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.
Accès rapide :
Remonter 

