Erreur cannot modify header information [Résolu]

Messages postés
22
Date d'inscription
mardi 4 janvier 2005
Dernière intervention
12 octobre 2011
- - Dernière réponse : coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Dernière intervention
13 septembre 2013
- 22 juil. 2005 à 22:59
Bonjour,

j'utilise un formulaire de saisie qui m'envoie sur une page qui teste si une session est active, teste la saisie des champs et fait mes requetes. En cas de sesison inactive, j'ouvre une page de connexion, en cas d'oubli de saisie de champs, ma seconde page renvoie à la première en retournant les champs saisis.

Voici le code simplifié de ma page verif.php:
<?php
session_start();
if (!isset($_SESSION['login']))
{ header('location:connexion.php);exit; }
echo "<html>";
$nom=$HTTP_POST_VARS["nom"];
$prenom=$HTTP_POST_VARS["prenom"];
if ($nom=="")
{ header('location:saisie.php?retour=oui&prenom=$prenom');}
else
{ connexion + requete + deconnexion}
echo "</html>";
?>

lors de mes tests, quand je ne saisie pas de nom, j'ai l'erreur suivante :
WARNING: cannot modify header information - headers already sent by (output started at c:/.../verif.php:12) in c:/.../verif.php on line 28

la ligne 28 correspond à:
header('location:saisie.php?retour=oui&prenom=$prenom');

Pouvez vous me dépanner?

Merci par avance
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
2368
Date d'inscription
mercredi 13 octobre 2004
Dernière intervention
18 avril 2015
3
Merci
Même pas besoin !



<?php

session_start();

if (!isset($_SESSION['login']))

{ header('location:connexion.php);exit; }

$nom=$HTTP_POST_VARS["nom"];

$prenom=$HTTP_POST_VARS["prenom"];

if ($nom=="")

{ header('location:saisie.php?retour=oui&prenom=$prenom');}

else

{

echo "<html>";

connexion + requete + deconnexion}

echo "</html>";

?>



C'est plus joli comme ca, et ca t'évite de te faire chier avec du ob_start et de faire du code horrible à décrypter.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de FhX
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
Saell og blesud

Regardez la function ob_start() http://fr.php.net/manual/fr/function.ob-start.php

Vilhjálms Sigurðsdóttir aka Frëyjá
Commenter la réponse de vilhjalms
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
Saell og blesud

C'est sûr mais comme on ne savait pas s'il y avait du code html par exemple avant ... ;-)

Vilhjálms Sigurðsdóttir aka Frëyjá
Commenter la réponse de vilhjalms
Messages postés
2368
Date d'inscription
mercredi 13 octobre 2004
Dernière intervention
18 avril 2015
0
Merci
Son echo commence par "<html>" ... c'étais pas si difficile de savoir que y'avais rien derrière ;)
Commenter la réponse de FhX
Messages postés
22
Date d'inscription
mardi 4 janvier 2005
Dernière intervention
12 octobre 2011
0
Merci
Merci à vous.

Comme je suis novice, la fonction ob_start me parait assez difficile à mettre en oeuvre.

Par contre, la seconde solution ne provoque plus d'erreur de header.
C'était juste la position de mon echo "<html>"; !!

Pouvez vous m'expliquer pourquoi?

Merci encore.
Commenter la réponse de sarril
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
Saell og blesud

En fait j'ai
surtout lu son WARNING ... ;-) Autrement ob_start()n'est pas très
compliqué à utiliser et cela peut rendre service ...

Vilhjálms Sigurðsdóttir aka Frëyjá
Commenter la réponse de vilhjalms
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Dernière intervention
13 septembre 2013
0
Merci
Salut!

La fonction header ne peut pas s'utiliser après qu'une sortie ( html,
echo, print, ... ) ait été effectuée... Une sortie est donc du code
envoyé au navigateur.



La fonction ob_start met les données dans un buffer. Rien n'est
transmis au navigateur à part les entêtes, ca permet donc d'éviter de
se soucier si une sortie a deja été faite ou pas...



on_end_flush(); envoie le tout au navigateur à la fin du script...



Ah oui, il parait aussi que c'est plus rapide, :)



@++



R@f



P.S. Si j'ai fais une erreur, [auteurdetail.aspx?ID=551996 vilhjalms], corrigez-moi....

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Commenter la réponse de coockiesch
Messages postés
2368
Date d'inscription
mercredi 13 octobre 2004
Dernière intervention
18 avril 2015
0
Merci
Un echo provoque une sortie en HTML... autrement dit, tu envoies des données au navigateur de ton visiteur.

En appelant une fonction header, tu veux utiliser un paramètre d'en
tête du navigateur de ton visiteur, hors tu es déja passé aux données
(et oui, avec le echo !), donc tu ne peux pas envoyer de header.



L'ordre chronologique est :

header (en tête)

body (données)



et surtout pas l'inverse :)
Commenter la réponse de FhX
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Dernière intervention
13 septembre 2013
0
Merci
ob_end_flush(); et pas on_end_flush();



@++



R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Commenter la réponse de coockiesch

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.