Soucis header location

Résolu
select -  
 select -
Bonjour,

j'essaie dans une condition de changer de page avec header location mais j'ai cette erreur :
Cannot modify header information - headers already sent by ...
Une idée du problème ? Première fois que j'ai ça

14 réponses

Utilisateur anonyme
 
Bonjour

Cannot modify header information - headers already sent by ...
Tu devrais mettre le message d'erreur complet. Il indique à quel endroit les en-têtes ont déjà été envoyés, c'est là qu'est la réponse à ta question.
1
Utilisateur anonyme
 
Il est parfaitement normal que tu aies cette erreur car tu essayes d'envoyer un en-tête HTTP("Location") alors que l'envoi des données est commencé depuis longtemps, en fait depuis l'envoi de <!DOCTYPE.
Or, HTTP, n'est pas très original : on envoie d'abord les en-têtes, puis les données. Mais quand on a commencé l'envoi de données, c'est fini pour les en-têtes : on n'y revient plus.
Il ne faut donc rien envoyer avant d'avoir décidé si on doit rediriger ou non.
Donc ton analyse que tu fais à la fin de ton script devrait être faite au début, ce qui est bien plus logique. Et il est inutile, à ce niveau, de cacher l'élément 'article' : j'ai l'impression que tu crois que les codes PHP et javascript s'enchaînent, alors qu'il n'en est rien.
1
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
Salut,

Peux tu mettre le code de ta page ?

En général cette erreur se produit quand on a déjà envoyé quelque chose au client, par exemple si tu as fait un echo.
0
select
 
oui le voila, l'erreur se situe a la fin dans le include :
<?php
session_start();
include ('../database/database.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<title>MasterMarketing</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="description" content="MasterMarketing"/>
<meta name="keywords" content="mastermarketing, marketing, master, vente, échange, troc, voiture, louer, voyage"/>
<link rel="stylesheet" href="../css/style.css"/>
<script src="../js/style.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
var refreshId = setInterval(function() {
$("#article").load('ajaxvente.php?randval='+ Math.random());
}, 3000);
$.ajaxSetup({ cache: false });
});
</script>
<script type="text/javascript">
function request(oSelect) {
var value = oSelect.options[oSelect.selectedIndex].value;
var xhr = getXMLHttpRequest();

xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
readData(xhr.responseXML);
}
};
xhr.open("POST", "departement.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("localisation=" + value);
}

function readData(oData) {
var nodes = oData.getElementsByTagName("item");
var oSelect = document.getElementById("dep");
var oOption, oInner;

oSelect.innerHTML = "";
for (var i=0, c=nodes.length; i<c; i++) {
oOption = document.createElement("option");
oInner = document.createTextNode(nodes[i].getAttribute("name"));
oOption.value = nodes[i].getAttribute("id");

oOption.appendChild(oInner);
oSelect.appendChild(oOption);
}
}
</script>
</head>
<body>
<div id="menu">
<span>Bienvenue sur<a href="../accueil.php"><img src="../images/logo.png" alt="logo"/> ! <?php if(!isset($_SESSION['login'])){?> <a href="../connexion/connexion.php"> identifiez-vous</a> ou <a href="../inscription/inscription.php">inscrivez-vous</a><?php }else{ echo "<a href='logout.php'>"."Vous êtes connecté en tant que ".$_SESSION['login']." (Se déconnecter)"."</a>";} ?></span> <a class="right" href="partners.php">Nos partenaires</a><a class="right" href="location.php">Location</a><a class="right" href="covoiturage.php">Covoiturage</a><a class="vente" href="">Vente</a><a class="right" href="troc.php">Troc</a><a class="right" href="don.php">Don</a>
<br/>
<form method="post" action="">
<input type="text" name="search" placeholder="Valider avec la touche entrée"/><select name="categorie"><option value="all">Toutes nos boutiques</option><option value="animalerie">Animalerie</option><option value="auto">Auto, moto</option><option value="beaute">Beauté, parfums</option><option value="bebe">Bébé, puériculture</option><option value="bijoux">Bijoux, montres</option><option value="bricolage">Bricolage</option><option value="cd">CD, vinyles</option><option value="dvd">DVD, cinéma</option><option value="electromenager">Electroménager</option><option value="hight">Hight-tech</option><option value="immobilier">Immobilier</option><option value="informatique">Informatique</option><option value="instrument">Instruments de musique</option><option value="jardin">Jardin</option><option value="jeux">Jeux, jouets</option><option value="jeuxv">Jeux vidéo, consoles</option><option value="livre">Livre</option><option value="logiciel">Logiciel</option><option value="luminaire">Luminaires et éclairage</option><option value="sport">Sport et loisirs</option><option value="telephonie">Téléphonie, mobilité</option><option value="timbre">Timbres</option><option value="vetement">Vêtements, accessoires</option><option value="vin">Vin, gastronomie</option></select><select name="library"><option value="all">Toutes nos rubriques</option><option value="don">Don</option><option value="troc">Troc</option><option value="location">Location</option><option value="vente">Vente</option></select><label for="search">Search</label>
</form>
</div>
<div id="write"><a onclick="show('give')">Rédiger un article</a></div>
<div id="article">
<?php
$article = $bdd->query("SELECT * FROM vente where price!=''");
while ($donnees = $article->fetch())
{
if($donnees['file'] != ""){
echo '<div class="picture">'.'<img src="../upload/'.$donnees['file'], '"<br/><a href="">'.$donnees['title'].'</a></div>';
}else{
echo '<div class="picture">'.'<img src="../images/notimg.png', '"<br/><a href="">'.$donnees['title'].'</a></div>';
}
}
?>
</div>
<div id="give">
<FORM method="post" id="formcom" action="insertionvente.php" enctype="multipart/form-data">
<img src="../images/close.png" alt="close" onclick="hide('give')"/>
<label for="title">Titre</label><input type="text" name="title" placeholder="Entre 2 et 50 caractères" required pattern="[a-zA-Z èéçàù]{2,50}" onkeyup="veriftitle(this);"/><div id="titlerror"></div><br/>
<label for="content">Description</label><textarea name="content" placeholder="Entre 10 et 1000 caractères" required pattern="[a-zA-Z0-9 èéçàù.;:?!-,@]{10,1000}" onkeyup="verifcontent(this);"></textarea><div id="contenterror"></div><br/>
<label for="price">Prix</label><input type="text" name="price" required pattern="[0-9]+" onkeyup="verifprice(this);"/><div id="pricerror"></div><br/>
<label>Régions</label>
<select id="reg" onchange="request(this);">
<option value="none">Selection</option>
<?php
$query = $bdd->query("SELECT * FROM regions ORDER BY nom");
while ($back =$query->fetch()) {
echo "\t\t\t\t<option value=\"" . $back["num_region"] . "\">" . $back["nom"] . "</option>\n";
}
?>
</select>
<p>
<label>Département</label><select required="true" name="dep" id="dep"></select>
</p><br/>
<label for="category">Catégorie</label><select name="cat">></select><br/>
<label for="file">Choisissez un fichier</label><input type="file" name="file" /></br>
<input class="submit" type="submit" id="submit" onclick='go()' name="submit"/>
</FORM>
</div>
</body>
</html>
<?php
include('search.php');
?>



Le include contient :
<?php
if(isset($_POST['search']) && !empty($_POST['search']))
{
?>
<script>
document.getElementById('article').style.display ='none';
</script>
<?php
$search = $_POST['search'];
$cat = $_POST['categorie'];
$library = $_POST['library'];
$recherche = htmlspecialchars($_POST['search']);
// RECHERCHE RUBRIQUE+BOUTIQUE+SEARCH
if($cat != "all" && $library == "don"){
$req = $bdd->prepare("SELECT * FROM vente WHERE title LIKE '%$search%' AND category like '$cat' AND library like '$library'");
$req->execute(array('search' => $recherche . '%'));
}elseif($cat != "all" && $library != "all" && $library != "don"){
$req = $bdd->prepare("SELECT * FROM $library WHERE title LIKE '%$search%' AND category like '$cat' AND library like '$library'");
$req->execute(array('search' => $recherche . '%'));
// RECHERCHE RUBRIQUE+SEARCH
}else if($cat == "all" && $library != "all" && $library != "don"){
$req = $bdd->prepare("SELECT * FROM $library WHERE title LIKE '%$search%'");
$req->execute(array('search' => $recherche . '%'));
}else if($cat == "all" && $library == "don"){
$req = $bdd->prepare("SELECT * FROM vente WHERE title LIKE '%$search%'");
$req->execute(array('search' => $recherche . '%'));
// RECHERCHE CATEGORIE+SEARCH
}else if($cat != "all" && $library == "all"){
$req = $bdd->prepare("SELECT title,file FROM vente WHERE title LIKE '%$search%' AND category LIKE '$cat' UNION ALL SELECT title,file FROM location WHERE title LIKE '%$search%' AND category LIKE '$cat' UNION ALL SELECT title,file FROM troc WHERE title LIKE '%$search%' AND category LIKE '$cat'");
$req->execute(array('search' => $recherche . '%'));
// RECHERCHE SEARCH
}else if($cat == "all" && $library == "all"){
$req = $bdd->prepare("SELECT title,file FROM vente WHERE title LIKE '%$search%' UNION ALL SELECT title,file FROM location WHERE title LIKE '%$search%' UNION ALL SELECT title,file FROM troc WHERE title LIKE '%$search%'");
$req->execute(array('search' => $recherche . '%'));
}
while($data = $req->fetch()){
?> <div id="article"> <?php
if($data['file'] != ""){
echo '<div class="picture">'.'<img src="../upload/'.$data['file'], '"<br/><a href="">'.$data['title'].'</a></div>';
}else{
echo '<div class="picture">'.'<img src="../images/notimg.png', '"<br/><a href="">'.$data['title'].'</a></div>';
}
?> </div> <?php
}
}
?>
0

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

Posez votre question
select
 
( ! ) Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\MasterMarketing\categories\don.php:70) in C:\wamp\www\MasterMarketing\categories\search.php on line 15


et la ligne 15 c est justement ce header, j'ai du mal à comprendre
0
Utilisateur anonyme
 
La sortie des données a commencé à la ligne 70 de don.php. Peux-tu montrer le code de don.php ?
0
select
 
don.php est tout le code que j'ai posté au dessus^^ juste avant l'include
0
Utilisateur anonyme
 
Et comment on le devine ? Pourquoi donnes-tu un minimum d'informations ?
0
Utilisateur anonyme
 
Il y a un gros soucis. Si c'est bien le code que tu as posté juste avant, on aurait dû avoir output started dès la ligne 5, pas la ligne 70. À moins que les lignes de database.php n'entrent dans le compte ( il y en a 65 ?)

Je ne vois rien non plus à la ligne 15 de search.php qui puisse provoquer une modification des headers. Sauf erreur de ma part, il n'y a ni session_start, ni header("Location, ni envoi de cookie ... Tu es sûr que tu nous montres le bon code ?
0
Utilisateur anonyme
 
D'ailleurs, tu nous parles dans ton premier message d'un header location, je ne le vois pas. Où est-il ?
0
select
 
Oui oui je montre le bon code :/ le heade rlocation est dans le include a la fin de don.php, j'ai détaillé ce include juste après dans le meme message
0
Utilisateur anonyme
 
Tu parles de search.php ? Alors dis search.php, car les include, il y en a 2 dans don.php. Essaye d'être précis, ne nous fais pas jouer aux devinettes.
le heade rlocation est dans le include Pourquoi n'indiques-tu pas la ligne ? D'après le message d'erreur, c'est à la ligne 15, mais la ligne 15, c'est
$req = $bdd->prepare("SELECT * FROM vente WHERE title LIKE '%$search%' AND category like '$cat' AND library like '$library'");

Et il est totalement impossible que cette ligne provoque l'erreur que tu as indiquée.
0
select
 
fail désolé je l'avais enlevé pour les test...il est donc dans le include dans le premiere "if" :
if($cat != "all" && $library == "don"){
header('location : location.php');
$req = $bdd->prepare("SELECT * FROM vente WHERE title LIKE '%$search%' AND category like '$cat' AND library like '$library'");
$req->execute(array('search' => $recherche . '%'));
0
select
 
Donc en gros je devrais mettre l'include au début ? Mais dans ce cas la le post que je recherche ne sera pas trouvé vu qu'il sera après l'include non ?

ET j'ai cacher l'élement article pour de l'ajax c'est normal :) je réaffiche cette div grâce a ajax, et si je laisse l'autre ca me la fait donc en doublon
0
Utilisateur anonyme
 
Je ne vais pas rentrer dans les détails, ça nous entraînerait trop loin. Je t'ai expliqué d'où venait le message d'erreur, le reste est une autre question.
j'ai cacher l'élement article pour de l'ajax c'est normal Absolument pas. Tu le caches sans le détruire, tu te retrouves avec deux éléments qui ont le même id, tu vas avoir des surprises.
Et tu envoies du code après la balise </html> !
Je n'ai pas une vue d'ensemble de ton script, en particulier parce que je ne connais pas le code qui se cache derrière le go(), mais j'ai l'impression que tu ne maîtrises pas l'enchaînement des diverses parties de ton code, comme le prouve ton idée que le traitement du formulaire doit être après son envoi dans ton script.
0
select
 
Merci pour ton aide je vais essayé d'arranger ça
0