Erreur cannot modify header information [Résolu]

Signaler
Messages postés
28
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
19 novembre 2020
-
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
-
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

9 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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.
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
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á
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
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á
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Son echo commence par "<html>" ... c'étais pas si difficile de savoir que y'avais rien derrière ;)
Messages postés
28
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
19 novembre 2020

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.
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
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á
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
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 :)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
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???"