Probleme de header, message erreur "Cannot modify header information - headers a

sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010 - 28 oct. 2010 à 18:01
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010 - 3 nov. 2010 à 08:10
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 header("Location: index.php"); ?>

Voici le code de ma page:



Page d'administration de l'equipe des poussins de Plaisir Basket Club



































Nos sponsors















Page d'administration de l'équipe des poussins::














Titre |
Modifier |
Supprimer |


----

,
Modifier,
Supprimer,
















// c'est cette ligne qui pose problème



















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"));


try {
var pageTracker = _gat._getTracker(".......");
pageTracker._trackPageview();
} catch(err) {}




Merci par avance

Seb
Ps: désolé mais je n'ai pu souligner la ligne, mais j'ai mis derriere // c'est cette ligne qui pose problème
A voir également:

8 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 oct. 2010 à 19:46
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 -
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
28 oct. 2010 à 19:52
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 oct. 2010 à 20:54
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
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à :
// 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 -
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
28 oct. 2010 à 21:46
Merci pour tes conseils.

Je vais nettoyer, améliorer et sécuriser le code.

Merci encore.

Bonne soirée

seb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
30 oct. 2010 à 09:29
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
0
VestaX Messages postés 374 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 24 avril 2013
2 nov. 2010 à 17:06
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 nov. 2010 à 22:19
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 -
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
3 nov. 2010 à 08:10
Merci pour vos aides, ça fonctionne.

Bonne journée

Seb
0
Rejoignez-nous