Page 1 sur 1

Info sur cette erreur header location...

Posté : 06 sept. 2016, 15:34
par rononedex
Bonjour,

J'ai cette erreur :

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\parts\header.php:106) in C:\wamp\www\lib\functions.php on line 145
Hors j'ai fais mes devoirs cette erreur est du au fait que l'on a un espace avant session start ou un espace avant et après les chevrons PHP.

Hors j'ai vérifié je n'ai pas d'espace avant ou après les chevrons, le chevron fermant je ne le met pas ma vue est séparé du PHP.

Ensuite pour l'appel de session start je fait ça :

Code : Tout sélectionner

if(session_status() == PHP_SESSION_NONE){//on verifi et démarre les sessions session_start(); }
je n'ai pas d'espace avant.

J'ai cette erreur au moment ou je test si on a bien un id et si il existe en BDD sinon je fait la redirection

Code : Tout sélectionner

function get_post(){//on affiche les articles global $db; $id = [intval($_GET['id'])]; $req = $db->prepare("Mon SELECT"); $req->execute($id); if($req->rowcount() == 0){ setFlash('<strong>Oh oh!</strong> une erreur c\'est produite <strong> il n\'y a aucun article avec cette id </strong>','warning'); redirect('home'); } $results = $req->fetchObject(); return $results; }


Je ne comprend pas cette erreur qui ne devrais pas existé, car quand je poste un commentaire sous l'article la redirection ce passe bien avec et sans erreur, le traitement ce fait sur la même page.

En attendant de trouver je met ob_start et ob_end_flush mai ce n'est pas une solution que je souhaite.

Dans mes vue je n'ai que des echo et des boucle !!

Non vraiment je n'ai aucune idées du problème que je n'avais pas avant et je n'y ai pas toucher.

Re: Info sur cette erreur header location...

Posté : 06 sept. 2016, 15:50
par finipe
Ce genre d'erreur arrive lorsque tu as déjà envoyé du texte au navigateur. En l'occurrence, ici, il semble que la fonction setFlash envoie du texte, et donc à partir de là tu ne peux pas utiliser la fonction header.

Re: Info sur cette erreur header location...

Posté : 06 sept. 2016, 17:22
par rononedex
Oui mai non j'ai un die juste après

Code : Tout sélectionner

function redirect($location_page){ header("location:" . WEBROOT . "index.php?page=$location_page"); exit(); }
Puis j'ai aussi cette erreur sans, et ce flash est partout, j'ai juste mis a jour le design quand je retourne sur mon ancienne version ça fonctionne.

je vous poste une vidéo pour que vous puissiez bien comprendre mon interrogation (elle ne sera pas monétisé)

https://youtu.be/GCiJqZsZO1Y

Re: Info sur cette erreur header location...

Posté : 07 sept. 2016, 00:34
par finipe
Wow, t'es motivé pour avoir une réponse avec une pareille vidéo :wink:

Donc je confirme ce que je disais : dans ton fichier "post.php", tu as les lignes suivantes :
echo Flash();
$post = get_post();
Tout d'abord, echo Flash() renvoie du texte (en l'occurrence, quand tu testes une id invalide, le message d'erreur "il n'y a aucun article avec cette id").

À partir de là, impossible d'envoyer des header, tu as déjà envoyé du texte au navigateur.

Puis, justement, tu appelles la fonction get_post(), qui fait une redirection. D'où le message d'erreur.

PS : de toute façon quand tu as ce message d'erreur, c'est toujours la même boulette : des headers envoyés après du texte.

Re: Info sur cette erreur header location...

Posté : 07 sept. 2016, 09:02
par moogli
salut,

j'ajouterais que le message indique la ligne qui affiche quelque chose : C:\wamp\www\parts\header.php:98
je ne sais pas ce qu'il y a mais ça affiche quelque chose.

quand je vois
setFlash()
redirect()

je me demande ce que fait setFlash(). C'est elle qui affiche ?


@+

Re: Info sur cette erreur header location...

Posté : 07 sept. 2016, 18:21
par rononedex
Voici mon flash

Code : Tout sélectionner

/************* * flash message **************/ function flash(){ if(isset($_SESSION['Flash'])){ extract($_SESSION['Flash']); unset($_SESSION['Flash']); return "<div class='alert alert-$type'><h4 style=\"margin:0;paddin=:5px;\">$message</h4></div>"; } } function setFlash($message, $type = 'success'){ $_SESSION['Flash']['message'] = $message; $_SESSION['Flash']['type'] = $type; }
Je comprend ce que vous me dites mai en même temps je fait la même redirection a chaque fois et elle fonctionne bien partout.

de plus j'ai désactiver x fois le flash et j'ai le même soucis !

Et la ligne 98 de mon header c'est ça :

Code : Tout sélectionner

mon fichier fonction /*********** * menu des catégories ************/ function get_CategoriesMenu($CatClassName){ $categorie = get_categories(); foreach($categorie as $category){ if($category->category_id == 0){ }else{ echo " <li class='$CatClassName'> <a href='".WEBROOT."index.php?page=categories&id=$category->id'>" . $category->cat_name . " - (" . $category->nbartid . ")</a> </li> "; } } } dans ma vue <?php get_CategoriesMenu('topmenu'); ?>
Si je ferais une redirection en plein milieu du HTML je comprendrai mai ce n'est pas le cas, je n'ai pas non plus de problème dans mon forum et dans l'administration.

Re: Info sur cette erreur header location...

Posté : 07 sept. 2016, 19:07
par @rthur
headers already sent by (output started at C:\wamp\www\parts\header.php:106)
Regarde à la ligne 106 de ton fichier header.php, tu as quelque chose qui y envoie du HTML.

Re: Info sur cette erreur header location...

Posté : 18 sept. 2016, 10:26
par rononedex
Désolé du retard.

Alors @artur mon header c'est le <div class="row"> c'est ce qu'il m'indique sinon c'est tout mon header qui contient du HTML et des echo c'est le but d'un site WEB.

Re: Info sur cette erreur header location...

Posté : 18 sept. 2016, 11:00
par @rthur
Tu ne peux pas utiliser la fonction PHP headers() si tu envoies du HTML avant.

Si tu es "obligé" d'envoyer du HTML avant, c'est que tu as une erreur d'architecture de ton projet.
Soit tu changes ton code pour ne pas envoyer du HTML avabt, soit tu n'utilises pas la fonction header() mais tu fait une redirection avec du javascript par exemple.