Accueil > Forum > > > > Probleme de header, message erreur "Cannot modify header information - headers already sent by..."
Probleme de header, message erreur "Cannot modify header information - headers already sent by..."
jeudi 28 octobre 2010 à 18:01:00 |
Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

sebing
|
Bonsoir,
J'ai un message d'erreur qui apparait:
Warning: Cannot modify header information - headers already sent by (output started at /mnt/159/sdd/c/a/plaisirbasket/espace_membres/poussins_adm.php:5) in /mnt/159/sdd/c/a/plaisirbasket/espace_membres/poussins_adm.php on line 156
J'ai une page sur laquelle je veux modifier ou créer des news et une fois la manip faite, je veux que l'on soit rediriger sur une autre page.
La ligne incriminée est Code PHP : header("Location: index.php"); ?>
Voici le code de ma page: Code PHP : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<script type="text/javascript" src="../script.js"></script>
<head>
<title>Page d'administration de l'equipe des poussins de Plaisir Basket Club</title>
<link rel="SHORTCUT ICON" href="/images/icone.gif" >
<META NAME="TITLE" CONTENT="Plaisir Basket Club">
<META NAME="DESCRIPTION" CONTENT="Partager avec Plaisir Basket Club, votre passion, vous trouverez un forum, un album photos et toutes les informations utiles">
<META NAME="KEYWORDS" CONTENT="basket, basketball, basket ball, PBC, pbc, Plaisir, Plaisir basket club, sport, sports, ballon, ballons, forum basket, forums basket, photos basket, photos, album photos, forums, gymnase, gymnase léo lagrange, minimes, poussins, baby, seniors, cadets, cadet, senior, poussin, minime, benjamins, benjamin, benjamines">
<META NAME="CATEGORY" CONTENT="sport">
<meta name="author" content="seb">
<META NAME="REVISIT-AFTER" CONTENT="10 DAYS">
<META NAME="LANGUAGE" CONTENT="FR">
<META NAME="ROBOTS" CONTENT="All">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CHACHE">
<META HTTP-EQUIV="REFRESH" CONTENT="Non">
<link href="../style.css" title="Défaut" rel="stylesheet" type="text/css" media="screen" />
<style type="text/css">
</style>
</head>
<body>
<div id="conteneur">
<div id="header"></div><!-- HEADER -->
<div id="contenu"><!-- CONTENU -->
<div id="centrer_menu"> <!-- Début Menu -->
<?php require "../menu_club.php" ?>
</div>
<div id="left"><!-- COLONNE DE GAUCHE -->
<p>
<?php require "../calendrier.php" ?>
</p>
<p> <span>Nos sponsors</span><br />
<img src="../images/connexion_sports.jpg" alt="connexion_sports";" />
<img src="../images/badji.jpg" alt="Badji;" /></p>
</div><!-- FIN COLONNE DE GAUCHE -->
<div id="right"><!-- COLONNE DE DROITE -->
<div class="haut_ng"></div><!-- GRAND CADRE-->
<div class="fond_ng"><span>Page d'administration de l'équipe des poussins::</span><br />
<div style="text-align: center"></div>
</div>
<div class="bas_ng"></div> <!-- FIN GRAND CADRE-->
<div class="haut_ng"></div><!-- GRAND CADRE-->
<div class="fond_ng"><br/>
<?php
//VARIABLES GENERALES
include("data.php");
global $dbserver;
global $dbdb;
global $dbuser;
global $dbpass;
//CONNEXION A LA BASE DE DONNEES
$base = @MYSQL_CONNECT ("$dbserver","$dbuser","$dbpass") or die ("<p>Erreur: impossible de communiquer avec la base de données.<br>Vérifiez les donnés du fichier <b>data.php</b>.</p>");
mysql_select_db("dbdb",$base);
?>
<!--cretion du tableau des news -->
<table><tr>
<th>Titre</th>
<th>Modifier</th>
<th>Supprimer</th>
</tr>
<?php
//on se connecte a la table news
$retour = mysql_query('SELECT * FROM news_poussins ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo '<a href="poussins_adm.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="poussins_adm.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
</tr>
<?php
} // Fin de la boucle qui liste les news
?>
</TABLE>
<div style="text-align: center"></div>
</div>
<div class="bas_ng"></div> <!-- FIN GRAND CADRE-->
<div class="haut_ng"></div><!-- GRAND CADRE-->
<div class="fond_ng">
<div style="text-align: center">
<?php
if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
{
// On protège la variable "modifier_news" pour éviter une faille SQL
$_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));
// On récupère les infos de la news correspondante
$retour = mysql_query('SELECT * FROM news_poussins WHERE id=\'' . $_GET['modifier_news'] . '\'');
$donnees = mysql_fetch_array($retour);
// On place le titre et le contenu dans des variables simples
$titre = stripslashes($donnees['titre']);
$contenu = stripslashes($donnees['contenu']);
$date = stripslashes($donnees['date']);
$id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on rédige une nouvelle news
{
// Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
$titre = '';
$contenu = '';
$id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>
<form action="poussins_adm.php" method="post">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
<p>
Contenu :<br />
<textarea name="contenu" cols="50" rows="10">
<?php echo $contenu; ?>
</textarea><br />
<input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
<input type="submit" value="Envoyer" />
</p>
</form>
<?php
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
$titre = addslashes($_POST['titre']);
$contenu = addslashes($_POST['contenu']);
// On vérifie si c'est une modification de news ou pas
if ($_POST['id_news'] == 0)
{
// Ce n'est pas une modification, on crée une nouvelle entrée dans la table
mysql_query("INSERT INTO news_poussins VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
}
else
{
// On protège la variable "id_news" pour éviter une faille SQL
$_POST['id_news'] = addslashes($_POST['id_news']);
// C'est une modification, on met juste à jour le titre et le contenu
mysql_query("UPDATE news_poussins SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
}
}
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//--------------------------------------------------------
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
// Alors on supprime la news correspondante
// On protège la variable "id_news" pour éviter une faille SQL
$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
mysql_query('DELETE FROM news_poussins WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
header("Location: index.php"); ?> // c'est cette ligne qui pose problème
</div>
</div>
<div class="bas_ng"></div> <!-- FIN GRAND CADRE-->
<div class="separateur"></div>
</div> <!-- FIN COLONNE DE DROITE -->
<div id="pied"><!-- PIED -->
</div>
</div> <!-- FIN CONTENU -->
</div>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker(".......");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>
Merci par avance
Seb
Ps: désolé mais je n'ai pu souligner la ligne, mais j'ai mis derriere Code PHP : // c'est cette ligne qui pose problème
|
|
jeudi 28 octobre 2010 à 19:46:09 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

kohntark
|
Salut,
Un problème avec une fonction (etc ...) ?
Un réflexe que tu dois TOUJOURS avoir :
consulter la doc
N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec include() ou require(), et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
source :
http://www.php.net/manual/fr/function.header.php
Il ne faut pas se limiter à cette citation et lire l'intégralité de la page (output_buffering, headers_sent() , etc ...)
Menfin dans ton cas se limiter à la citation est préférable (strictement aucun besoin de commencer à envoyer du code HTML alors que la page va être redirigée immédiatement)
Cordialement,
Kohntark -
|
|
jeudi 28 octobre 2010 à 19:52:02 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

sebing
|
Bonsoir kohntark,
Je vais lire la source que tu as mise en lien.
Menfin dans ton cas se limiter à la citation est préférable (strictement aucun besoin de commencer à envoyer du code HTML alors que la page va être redirigée immédiatement)
En fais je ne veux pas redirigée immédiatement, seulement si on modifie la news.
Je cherche et si je trouve la solution je la met.
Merci encore pour l'aide.
Bonne soirée
Seb
|
|
jeudi 28 octobre 2010 à 20:54:44 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

kohntark
|
En fais je ne veux pas redirigée immédiatement, seulement si on modifie la news.
J'entends par "redirigé immédiatement" le fait que rien ne doit apparaitre aux yeux du client.
En gros :
1- Le client envoie via GET la variable 'supprimer_news'
2- Tu exécutes côté serveur les actions que tu souhaites (suppression de la news en l'occurence)
Cela ne génère aucun envoi de données au client.
3- tu envoies le header de redirection
Tu ne suis pas ce schéma : tu envoies du HTML (<!DOCTYPE HTML PUBLIC "-//W3C/...) entre le point 1 et 2, ce qui génère une erreur au point 3
Il n'y a strictement aucun intérêt à procéder ainsi, ton
Code PHP : if (isset($_GET['supprimer_news'])) { // Si on demande de supprimer une news
// Alors on supprime la news correspondante
// On protège la variable "id_news" pour éviter une faille SQL
$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
mysql_query('DELETE FROM news_poussins WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
header("Location: index.php"); ?> // c'est cette ligne qui pose problème
devrait être en tout début de page.
J'avoue, je n'ai que jeté un oeil très rapide à ton code.
Cela étant j'ai comme l'impression qu'il y a de très nombreuses failles de sécurité.
Ca déjà :
Code PHP : // On protège la variable "id_news" pour éviter une faille SQL
$_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
Tu ne protèges pas grand chose en fait.
Pourquoi n'utilises tu pas mysql_real_escape_string() comme tu le fais auparavant, et ne te contente pas de tester si la variable est définie, teste également ce que tu attends. Il s'agit là (vraisemblablement) d'un entier : vire donc tout ce qui n'en serait pas un.
etc ... etc ... ^^
Cordialement,
Kohntark -
|
|
jeudi 28 octobre 2010 à 21:46:16 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

sebing
|
Merci pour tes conseils.
Je vais nettoyer, améliorer et sécuriser le code.
Merci encore.
Bonne soirée
seb
|
|
samedi 30 octobre 2010 à 09:29:32 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

cod57
|
il ne faut pas que quelque chose (fut-ce un espace) soit affiché avant un envoi de header ou une mise de cookies.
1) Vérifie que les fichiers ont été bien uploadés et qu'ils ne sont pas tronqués lors du transfert.
2) Le cas échéant, enveloppe le script qui cause cette erreur par ces appels:
<?php
ob_start(); //mettre tout ce qui sort dans un buffer
ton script en entier se trouve ici au milieu
ob_end_flush(); //vider le buffer ici
?>
ça marche à tous les coups
|
|
mardi 2 novembre 2010 à 17:06:37 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

VestaX
|
Perso avant j'avais toujours ce problème.
Et j'ai trouvé la solution en changant mon php.ini j'au augmenté le buffer tel quel:
output_buffering = 14336
et là, plus de problèmes. j'ai fais ça sur tous mes serveurs :)
VestaX
|
|
mardi 2 novembre 2010 à 22:19:30 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

kohntark
|
Je prends quelques secondes pour ré insister sur ce que je disais :
- il existe pas mal de méthodes pour outrepasser cette "limitation".
@Vestax :
Sur un hébergement mutualisé bonne chance !!
- à quoi bon vouloir mettre en place une solution qui va à l'encontre (dans le cas qui nous intéresse) de toute logique et des normes établies ?
... alors que c'est tellement plus simple et lisible de suivre le déroulement que j'évoquais ?
@Cod57 :
ça marche à tous les coups
Je ne serai pas si affirmatif que toi, ça doit planter dans quelques cas. Une utilisation de ob_clean() et consoeurs serait un minimum.
Après c'est clair que l'on peut toujours bidouiller avec le protocole HTTP et les largesses des navigateurs, mais ça complexifie les choses et ça multiplie les bugs et les incompatibilités.
Cordialement,
Kohntark -
|
|
mercredi 3 novembre 2010 à 08:10:13 |
Re : Probleme de header, message erreur "Cannot modify header information - headers already sent by..."

sebing
|
Merci pour vos aides, ça fonctionne.
Bonne journée
Seb
|
|
Cette discussion est classée dans : page, code, php, erreur, header
Répondre à ce message
Sujets en rapport avec ce message
header("location: page.php") [ par benstar ]
j'ai eu ce msg d'erreur "Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-7\www\format
Erreur dans le code PHP sous IE ? [ par Rimb0 ]
Bonjour à tous ! J'ai une question que je me pose depuis que je code en php (donc pas longtemps). J'ai codé des pages, et tant que ça s'affiche, j'es
Modification du header d'une page 404 [ par cz1702 ]
Bonjour à tous,je voulais savoir si il était possible de modifier le header d'une page d'erreur 404Contenu du fichier .htaccessErrorDocument 404 /4
erreur avec la fonction header [ par hajeur_abd ]
bonjourlors de l'execution de mon code : header("location: libre.php?$code"); l'erreur suivant s'affiche:Warning: Cannot add header information - h
header () [ par unbreton29 ]
Bonjour, Je commence à m'arracher les cheveux, et personnellement, je préfèrerai les garder [^^langue3] Voici mon problème : j'ai un formulaire de
probleme d'affichage de code sur une page PHP d'un formulaire ... [ par bentos ]
Bonjour a tous je vais faire vite ...j'ai un gros souci sur un code PHP d'un site web et j'arrive pas a le reglé [^^confus2] le probleme, c'est qu
Probleme Connection en PHP [ par geof2810 ]
Bonjour a tous, voila j'ai fais plusieurs demandes sur ce forum pour des problemes avec un code de connection... Mais voila maintenant j'ai une erre
Perte de session avec ie ??? [ par gfpl ]
Bon voila le souci je peut le tourner comme je veut mais je ne trouve pas la solution .... j'essaie en vain mais non... la session marche avec chrome
Recuperation de variable [ par lilyy59 ]
Bonjour je voudrai uploader des images pour ensuite les rappeler sur un autre page mais je voudrais que ces images porte le nom de la variable défini
Garder les valeurs de mes tableaux quand je rafaraichit ma page [ par Varkan ]
Bonjour à tous ! Je fais actuellement mon Memory, avec différentes tableaux en php qui contiennent des numéros aléatoires et avec cela je met mes ima
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|