Message d'erreur :

Résolu/Fermé
delphine - 5 nov. 2008 à 22:14
 toto - 6 nov. 2008 à 18:57
Bonjour,

Je veux que les membres sur mon site puissent supprimer leur compte s'ils le désirent seulement j'ai ce message d'erreur qui s'affiche si je mets non, plutot que d'aller sur l'index :

Warning: Cannot modify header information - headers already sent by (output started at /homez.31/........./www/header.php:12) in /homez.31/animolci/www/suprime.php on line 24

Voici ma page suprime.php :
<?php
include("option.php");
include('header.php');

 ?>

<div id="contenu_centre">
     <div align="center"><br /><br />
<h3>Désinscription</h3><br />
<p><font color="purple">Attention cette action est irréversible
toute commande en cours sera supprimée en même temps que votre compte.</font></p>

<br /><br />
<?php
if($action =="dell") {
echo"<form method='POST' action='suprime.php?action=dell_oui'>
	Confirmez vous l'action suivante ?<br /><br />
	<input type='radio' value='oui' name='action_conf' >Oui
	<input type='radio' value='non' name='action_conf' checked> Non<br /><br />
	<input type='submit' value='Envoyer' name='B1'>
</form>";
} else {}
if($action =="dell_oui") {
if($action_conf =="non") {header('location: index.php');exit;} else {}
$requete=mysql_db_query($nombase,"DELETE FROM `membres_profil` WHERE `login` = '$pseudoem'",$db_link) or die(mysql_error());
$requete=mysql_db_query($nombase,"DELETE FROM `membres` WHERE `pseudo` = '$pseudoem'",$db_link) or die(mysql_error());
echo'Compte supprimé ';
exit;
} else {}
?>
</div></div>

<?php
include('footer.php');
?>


J'ai vu que sur google ce genre de message d'erreur : indique que l'on tente d’écrire des entêtes HTML, alors que le corps de la page a déjà été enrichi.

Que dois-je faire ?

14 réponses

xtremis Messages postés 839 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 31 janvier 2009 105
5 nov. 2008 à 22:31
Bonsoir


Je pense sous toutes réseverve que cette ligne est pas bonne elle est ouverte .......(<) est pas fermée ..(>)
</gras>

<input type='radio' value='oui' name='action_conf' >Oui

ce devrait etre ceci


<input type='radio' value='oui' name='action_conf' Oui>

ou ceci

<input type='radio' value='oui' name='action_conf'> Oui>

ou ceci

<input type='radio' value='oui' name='action_conf' Oui'>

ou encore ceci

<input type='radio' value='oui' name='action_conf' >Oui'>
0
Je viens d'essayer de mettre ceci mais toujours le même message d'erreur :
<input type='radio' value='oui' name='action_conf'> Oui>
ou <input type='radio' value='oui' name='action_conf'> Oui>
ou <input type='radio' value='oui' name='action_conf' >Oui'>
0
Jess8010 Messages postés 7 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 5 novembre 2008
5 nov. 2008 à 22:49
{header('location: index.php');exit;} à quoi sert "exit;" ici?
0
xtremis Messages postés 839 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 31 janvier 2009 105
5 nov. 2008 à 23:00
desolé j ai eu une coupure pendant que j envoyais le message

ca envoie un en-tête HTTP
https://www.php.net/manual/en/function.header.php
0
Jess8010 Messages postés 7 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 5 novembre 2008
5 nov. 2008 à 23:07
"exit" est-il réellement nécessaire? as-tu essayé sans?
0
Bonsoir

