PB d'affichage avec session active/inactive

Résolu
Bonjour,

Je suis en train de développer mon propre site, et j'ai un certain problème avec les sessions actives et inactives.

Tout d'abord, j'ai bien le :
<?php  
 session_start();  
?> 

avant le code (donc avant le DOCTYPE.

Le problème vient de là :
<?php  
 if (isset($_SESSION['login']))  
 {  
  // si une session est active  
  header("location:adminpage.php");  
 }  
 else  
 {  
  // si aucune session n'est active  
  echo  '  
  <form action="login.php" method="post">  
  <table border="0">  
  <tr><td align="center"><b>Utilisateur</b></td>  
 <td><input type="text" name="NomUtilisateur" value="" size="20"></td></tr>  
 <tr><td align="center"><b>Mot de passe</b></td>  
 <td><input type="password" name="MotDePasse" value="" size="20"></td></tr>  
 <tr><td align="center" colspan="2"><br><input type="submit"  
  value="Identifiez-vous !"></td></tr>  
</table>  
</form>';  
 }  
?>  


Lorsque la session est inactive, sa marche nickel j'ai mon formulaire qui s'affiche.
Mais quand ma session est active, et que je reviens sur cette page en question, il y a un message d'erreur :

Warning: Cannot modify header information - headers already sent by (output started at /home/x/public_html/administration.php:30) in /home/x/public_html/administration.php on line 43

La ligne 43 correspond à celle ci
header("location:adminpage.php"); 


Auriez vous votre aide à me proposer ?

Peace

4 réponses

  1. tu dois absolument mettre un header('Location avant tout code html

    tu peux passer par une variable intermediaire

    <?php  
    session_start();
    $aff_formulaire=false;
     if (isset($_SESSION['login']))  
     {  
      // si une session est active  
      header("location:adminpage.php");  
     }  
     else  
     {  
    $aff_formulaire=true;
    }
    
    
    et plus bas dans ton body a l'endroit ou tu veux mettre le formulaire:
    
    if($aff_formulaire){
      //ton formulaire
    }
    1. d'accord session_start() doit être avant tout code html, mais
      <?php
      if (isset($_SESSION['login']))
      {
      // si une session est active
      header("location:adminpage.php");


      aussi doit être avant tout code html
      1. Mais il va alors s'afficher avant même la tête, et le menu.
        Sachant que ce bout de code, est placé en plein milieu du body :s
        1. Daccord merci, j'essaie ça.
          PS : Tu as oublié de fermer la balise :p

          Edit : Sa marche super, je l'ai modifié a ma sauce pour que ça marche sur toutes mes pages.

          Merci, Peace