8768 sujets

Développement web côté serveur, CMS

Bonjour,

j'ai récupéré sur un site un code php permettant de créer un espace membre sur mon site.
Lorsque j'utilise ce système seul, tout fonctionne.
Par contre lorsque je l'inclue dans mon site, il y a une erreur qui se créer via la commande "header".

a écrit :
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\- T H I E R R Y -\wamp\www\Projet_essais\permanents\menu.inc.html:70) in D:\- T H I E R R Y -\wamp\www\Projet_essais\permanents\espace_prive\membres_administrateurs.inc.html on line 3


Là je ne suis pas tout Smiley eek

Si vous avez des idée, merci
Modifié par Boubou57 (18 Nov 2008 - 16:15)
Une recherche sur "headers already sent" t'aurais éclairé. Cela veut dire que du code html est généré avant la fonction session_start ce qui n'est pas permis (même chose pour les fonctions header et setcookie).
Merci pour cette info, j'ai réussi à me débarasser de mon erreur. Mais v'là autre chose que je ne puis comprendre.
Les trois fichiers ci-dessous fonctionnent très bien (désolé ce sera un peu long)
[b]index.php[/b]
<?php

// on teste si le visiteur a soumis le formulaire de connexion  
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') { 
   if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) { 
 
      $base = mysql_connect ('localhost', 'root', ''); 
      mysql_select_db ('acces_reserve', $base); 
      
      // on teste si une entrée de la base contient ce couple login / pass 
      $sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"'; 
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
      $data = mysql_fetch_array($req, MYSQL_BOTH); 
      mysql_free_result($req); 
      mysql_close(); 
           // si on obtient une réponse, alors l'utilisateur est un membre 
      if (isset ($data[0])) { 
         session_start(); 
         $_SESSION['login'] = $_POST['login']; 
         $_SESSION['prenom'] = $data['prenom'];
         header('Location: membre.php'); 
         exit(); 
      } 
      // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe 
      else { 
         $erreur = 'Compte non reconnu.'; 
      } 
   } 
   else { 
      $erreur = 'Au moins un des champs est vide.'; 
   }  
 }  
?>

<html>
<head>
<title>Accueil</title>
</head>
 
<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php

if (isset($erreur)) { echo '<br /><br />',$erreur;}  
?>

</body>
</html>

[b]membre.php[/b]
<?php
session_start();  
if (!isset($_SESSION['login'])) { 
   header ('Location: deconnexion.php'); 
   exit();  
}  
?>

 
<html>
<head>
<title>Espace membre</title>
</head>
 
<body>
Bienvenue <?php echo htmlentities(trim($_SESSION['prenom'])); ?>! <br/>
<a href="deconnexion.php">Déconnexion</a>
</body>
</html> 

[b]deconnexion.php[/b]
<?php
session_start();  
session_unset();  
session_destroy();  
header('Location: index.php');  
exit();  
?> 


ET ceux-là construits sur la base des précédents ne focntionnent pas Smiley biggol

[b]accueil_espace_prive.php[/b]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- php -->
      <?php
      
      // on teste si le visiteur a soumis le formulaire de connexion  
      if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') { 
         if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) { 
       
            $base = mysql_connect ('localhost', 'root', ''); 
            mysql_select_db ('acces_reserve', $base); 
            
            // on teste si une entrée de la base contient ce couple login / pass 
            $sql = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"'; 
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
            $data = mysql_fetch_array($req, MYSQL_BOTH); 
            mysql_free_result($req); 
            mysql_close(); 
                 // si on obtient une réponse, alors l'utilisateur est un membre 
            if (isset ($data[0])) { 
               session_start(); 
               $_SESSION['login'] = $_POST['login']; 
               $_SESSION['prenom'] = $data['prenom'];
               header('Location: membres_administrateurs.php'); 
               exit(); 
            } 
            // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe 
            else { 
               $erreur = 'Compte non reconnu.'; 
            } 
         } 
         else { 
            $erreur = 'Au moins un des champs est vide.'; 
         }  
       }  
      ?>    
<html>
  <head>
    <meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see  www.w3.org">
 
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <meta name="author" content="François Acher et Thierry Becker">
    <title> Bienvenue sur le site Maths/Sciences de l'académie
      Nancy-Metz
    </title>
    <!-- Fonctions javascripts employées -->
