Erreur cannot modify header information [Résolu]

sarril 22 Messages postés mardi 4 janvier 2005Date d'inscription 12 octobre 2011 Dernière intervention - 22 juil. 2005 à 21:47 - Dernière réponse : coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention
- 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
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 22 juil. 2005 à 22:05
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.

Merci FhX 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de FhX
vilhjalms 591 Messages postés mercredi 20 juillet 2005Date d'inscription 16 juillet 2009 Dernière intervention - 22 juil. 2005 à 21:50
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
vilhjalms 591 Messages postés mercredi 20 juillet 2005Date d'inscription 16 juillet 2009 Dernière intervention - 22 juil. 2005 à 22:17
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
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 22 juil. 2005 à 22:29
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
sarril 22 Messages postés mardi 4 janvier 2005Date d'inscription 12 octobre 2011 Dernière intervention - 22 juil. 2005 à 22:29
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
vilhjalms 591 Messages postés mercredi 20 juillet 2005Date d'inscription 16 juillet 2009 Dernière intervention - 22 juil. 2005 à 22:47
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
coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention - 22 juil. 2005 à 22:58
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
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 22 juil. 2005 à 22:58
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
coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention - 22 juil. 2005 à 22:59
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.