Erreur cannot modify header information

Résolu
sarril Messages postés 31 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 26 juillet 2021 - 22 juil. 2005 à 21:47
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre 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

9 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
22 juil. 2005 à 22:05
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.
3
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
22 juil. 2005 à 21:50
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á
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
22 juil. 2005 à 22:17
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á
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
22 juil. 2005 à 22:29
Son echo commence par "<html>" ... c'étais pas si difficile de savoir que y'avais rien derrière ;)
0

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

Posez votre question
sarril Messages postés 31 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 26 juillet 2021
22 juil. 2005 à 22:29
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.
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
22 juil. 2005 à 22:47
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á
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 juil. 2005 à 22:58
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???"
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
22 juil. 2005 à 22:58
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 :)
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
22 juil. 2005 à 22:59
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???"
0
Rejoignez-nous