begin process at 2012 05 31 01:38:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Probleme de header, message erreur "Cannot modify header information - headers already sent by..."


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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'&eacute;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&eacute;es.<br>V&eacute;rifiez les donn&eacute;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

Membre Club
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

Membre Club

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

Membre Club
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

Membre Club
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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales