Cannot modify header information, headers already sent by

Résolu
MonCplusplus Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour, voilà depuis quelques jour je suis "Harceler" par une erreur de type "Header... " j'ai fait quelques recherches à ce sujet pour savoir quelle en était la cause mais mon problème ne s'est tjrs pas résolu. J'ai Beau vérifier à plusieurs reprises le ficher dont il est question à savoir (output started... ) et Pourtant y'a rien " d'anormal" du moins pas par rapport aux erreurs frequents à ce sujet tel que les espaces . Par rapport à la ligne indiqué. Il y'a juste du code du genre.
<!-- Code Html -->
<?php if(isset($_POST)) { ? >
<!-- Suite du code Html-->
<?php }else{ ?>
< !-- Code Html - - >
<?php} ?>
< !-- Suite Html-->
Voilà grossomodo à quoi ressemble le squelette de la page (navbar.php). Ensuite dans ma page principal index j'ai juste sa.
<?php 
session_start();
Include("connexion_config") ;
?>
<!-- Code Html et inclusion css, bootstrap, Javascript, JQuery..-->

<?php 
 include("navbar.php");
?>

<! -- Code Javascript, fermeture body fermeture html -->

le plus intrigant c'est que une fois que je change de place l'inclusion du navbar à savoir juste en dessous du session start sa fonctionne mais lors du chargement de la page certains buug apparaissent en terme d'affichage ce qui logique sachant que j'exécute un page html avec du code php avant même qu'elle ne se trouve dans les balises <html></html>. Quelqu'un a une idée de la cause merci d'avance.

3 réponses

Utilisateur anonyme
 
Bonjour

Peux-tu donner le message d'erreur complet ?
0
MonCplusplus Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ton intervention .

voilà


Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\clientproject\menu\navbar.php:62) in C:\wamp\www\clientproject\connexion_config.php on line 16



0
Utilisateur anonyme
 
1 - peux-tu donner le code de navbar.php lignes 60 à 65 ?
2 - Peux-tu donner le code de connexion_config.php lignes 1 à 18 (en masquant les mots de passe si nécessaire) ?
0
MonCplusplus Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Pas de soucis , j'ai supprimé certaines ligne espérant que sa change mais tjrs rien à présent c'est à la ligne 56 qu'il indique un soucis . Par précaution l'indentation n'y est pour rien ?

navbar.php (Error ligne 56)
50)</div>
51)</div>
52)</div>
53)</li>
54)</ul>
55)<?php }?>
56)<?php if(isset($_POST['login'])){?>
57)<form class="form-inline ml-auto" action="index.php?choix=connexion_stop.config" method="POST">
58)<button class="btn btn-success" type="submit">Se déconnecter</button></form>
59)<?php }?>
60)</div>
61)</nav>


connexion_config.php (Error ligne 16)

1)<?php
2)$log = htmlspecialchars($_POST['login']);
3)$mdp = htmlspecialchars($_POST['password']);
4)$request = "SELECT * FROM membres WHERE login=:log";
5)$result = $database->prepare($request);
6)$result->bindvalue(':log', $log);
7)$result_request = $result->execute();
8)if(result_request === FALSE){
9)header("Location:index.php?choix=home");
10)}else{
11)$membre = $result->fetch(PDO::FETCH_ASSOC);
12)if(empty($membre)){
13)header("Location:index.php?choix=home");
14)}elseif ($mdp === $membre['psw']){
15)$_SESSION['login'] = $membre['login'];
16)header("Location:index.php?choix=home");
17)}else{
18)header("Location:index.php?choix=home");
19)}
20)}
21)?>
0
Utilisateur anonyme
 
Pour comprendre l'erreur, il faut savoir que l'envoi d'une page du serveur vers le client se déroule en deux temps : l'envoi des en-têtes (headers), puis l'envoi du contenu (le HTML et les echo du PHP). C'est le protocole HTTP qui est comme ça, PHP et HTML n'y peuvent rien.

Quand navbar s'exécute, il y a du HTML qui est envoyé au visiteur. Alors la partie "headers" du protocole HTTP se termine, et on ne peut plus en envoyer. Or, dans connexion_config.php, tu utilises une fonction PHP header qui consiste justement à envoyer des en-têtes HTTP ; mais ce n'est plus possible. Le message te dit qu'il ne peut plus envoyer d'en-têtes ligne 16 de connexion_config.php parce qu'il a déjà commencé les sorties ligne 62 de navbar.php

Ce message montre sans erreur possible que navbar.php s'exécute avant connexion_config.php, ce qui semble contraire à ce qu'on voit dans le code ta page principale, que tu donnes dans la question initiale.

Es-tu sûr que connexion_config.php ou navbar.php ne sont pas inclus plusieurs fois ?
0
MonCplusplus Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour l’éclaircissement quant au déroulement HTTP mais justement dans mon navbar.php j'ai un formulaire(de connexion) qui redirige vers la pages connexion_config.php (via une URL paramétré) c'est ce qui me permet en autre de pouvoir inclure connexion_config . Donc en gros les seuls fois où j'inclus mes pages navbar.php et config.php sont dans mon index sa donne un truc du genre

index.php
session_start(); 

<!-- HMTL , CSS , BOOTSTRAP , jquerry -->
include("clientproject/navbar.php");


<!-- test -->
 if($_GET["choix"] == 'connexion_config'){
include("clientproject/connexion_config.php");
}

0
Utilisateur anonyme
 
Tiens, le contraire de ce que tu avais montré au départ. Ça n'aide pas.

Dans ce sens, ça ne peut pas marcher. Tu essayes d'utiliser 'header' APRES avoir envoyé des données dans navbar.php : c'est interdit par le protocole HTTP.
Il faut que tu ré-organises ton code différemment.
C'est pour ça que d'une manière générale, on fait le maximum de traitement PHP avant la partie HTML.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Attention aux commentaires HTML : <!-- ... -->
Même si ce sont des commentaires, ils font partie du code source HTML. Donc, en reprenant l'explication de le père, ils déclenchent la clôture des headers HTTP et le début de l'envoi du corps de la page.

Je ne sais pas si c'est vraiment ça ton problème, vu que ce n'est pas exactement comme ça que ton code est écrit (il est invalide en l'état, les commentaires HTML ne pouvant être placés dans les balises <?php ?>), mais c'est un point à vérifier (quand on traque un bug subtil, c'est plus pratique de voir le vrai code)

Xavier
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Je précise même...... mettre du HTML directement au milieu de code php génère des erreurs !

<?php

<!-- fsdgsfsdfsdfsf  -->
echo " Génère une erreur !";

?>


<?php

// ça c'est un commentaire valide en PHP

/*
ça c'est un commentaire valide en PHP
ou tout un bloc si on le souhaite
*/

echo " OK... pas de souci !";

?>
0
Utilisateur anonyme
 
@Jordane et Xavier

Je vous rappelle que l'erreur de MonCplusplus, c'est "...headers already sent..."
S'il avait vraiment mis du commentaire HTML dans du PHP, il aurait "Parse error: syntax error, unexpected '<' in..."
0