Oui, exit est nécessaire. Sinon, le script continue de s'exécuter. Et s'il y a (par exemple) un autre (header("Location: xxx") plus loin, tu iras à une autre page que celle prévue
0
Bonjour

Ton header('location: index.php') intervient après que tu aies envoyé du contenu dans ta page (< div id="contenu_centre"> etc). Ceci est impossible, le protocole HTTP ne le permet pas. C'est ça la signification du message. Et inutile de jouer les apostrophes et les > au hasard, il suffit de respecter les règles.

La solution, c'est de faire les tests qui t'aiguillent vers ton header AVANT d'envoyer quoi que ce soit au client.
0

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

Posez votre question
Ah bon, pourtant je dis en gros si le membre sélectionne "non" alors retourner sur la page index.php

Désolé toto si je ne pige pas trop, ce n'est pas moi qui est programmé le site à l'origine et je ne suis pas une experte, j'essais de me débrouiller comme je peux et pour le moment je patoge...
0
blackgod Messages postés 33 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 2 mai 2009 4
6 nov. 2008 à 10:36
Excuse moi toto mais je ne suis pas d'accord avec toi.

Pour ma part j'ai déjà eu à utiliser un (et mm plusieurs) header dans une page au contenu déjà chargée.
Et ça n'a provoqué aucune erreur.

Pour ma part ce que je te conseillerai delphine c'est de retirer ton exit() et de mettre le code comme suit :

if($action_conf =="non") {header('location: index.php');}
 else { // si $action_conf == "oui", alors on effectue la requete
$requete=mysql_db_query($nombase,"DELETE FROM `membres_profil` WHERE `login` = '$pseudoem'",$db_link) or die(mysql_error());
$requete=mysql_db_query($nombase,"DELETE FROM `membres` WHERE `pseudo` = '$pseudoem'",$db_link) or die(mysql_error());
echo'Compte supprimé ';
exit;
} //le dernier else me semble inutile
?>
</div></div>



qu'on soit d'accord, les "//" sont des commentaires.
D'ailleurs entre nous je mettrais carrément :

if($action_conf =="oui")
{
$requete=mysql_db_query($nombase,"DELETE FROM `membres_profil` WHERE `login` = '$pseudoem'",$db_link) or die(mysql_error());
$requete=mysql_db_query($nombase,"DELETE FROM `membres` WHERE `pseudo` = '$pseudoem'",$db_link) or die(mysql_error());
echo'Compte supprimé ';
echo '+lien vers index.php';
} 
 else 
{ // si $action_conf != "oui"
 {header('location: index.php');
}
?>
</div></div>


Come ça si jamais un utilisateur s'amuse à taper autre chose que "non" dans sa barre d'adresse, l'action de suppression ne s'effectuera pas. Alors que dans ton cas si je m'amuse à taper l'adresse :
supprime.php?action=dell_oui&action_conf=nimportequoi => 'nimportequoi' est different de "oui" donc je supprime.
De plus, on a retiré tous les "exit()" qui sont plus source d'erreur qu'autre chose.

Une dernière chose :

echo"<form method='POST' action='suprime.php?action=dell_oui'>


Une method GET ne serait-elle pas plus adapté puisque tu retournes l'information sur ta propre page et non une autre page ?

POST : envoie des données d'une page blabla.php à une page tralala.php
GET : retourne les données de blabla.php vers blabla.php

D'ailleurs, je ne vois pas où tu récupères tes valeurs POST dans ton code ? (POST ou GET dans l'idéal)

PS: n'hésite pas à demander des précisions =)
0
Pour ma part j'ai déjà eu à utiliser un (et mm plusieurs) header dans une page au contenu déjà chargée.
Et ça n'a provoqué aucune erreur.

ça m'étonne beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup beaucoup. Ce qui est une manière prudente de dire que je ne te crois pas.
Tes données devaient encore être dans un cache, mais sûrement pas chez le client. De par le principe même du protocole HTTP, ce n'est pas possible. La description de la fonction header() dans le manuel de référence PHP le dit aussi ( https://www.php.net/manual/fr/function.header.php )
Ou bien alors ton php.ini était paramétré pour ne pas afficher les messages d'erreur.
Quant au exit après le header("Location:xx"), il est indispensable si tu veux arrêter le script. Et dans ta version initiale où il y avait un DELETE derrière, ça valait mieux.
0
blackgod Messages postés 33 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 2 mai 2009 4
6 nov. 2008 à 13:17
Il est vrai mais désolé de te décevoir, ça marche.
Malgré tout, ce que tu dis m'a interrogé et j'ai peut-être trouvé pourquoi chez moi ça marche.

Mes headers sont employés dans un switchs. Ce qui fait que techniquement, après chaque utilisation d'un header, le code se trouve suivi d'un "break".
Ca ça pourrait expliquer l'absence de "exit".
Par contre mes headers sont placés dans des if, comme dans le cas présent (avec nul autre code que le header dans la condition). Et j'ai bien des lignes de codes qui sont interprétée avant mon header : aucun soucis sur firefox et IE (sous win XP).
0
Donc je confirme qu'il ne faut surtout pas enlever ceci : ;exit car sinon après plus rien ne fonctionne, j'ai même suprimé mon compte en disant cochant non après avoir enlever exit.

Ce que je ne pige pas c'est que cela marche mais que ce message d'erreur s'affiche ! je suis sûr qu'il y a un moyen que cela fonctionne correctement...sans afficher ce message d'erreur.
0
Et j'ai bien des lignes de codes qui sont interprétée avant mon header : aucun soucis sur firefox et IE (sous win XP).
Je parle de données envoyées au client, pas de lignes de code interprétées. ça n'est pas la même chose !
0
Ce que je ne pige pas c'est que cela marche ça va vraiment sur la page index.php ?
0
Non en effet je viens d'essayer, quand je sélectionne "non" cela me mets sur cette page : http://www....com/suprime.php?action=dell_oui avec le message d'erreur :

Warning: Cannot modify header information - headers already sent by (output started at /homez.31/animolci/www/header.php:12) in /homez.31/animolci/www/suprime.php on line 18

Et quand je sélectionne "oui" pour suppimer le compte et bien cela le supprime bien mais cela met toujours le même message d'erreur...
0
Tu avais dit que ça marchait ! Pas facile d'aider avec des fausses informations.

remets
if(($action =="dell_oui") && ($action_conf =="non")) {header('location: index.php');exit;} ENTRE les 2 include ( en espérant que $action et $action_conf sont bien initialisés dans le 1er include)
et supprime la ligne
if($action_conf =="non") {header('location: index.php');exit;} else {}
du if(($action =="dell_oui")

comme ça, le même test est effectué mais le header est envoyé avant toute autre information

J'espère aussi que tu as supprimé le exit qui suit le echo "Compte supprimé";. Si tu le laisses, en cas de suppression de compte, les </div> et le footer sont ignorés, ce qui n'est pas souhaitable
0
Donc voici ce qu'il fallait que je mette et cela marche niquelle :
<?php
include("option.php");
include('header.php');
 ?>
<?php
if($action =="dell") {
echo"<form method='POST' action='suprime.php?action=dell_oui'>
	<p align='center'>Confirmez-vous l'action suivante ?<br>
	<input type='radio' value='oui' name='action_conf' >Oui
	<input type='radio' value='non' name='action_conf' checked> Non<br>
	<input type='submit' value='Envoyer' name='B1'></p>
</form>";
} else {}
if($action =="dell_oui") {
if($action_conf =="non") {$url="index.php";
redir("$url");
exit;} else {}
$requete=mysql_db_query($nombase,"DELETE FROM `membres_profil` WHERE `login` = '$pseudoem'",$db_link) or die(mysql_error());
$requete=mysql_db_query($nombase,"DELETE FROM `membres` WHERE `pseudo` = '$pseudoem'",$db_link) or die(mysql_error());
redir("deconection.php");
exit;
} else {}
?>
<?php
include('footer.php');
?>


Fallez privilégier ceci : {$url="index.php";
redir("$url");



Merci de votre aide
0
Heureux pour toi que ça marche mais.... d'où sors-tu ce redir() ? ça n'existe pas dans le manuel de référence PHP ! Cette fonction doit être définie dans un fichier inclus, et je suppose qu'elle utilise le javascript. ça ne marchera pas chez quelqu'un qui n'accepte pas le javascript (mais ils sont rares, sans doute)

d'autre part retire les else {}, ils ne servent absolument à rien
0