<script type="text/javascript" src="javascripts/menu_deroulant.js">
</script>
<script type="text/JavaScript" src="javascripts/fond_png_transparent.js">
</script>
    <!-- Styles css employés -->
    <link rel="stylesheet" href="styles/mise_en_page_generale.css" type="text/css">
    <link rel="stylesheet" href="styles/texte_page_de_texte.css" type="text/css">
  </head>
  <body style="background-image: url(images/fond-1.jpg);">
    <!-- début de bannière -->
    <div id="entete">
      <?php include('permanents/titre.inc.html'); ?>
    </div>
    <!-- Fin bannière -->
    <!-- Début menu -->
    <div id="menu">
      <?php include('permanents/menu.inc.html'); ?>
    </div>
    <!-- Fin du menu -->
    <!-- Début zone de texte -->
    <div id="texte">
     <!-- Formulaire -->
      <div id="contenu_page_de_texte">
          <div class="image_de_titre">
          <img src="images/fl-rouge-orange.gif">
          </div>
          <H1>CONNEXION A L'ESPACE ADMINISTRATEUR</H1>
          <form action="membres_administrateurs.php" method="post">
                <table>
                    <tr>
                        <td>Votre login :</td>
                        <td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td>
                    </tr>
                    <tr>
                        <td>Votre mot de passe :</td>
                        <td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
                    <tr>
                    <tr>
                        <td><input type="submit" name="connexion" value="Connexion"></td>
                    </tr>
                </table>
          </form>
      </div>
      <?php
        
        if (isset($erreur)) { echo '<br /><br />',$erreur;}  
      ?>
    </div>
    <div id="pied">
      <?php include('permanents/pied.inc.html'); ?>
     </div>
  </body>
</html>


[b]membres_administrateurs.php[/b]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <?php
        session_start();  
        if (!isset($_SESSION['login'])) { 
        header ('Location:deconnexion.php'); 
        exit();  
        }  
    ?> 
<html>
  <head>
    <meta name="generator" content="HTML Tidy for Windows (vers 14 February 2006), see  www.w3.org">
 
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <meta name="author" content="François Acher et Thierry Becker">
    <title> Bienvenue sur le site Maths/Sciences de l'académie
      Nancy-Metz
    </title>
    <!-- Fonctions javascripts employées -->
<script type="text/javascript" src="javascripts/menu_deroulant.js">
</script>
<script type="text/JavaScript" src="javascripts/fond_png_transparent.js">
</script>
    <!-- Styles css employés -->
    <link rel="stylesheet" href="styles/mise_en_page_generale.css" type="text/css">
  </head>
  <body style="background-image: url(images/fond-1.jpg);">
    <!-- début de bannière -->
    <div id="entete">
      <?php include('permanents/titre.inc.html'); ?>
    </div>
    <!-- Fin bannière -->
    <!-- Début menu -->
    <div id="menu">
      <?php include('permanents/menu.inc.html'); ?>
    </div>
    <!-- Fin du menu -->
    <!-- Début zone de texte -->
    <div id="texte">
      Bienvenue <?php echo htmlentities(trim($_SESSION['prenom'])); ?>! <br/>
      <a href="index.php">Déconnexion</a>
    </div>
    <div id="pied">
      <?php include('permanents/pied.inc.html'); ?>
     </div>
  </body>
</html>


[b]deconnexion.php[/b]
<?php
session_start();  
session_unset();  
session_destroy();  
header('Location: accueil_espace_prive.php');  
exit();  
?> 


Mon problème est le suivant:
Lorsque je mets le login et le mot de passe, j'ai l'impression que quel que soit les données que j'entre, je fais une boucle page1 -> page2 -> page3 -> page1 sans m'arrêter et revenir au départ Smiley bawling

Merci de votre aide


-- phpMyAdmin SQL Dump
-- version 2.10.1
--  http://www.phpmyadmin.net
 
-- 
-- Serveur: localhost
-- Généré le : Mar 18 Novembre 2008 à 00:51
-- Version du serveur: 5.0.45
-- Version de PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Base de données: `acces_reserve`
-- 

-- --------------------------------------------------------

-- 
-- Structure de la table `membre`
-- 

CREATE TABLE `membre` (
  `id` int(11) NOT NULL auto_increment,
  `login` text NOT NULL,
  `pass_md5` text NOT NULL,
  `prenom` text NOT NULL,
  `nom` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

-- 
-- Contenu de la table `membre`
-- 
J'ai trouvé Smiley biggrin enfin je crois Smiley rolleyes

Cela provient de l'endroit où doit être meniée l'action dans le formulaire de login:

<form action="membres_administrateurs.php" method="post">
à remplacer par
<form action="accueil_espace_prive.php" method="post">

désolé du dérangement Smiley confused