affichage page/page et session

Répondre
imboa
le 25/03/2008 à 14:05
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.
<?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.'">|&lt;</A>&nbsp;&nbsp;';
}
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.'&nbsp;-&nbsp;';
}
}
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>&nbsp;-&nbsp;";
}
}
}

$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 = '&nbsp;&nbsp;<A HREF="'.$cible.'">&gt;|</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
imboa
LA GLOBULE
le 25/03/2008 à 14:15
LA GLOBULE
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
le 25/03/2008 à 14:58
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
imboa
LA GLOBULE
le 25/03/2008 à 15:37
LA GLOBULE
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
le 26/03/2008 à 09:22
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
le 26/03/2008 à 09:48
imboa
l'url dans la barre d'adresse devient :
http://site/admin_membres/identification.php?debut=26
imboa
imboa
le 26/03/2008 à 09:49
imboa
non ça exactement:
http://localhost/site/admin/admin/admin_membres/identification.php?debut=26
imboa
LA GLOBULE
le 26/03/2008 à 11:40
LA GLOBULE
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

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours