IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Session_Start() et header already sent


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    formateur
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Par défaut Session_Start() et header already sent
    Bonjour,

    J'ai le même problème que les autres personnes avec l'un des espaces du site web de notre société:
    - Warning: session_start(): Cannot send session cookie - headers already sent by
    - Warning: session_start(): Cannot send session cache limiter - headers already sent
    - Warning: Cannot modify header information - headers already sent by
    Je ne suis pas webmaster et ne possède donc aucune connaissance en PHP, le site a été développé par l'un de nos anciens prestataires qui aujourd'hui est injoignable.

    J'ai essayé toutes les solutions proposées dans ce forum et les autres, mais malheureusement aucune n'a fonctionné:
    - Réencodage du fichier en UTF-8 sans BOM
    - Placement du session_start en début de fichier
    - Suppression des éventuels espaces invisibles
    - Création du dossier sessions à la racine du site
    - ob_start et ob_flush

    Voici le code de la page accueil.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     session_start();
     set_time_limit(0);
     
     $_page->initialiseFilAriane();
     
     require_once(LSL_WEBSITE_DOSSIER.'ressources/dependances/EXF/formateur.php');
     if (isset($_POST['formateur_id']) && isset($_POST['formateur_passe']))
     {
      $_formateur = Formateur::getFormateurPourPseudoEtPasse($_POST['formateur_id'], $_POST['formateur_passe']);
      $_formateur->enregistreSession();
     }
     else $_formateur = Formateur::getFormateurPourSession();
     
     if (!$_formateur->existe())
     {
      header('Location: '.SITE_RACINE);
      exit();
     }
     
     require_once(LSL_WEBSITE_DOSSIER.'ressources/dependances/EXF/formation.php');
     if ($_formateur->estAdministrateur())
     {
      $_formations = Formation::getFormationTitresParFormationCategories();
      if (isset($_POST['generation_pdf']))
      {
       require_once(LSL_WEBSITE_DOSSIER.'ressources/dependances/EXF/pdf2.php');
       EXFPdf2::genereTousLesPdf(Formation::getFormationsVisiblesParFormationCategories());
      }
     }
     else $_formations = Formation::getFormationTitresParFormationCategoriesPourFormateur($_formateur);
    ?>
    Merci de votre aide ! :-)

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, les informations que vous nous donnez semble incomplète.

    En effet, au début de la page vous avez un objet instancié, mais on ne sait pas comment il est arrivé là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $_page->initialiseFilAriane();
    Cela veut dire plusieurs chose, mais le plus probable est que votre page accueill.php est appelé au travers d'une autre page PHP, j'imagine index.php, peux-t-on vérifier de ce côté et éventuellement nous montrer le code de index.php

  3. #3
    Membre averti
    Homme Profil pro
    formateur
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Par défaut
    Bonsoir. Je n'ai pas de page index.php. Mais vu que le message dit :

    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/o102272/public_html/LSL_website/ressources/dependances/article_groupe.php:1) in /home/o102272/public_html/LSL_website/ressources/pages/controleurs/EXF/espace_formateurs/accueil.php on line 2
    peut-être que la page appelante est article_groupe.php dont voici le code ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    	// v. 20110707
    	// LSL (c) Tous droits réservés
     
    	require_once('langue.php');
     
    	class ArticleGroupe
    	{
    		private $id;
    		private $client;
    		private $langue;
    		private $titre;
    		private $description;
     
    		private $nombreArticles = 0;
     
    		function ArticleGroupe($id = null, $client = null, $langue = null, $titre = null, $description = null)
    		{
    			$this->id = $id;
    			$this->client = $client;
    			$this->langue = $langue;
    			$this->titre = $titre;
    			$this->description = $description;
     
    			if ($this->langue == null)
    				$this->langue = new Langue();
    			if ($this->client == null)
    				$this->client = new Client(null);
    		}
    		public function getId() { return $this->id; }
    		public function getClient() { return $this->client; }
    		public function getLangue() { return $this->langue; }
    		public function setLangue($langue) { $this->langue = $langue; }
    		public function getTitre() { return $this->titre; }
    		public function setTitre($titre) { $this->titre = $titre; }
    		public function getDescription() { return $this->description; }
    		public function setDescription($description) { $this->description = $description; }
    		public function getNombreArticles() { return $this->nombreArticles; }
    		public function setNombreArticles($nombreArticles) { $this->nombreArticles = $nombreArticles; }
     
    		public function existe() { return $this->id != null; }
    		public function enregistre()
    		{
    			if ($this->existe())
    			{
    				$sql = 'UPDATE '.MYSQL_PREFIXE.'article_groupe SET '.
    						'langue_id = '.$this->langue->getId().', '.
    						'article_groupe_titre = \''.addslashes($this->titre).'\', '.
    						'article_groupe_description = \''.addslashes($this->description).'\' '.
    					'WHERE article_groupe_id = '.$this->id;
    				return mysql_query($sql);
    			}
    			else
    			{
    				$sql = 'INSERT INTO '.MYSQL_PREFIXE.'article_groupe('.
    						'client_id, '.
    						'langue_id, '.
    						'article_groupe_titre, '.
    						'article_groupe_description'.
    					') VALUES ('.
    						$this->client->getId().', '.
    						$this->langue->getId().', '.
    						'\''.addslashes($this->titre).'\', '.
    						'\''.addslashes($this->description).'\''.
    					')';
    				if (mysql_query($sql))
    				{
    					$this->id = mysql_insert_id();
    					return true;
    				}
    			}
    			return false;
    		}
     
     
    		public function getArticleGroupeParId_et_Client($articleGroupeId, $client)
    		{
    			$sql = 'SELECT langue_id, article_groupe_titre, article_groupe_description, COUNT(article_id) AS total '.
    				'FROM '.MYSQL_PREFIXE.'article_groupe '.
    				'LEFT JOIN '.MYSQL_PREFIXE.'article ON '.MYSQL_PREFIXE.'article.article_groupe_id = '.MYSQL_PREFIXE.'article_groupe.article_groupe_id '.
    				'WHERE '.MYSQL_PREFIXE.'article_groupe.article_groupe_id = '.$articleGroupeId.' '.
    					'AND '.MYSQL_PREFIXE.'article_groupe.client_id = '.$client->getId().' '.
    				'GROUP BY '.MYSQL_PREFIXE.'article_groupe.article_groupe_id';
    			if ($requete = mysql_query($sql))
    				if ($resultat = mysql_fetch_object($requete))
    				{
    					$articleGroupe = new ArticleGroupe($articleGroupeId, $client, new Langue(intval($resultat->langue_id)), $resultat->article_groupe_titre, $resultat->article_groupe_description);
    					$articleGroupe->setNombreArticles(intval($resultat->total));
    					return $articleGroupe;
    				}
    			return new ArticleGroupe();
    		}
    		public function getArticleGroupesParClient($client)
    		{
    			$tab = array();
    			$sql = 'SELECT article_groupe_id, article_groupe_titre, '.MYSQL_PREFIXE.'langue.langue_id, langue_nom, langue_icone '.
    				'FROM '.MYSQL_PREFIXE.'article_groupe '.
    					'INNER JOIN '.MYSQL_PREFIXE.'langue ON '.MYSQL_PREFIXE.'article_groupe.langue_id = '.MYSQL_PREFIXE.'langue.langue_id '.
    				'WHERE client_id = '.$client->getId();
    			if ($requete = mysql_query($sql))
    				while ($resultat = mysql_fetch_object($requete))
    					$tab[] = new ArticleGroupe(intval($resultat->article_groupe_id), null, new Langue(intval($resultat->langue_id), $resultat->langue_nom, $resultat->langue_icone), $resultat->article_groupe_titre);
    			return $tab;
    		}
    	}
    ?>
    En tout cas je vous remercie beaucoup de votre aide
    Manu.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Oki, on continue l'exploration alors :

    Pouvez-vous faire dans la page acceuil.php Egalement me mettre le contenu de langue.php ?

    Vu le code SQL qui est assez vieux, auriez-vous mis à jour votre PHP de ces jours-ci ?

  5. #5
    Membre averti
    Homme Profil pro
    formateur
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Par défaut
    ça me renvoie :
    Parse error: syntax error, unexpected '$_page' (T_VARIABLE) in /home/o102272/public_html/LSL_website/ressources/pages/controleurs/EXF/espace_formateurs/accueil.php on line 6
    Effectivement notre hébergeur HOSTPAPA a mis à jour le PHP la semaine dernière.

    Je n'ai pas trouvé le fichier langue.php. Je te l'envoie dès que je le trouve.

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je dis ça, mais le dev qui a utilisé addslashes() comme fonction d'échappement des données MySQL doit être en fuite maintenant.
    Pour échapper correctement les données, il faut utiliser mysql_real_escape_string().
    Et pour finir, les fonctions mysql_xxx() vont passer à la trappe, il faudrait reprendre le code en les remplaçant soit par mysqli_xxx(), soit par PDO.

    Pour éviter des problèmes de ce genre, il faut aussi penser à ne jamais utiliser la balise fermante ?> en fin de fichier .php

  7. #7
    Membre averti
    Homme Profil pro
    formateur
    Inscrit en
    Octobre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : formateur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 17
    Par défaut
    voci le langue.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
    	// v. 20110707
    	// LSL (c) Tous droits réservés
     
    	class Langue
    	{
    		private $id;
    		private $nom;
    		private $icone;
    		private $codeIso639_1;
     
    		function Langue($id = null, $nom = null, $icone = null, $codeIso639_1 = null)
    		{
    			$this->id = $id;
    			$this->nom = $nom;
    			$this->icone = $icone;
    			$this->codeIso639_1 = $codeIso639_1;
    		}
    		public function getId() { return $this->id; }
    		public function getNom() { return $this->nom; }
    		public function getIcone() { return $this->icone; }
    		public function getCodeIso639_1() { return $this->codeIso639_1; }
     
    		public function getIconeChemin() { return LSL_WEBSITE_RACINE.'images/icones/drapeaux/'.$this->icone; }
    		public function getIconeHtml() { return '<img src="'.$this->getIconeChemin().'" alt="'.$this->nom.'" title="'.$this->nom.'" width="16" height="11" />'; }
     
    		public function getLangues()
    		{
    			$tab = array();
    			$sql = 'SELECT langue_id, langue_nom, langue_icone '.
    				'FROM '.MYSQL_PREFIXE.'langue '.
    				'ORDER BY langue_nom ASC';
    			if ($requete = mysql_query($sql))
    				while ($resultat = mysql_fetch_object($requete))
    					$tab[] = new Langue(intval($resultat->langue_id), $resultat->langue_nom, $resultat->langue_icone);
    			return $tab;
    		}
    	}
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/01/2016, 23h20
  2. headers already sent - session_start()
    Par hedgehog dans le forum Langage
    Réponses: 3
    Dernier message: 11/11/2009, 13h16
  3. session_start() : Cannot send session cache limiter - headers already sent
    Par Keweed dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/09/2009, 10h14
  4. session_start : headers already sent
    Par youyouta dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2008, 14h11
  5. Réponses: 3
    Dernier message: 21/06/2006, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo