Version complète: sur le forum Webmaster Hub : Supprimer ce message Cannot modify ... ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > (X)HTML et CSS
francoisch
Bonjour

J’ai ce message très classique:
CODE
Warning: Cannot modify header information - headers already sent by (output started ...

qui me brouille l’écoute.

Y a-t-il un moyen de le supprimer ? autre que de ne pas faire un header("Location: http ...

Par avance merci.

Francois
captain_torche
Ce message typique signifie que tu as du texte envoyé au navigateur avant une en-tête header. Vérifie que tu n'as pas d'echo avant, voire même un espace ou un retour chariot.
francoisch
bonsoir Captain

Effectivement, avant le Header, j'ai une écriture MySql et j'essaie juste après ça d'émettre un message confirmant / infirmant la bonne fin de l'opération.

Pour échapper à ce que tu décris, j'ai essayé de passer par la création d'un cookie, exploité après le Header, mais même ça ne passe pas.

Je n'ai pas trouvé de solution pour émettre ce message de bonne / mauvaise fin avec ce Header dans les environs.

Je peux mettre mon code pour plus de clarté.

Par avance merci de vos suggestions.

Francois
iNCiTE Web
Je pense qu'on est pas sensé l'enlever, mais plutôt faire en sorte qu'il ne s'affiche pas (c'est une erreur à corriger donc)
Pour toi il faudrait plutôt que l'erreur soir affichée dans la page appelée par le header
francoisch
Bonjour

Voilà mon code, du moins la partie concernée :
CODE
$result9 = mysql_query($requete, $connexion);

if (!$result9) {die('Impossible d\'exécuter la requête :' . mysql_error());}
else {SetCookie("resultatSql",$result9 );}

//if (isset($result9))
//    {
//    echo "<script>alert('AAAAA Votre saisie a été enregistrée')</script>";
//    }        

// renvoyer à la page d'appel
header("Location: http://" . $_SERVER['HTTP_HOST']. rtrim(dirname($_SERVER['PHP_SELF']), '/\\'). "/" . "xxx.php");

Je veux émettre un message, d’une manière ou d’une autre, informant de la bonne / mauvaise exécution de la requête.

J’essaie là de passer le code de retour de l’exécution de la requête dans un cookie à la page xxx.php qui émettra le message.

Par ailleurs, j’ai laissé en commentaires un autre essai avec une boite Alert.

Dans les deux cas, lors des impressions de la page xxx.php, le message Cannot modify apparaît, ce que je veux précisément éviter.

Je ne vois dans mon code aucun echo ou affichage avant le Header ; peut-être la création du cookie y suffit elle ?

Merci par avance de votre aide.

Francois
iNCiTE Web
Pourquoi tu fais pas ça :

CODE
$result9 = mysql_query($requete, $connexion);

if (!$result9) { $resultatSql  = mysql_error(); } else { $resultatSql = "OK" }

// renvoyer à la page d'appel
header("Location: http://" . $_SERVER['HTTP_HOST']. rtrim(dirname($_SERVER['PHP_SELF']), '/\\'). "/" . "xxx.php?resultat=".$resultatSql);


Puis dans xxx.php tu affiches le contenu de $resultatSql
D'ailleurs $result9 (comment tu fais pour t'y retrouver dans tes variables ensuite ? tongue.gif ) contient un identifiant de ressource, pas une chaine donc c'est pas très utile, je l'ai remplacé par mysql_error()
francoisch
bonsoir Incite et merci de ta réponse.

Je vais l'utiliser très bientôt mais je suis un peu à la bourre actuellement.

Merci encore.

Francois
francoisch
bonjour

Voila, j'ai fait les mises à jour:
1/ dans le module réalisant l'action MySql:
CODE
if (!$result) { $resultatSql  = mysql_error(); } else { $resultatSql = "OK";}

// renvoyer à la page d'appel
header("Location: http://" . $_SERVER['HTTP_HOST']. rtrim(dirname($_SERVER['PHP_SELF']), '/\\'). "/" . "websaisie.php?resultat=".$resultatSql);

2/ dans le deuxième module, comme j'imagine qu'il ne connait pas naturellement la variable $resultatSql:
CODE
// récupération du paramètre passé par webaction.php
$resultatSql= $_GET['resultatSql'];
...
<p>Mise à jour:<?php echo $resultatSql; ?>   </p>


Problème subsistant: rien ne s'affiche, la variable $resultatSql n'est manifestement pas initialisée dans le deuxième module; je dois mal la récupérer.

Comment dois-je faire dans ce deuxième module pour récupérer cette variable?

Par avance merci de votre aide.

Francois
iNCiTE Web
Ben tu envoies la variable "$resultat" et tu lis "$resultatSql" wacko.gif
francoisch
Bien vu, j'ai corrigé et tout fonctionne maintenant.

Merci encore de ton aide.

Francois
francoisch
bonjour pour une petite question supplémentaire.

Juste pour savoir exactement ce que fait if (!$result)

Est ce l'équivalent de isset(), de empty(), autre chose?

Par avance merci de votre aide.

Francois
rdd
Bonjour,

CODE
if (!$result)

Signifie que $result vaut 0
isset signifie que ta variable est set
EX
CODE
$result="";
if (isset($result))
echo "Var result is set":
else
echo "Var result is not set";


et empty verifie que ta variable n'est pas vide
CODE
$result="";
if (empty($result))
echo "Var result is empty":
else
echo "Var result is not empty";


Je te conseille de jeter un oeil a la doc officielle de PHP ou tu trouveras reponse a tes questions : PHP.NET
Et specialement :
function empty
function isset
captain_torche
Pour être plus précis, if(!$result) est équivalent à if($result == false)
Sachant qu'avec une égalité double (==), on ne recherche pas strictement le booléen false, mais des valeurs équivalentes : 0, '0', '' (chaîne vide), et false (bien entendu).
francoisch
bonsoir et merci de vos réponses.

Oui, pour empty et isset, je sais où trouver l'info.

C'est pour if (! que je ne suis pas arrivé à trouver.

Maintenant, si je dis que if (! rend un résultat semblable / identique à empty, j'ai vrai / faux?

Francois
captain_torche
Pas vraiment : Si ta variable est égale à 0 ou '0' (et éventuellement false), empty retournera false, et ! retournera true.
francoisch
Merci Captain de ta réponse, maintenant, j'arrive à faire la différence entre ces différentes fonctions.

Francois
francoisch
Il me reste un problème.

J'ai conditionné l'affichage du message de bonne fin par l'existence de la variable $resultat: if(isset($resultat)) ...

Une fois affiché le message, je supprime la variable: unset($resultat);

Quand ensuite, je fais, par exemple, Refresh, la variable $resultat réapparaît avec sa valeur initiale et le message de bonne fin est donc de nouveau affiché alors qu'il ne devrait pas l'être.

La variable $resultat est-elle réinitialisée par le $resultat = $_GET[resultat]; du début?

En tout cas, comment pourrais je faire disparaitre cette variable une fois le message affiché?

Par avance merci de votre aide.

Francois
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.