Administration: probleme Session & Include

Administration: probleme Session & Include - PHP - Programmation

Marsh Posté le 28-06-2005 à 14:41:23    

Bonjour à tous.
Malgrè beaucoup de topic à ce sujet, je n'arrive pas à résoude mon problème  :(  
j'ai en effet un message d'erreur que becoup d'entre nous connait bien:
Warning: session_start(): Cannot send session cache limiter- header already sent...
je sais que ce problème est du a une entête déja envoyé, ceci surement du au fait que j'inclus toutes mes pages dans une page php dont voici l'architecture:
 
Une page index.php qui inclut de nombreux fichiers en fonction du menu:

Code :
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4. <title>********</title>
  5. <link rel="stylesheet" href="style.css" type="text/css">
  6. </head>
  7. <body>
  8. <div id="masthead">
  9.   <h1 id="siteName"><img src="images/D3.gif" width="733" height="44"></h1>
  10.   <div id="clock">
  11.     <?
  12.  $date = date("d-m-Y" );
  13.  $heure = date("H:i" );
  14.  Print("$date $heure" );
  15. ?>
  16. </div>
  17. </div>
  18. <!-- end masthead -->
  19. <div id="content">
  20.   <div id="breadCrumb">
  21.     <a href="index.php?page=accueil">Accueil</a> /
  22. <a href="index.php?page=faq">FAQ</a> /
  23. <a href="index.php?page=contact">Contacts</a> /
  24.   </div>
  25.   <!--<h2 id="pageName">Page Name</h2>-->
  26.   <div class="feature">
  27.     <?php
  28. if (!isset($_GET['page'])) $page= 'index'; else $page= $_GET['page'];
  29. switch($page)
  30. {
  31. /*MENU centre*/
  32. case 'accueil': include ('accueil.html');break;
  33. case 'faq': include ('faq.html');break;
  34. case 'contact':include ('contact.html');break;
  35. /*MENU*/
  36. case 'rechercher':include ('rechercher.php');break;
  37. case 'comparer':include ('comparer.html');break;
  38. case 'administration':include ('membre/login.htm');break;
  39. /*Insertion dans la base*/
  40. if (!isset($_GET['insertion'])) $insertion= 'index'; else $insertion= $_GET['insertion'];
  41. switch($insertion)
  42. {
  43. case 'Descendant':include ('insertion/insertion_descendant.html');break;
  44. case 'Sequence':include ('insertion/insertion_sequence.html');break;
  45. case 'Nom_alternatif':include ('insertion/insertion_id_alternatif.php');break;
  46. }
  47. ?>
  48.   </div>
  49.   <div class="story"></div>
  50. </div>
  51. <!--end content -->
  52. <div id="navBar">
  53.   <div id="search">
  54.    
  55.       <div align="center"><img src="images/logo-transparentsmall.gif" width="174" height="94">
  56.       </div>
  57.    
  58.   </div>
  59.   <div id="sectionLinks">
  60.     <ul>
  61.       <li><a href="index.php?page=rechercher">Rechercher</a></li>
  62.       <li><a href="#">Comparer</a></li>
  63.       <li><a href="index.php?page=inserer">Insérer</a></li>
  64.   <li><a href="index.php?page=mise_a_jour">Mise à jour</a></li> 
  65.       <li><a href="#">Administration</a></li> 
  66.     </ul>
  67.   </div>
  68.   <div id="advert">
  69.     <div align="center"> Centre de Versailles</div>
  70.   </div>
  71.  
  72. </div>
  73. <div align="center">
  74.   <!--end navbar -->
  75. </div>
  76. </body>
  77. </html>


Cette page est donc la page principale de mon site ou j'inclus de nombreuses pages afin d'eviter de recharger celle-ci à chaque fois ou d'utiliser des cadres. Mon probleme arrive lorsque qu'on clic sur Administration de mon menu, on arrive sur un formulaire simple:
login.htm:

Code :
  1. <form action="login.php?page=admin" method='post'>
  2. <table align="center" border="0">
  3.   <tr>
  4.     <td>Login :</td>
  5.     <td><input type="text" name="login" maxlength="250"></td>
  6.   </tr>
  7.   <tr>
  8.     <td>Password</td>
  9.     <td><input type="password"name="pass" maxlength="10"></td>
  10.   </tr>
  11.   <tr>
  12.     <td colspan="2" align="center"><input type="submit" value="log in"></td>
  13.   </tr>
  14. </table>
  15. </form>


 
qui renvoit à:
login.php

Code :
  1. <?
  2. $login=$_POST['login'];
  3. $pass=$_POST['pass'];
  4. // pensez a ouvrir une connexion vers mysql ici
  5. //require("connect.php" );
  6. define ("NOM", "***" );
  7. define ("PASSE","***" );
  8. define ("SERVEUR","localhost" );
  9. define ("BASE","****" );
  10. $connexion = mysql_pconnect(SERVEUR,NOM,PASSE);
  11. mysql_select_db(BASE,$connexion);
  12. if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  13.   extract($_POST);
  14.   // on recupère le password de la table qui correspond au login du visiteur
  15.   $sql = "select pwd from tbl_user where login='$login'";
  16.   $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  17.   $data = mysql_fetch_assoc($req);
  18.   if($data['pwd'] != $pass) {
  19.    echo '<p>Mauvais login / password. Merci de recommencer</p>';
  20.    include('login.htm'); // On inclus le formulaire d'identification
  21.     exit;
  22.   }
  23.   else {
  24. session_start();
  25. $_SESSION['login'] = $login;
  26.     echo 'Vous etes bien logué';
  27.     // ici vous pouvez afficher un lien pour renvoyer
  28.     // vers la page d'accueil de votre espace membres
  29. echo '<a href="test.php">CEci est un test</a>';
  30.   } 
  31. }
  32. else {
  33.   echo '<p>Vous avez oublié de remplir un champ.</p>';
  34.    include('login.htm'); // On inclut le formulaire d'identification
  35.    exit;
  36. }
  37. ?>


 
