Aller au contenu

Supprimer ce message Cannot modify ... ?


Sujets conseillés

Posté

Bonjour

Jai ce message très classique:

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

Posté

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.

Posté

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

Posté

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

Posté

Bonjour

Voilà mon code, du moins la partie concernée :

$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, dune manière ou dune autre, informant de la bonne / mauvaise exécution de la requête.

Jessaie là de passer le code de retour de lexécution de la requête dans un cookie à la page xxx.php qui émettra le message.

Par ailleurs, jai 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

Posté

Pourquoi tu fais pas ça :

$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 ? :P ) contient un identifiant de ressource, pas une chaine donc c'est pas très utile, je l'ai remplacé par mysql_error()

Posté

bonjour

Voila, j'ai fait les mises à jour:

1/ dans le module réalisant l'action MySql:

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:

// 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

Posté

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

Posté (modifié)

Bonjour,

if (!$result)

Signifie que $result vaut 0

isset signifie que ta variable est set

EX

$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

$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

Modifié par rdd
Posté

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).

Posté

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

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...