Je sais qu'il ne faut aucun balise html ou echo ou print avant Session pour ne pas envoyer de header. Cependant ici c'est un peu different car j'inclus login.php dans une autre page php qui forcement a deja envoyé des donnés. Comment pourrais-je faire en sorte que ceci reste compatible sans pour autant tout changer dans l'infrastructure des mes pages?
Y-a t'il moyen de restructurer index.php afin de pouvoir faire en sorte que ça marche?
 
Merci pour vos conseils  :jap:


Message édité par suomi le 28-06-2005 à 14:48:53
Reply

Marsh Posté le 28-06-2005 à 14:41:23   

Reply

Marsh Posté le 28-06-2005 à 14:42:09    

Y'a tout simplement une grave erreur de design dans tes scripts ;)

Reply

Marsh Posté le 28-06-2005 à 14:47:34    

Erreur de design... hum, tu peux approfondir un peu stp...

Reply

Marsh Posté le 28-06-2005 à 14:51:51    

T'as mixé PHP & HTML, c'est pas bien, y'a aucune séparation entre les différentes couches :(


Message édité par FlorentG le 28-06-2005 à 14:51:58
Reply

Marsh Posté le 28-06-2005 à 14:56:35    

Bon je suis d'accord que mélanger html et php c'est pas génial, surtout depuis mon problme de Session. Cependant comment je pourrais faire? Si je mets tous en php, avec des echo partout, le problème est le même j'imagine.
J'utilise une feuille de style css pour disposer mes différents blocs, comment faire alors pour dissocier mon php de mon html?  :??:

Reply

Marsh Posté le 28-06-2005 à 14:57:20    

ya moyen de jouer avec les fonctions de bufferisation, mais comme dit FlorentG vaudrait mieux revoir la logique de tes scripts

Reply

Marsh Posté le 28-06-2005 à 14:58:43    

Via un système de template

Reply

Marsh Posté le 28-06-2005 à 15:00:18    

[:akt]


---------------
http://yoyo.eurotchat.net -> Wednesday 14 September a 02:00:01 up 43 days, 11:47,  2 users,  load average: 0.07, 0.03, 0.00
Reply

Marsh Posté le 28-06-2005 à 15:54:27    


 :cry:  
 
Bon ben je ne connais pas le méchanisme des templates, ça a l'air poussé... je vais lire de la doc la dessus, si c'est la seule solution...
 :jap:

Reply

Marsh Posté le 28-06-2005 à 16:24:00    

suomi a écrit :

si c'est la seule solution...

non pas la seule solution, en attendant tu peux par exemple revoir ta gestion de session et mettre un session_start au debut de index.php

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed