Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1529 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - Problème avec la fonction header

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] - Problème avec la fonction header

n°726833
AlphaZone
Posté le 15-05-2004 à 14:43:52  profilanswer
 

Bonjours à tous,
 
Je viens de codé une page livre d'or avec formulaire.
Et je l'intègre dans une page index.php avec des pseudo-frames.
 
Le formulaire fonctionne correctement et quand on presse le bouton "Envoyer" cela appel la page de vérification des données + l'enregistrement de la signature si tout est correct.
 
Jusque la tout marche.
 
MAIS j'arrive à la ligne où l'utilisateur est renvoyé sur la page des signature après avoir posté: header('index.php?page=guestbook');
 
Voici ce que ça m'affiche:

Code :
  1. Warning: Cannot add header information - headers already sent by (output started at c:\program files\easyphp\www\trash news\index.php:3) in c:\program files\easyphp\www\trash news\post.conf.php on line 55


 
 
J'ai testé le livre d'or seul, et ca marche sans problème, il me redirige vers les signatures.
Mais dès que l'intègre, ca se gate :'(
 
Avez-vous une solution à mon problème ?
 
Merci d'avance.


Message édité par AlphaZone le 15-05-2004 à 14:44:33
mood
Publicité
Posté le 15-05-2004 à 14:43:52  profilanswer
 

n°726845
Berceker U​nited
PSN : berceker_united
Posté le 15-05-2004 à 15:05:12  profilanswer
 

Est ce qu'il y a pas un espace au dessu de ta redirection ou une erreur  
-------------------- haut de ton fichier
   <- un espace ? une erreur ?
<?php
 header(Location:...);
 ou  
setcookie();
<?
-------------------------
 
regarde dans le code source de ton html généré qui affiche l'erreur et regarde ce qu'il peut y avoir au dessu !

n°726984
ratibus
Posté le 15-05-2004 à 19:52:07  profilanswer
 

output started at c:\program files\easyphp\www\trash news\index.php:3
 
Tu as ta réponse dans ce message d'erreur
Tu dois envoyer du HTML à la ligne 3 de index.php
 
Peux-tu nous poster le code de index.php ?

n°727018
AlphaZone
Posté le 15-05-2004 à 21:06:08  profilanswer
 

oui biensur,
 
le voici:
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3. <?PHP
  4. // Début compteur de chargement de la page
  5. function getmicrotime()
  6. {
  7.         list($usec, $sec) = explode(" ",microtime());
  8.         return ((float)$usec + (float)$sec);
  9. }
  10. $time_start = getmicrotime();
  11. ?>
  12. <head>
  13. <title>ASATB</title>
  14. <meta http-equiv="content-type" content="text/html; charset=iso-8859-15"></meta>
  15. <link href="style.css" title="WMM" rel="stylesheet" type="text/css">
  16. <link href="admin/includes/tr_style.css" rel="stylesheet" type="text/css">
  17. <script language=javascript enleve pub lycos>
  18. function kill_ad()
  19. {
  20.   window.top.document.body.cols = "*,0";
  21.   setTimeout("kill_ad()",10);
  22. }
  23. function setInterval(x,y)
  24. {
  25.   return 0;
  26. }
  27. window.setTimeout("kill_ad()",10);
  28. </script>
  29. </head>
  30. <body>
  31.   <div id="Header">
  32.   </div>
  33.   <p class="txt" align="center">| <a href="index.php">Accueil</a> | <a href="index.php?page=historique.php">Historique du club</a> | <a href="index.php?page=equipes.php">Les équipes</a> | <a href="index.php?page=resultats.php">Les résultats</a> | <a href="index.php?page=calendrier.php">Le calendrier</a> | <a href="index.php?page=accueil">Plan d'accès</a> | <a href="index.php?page=accueil">Le cinquième 1/4 temps</a> | <a href="index.php?page=accueil">Articles de journaux</a> |<br>| <a href="index.php?page=guestbook">Livre d'or</a> | <a href="index.php?page=mcGallery/index.php">Show Time</a> | <a href="index.php?page=accueil">Top Ten </a> | <a href="index.php?page=accueil">Contact</a> |</p>
  34.   <div id="Cadre" class="txt">
  35. <?PHP
  36. //require("lib.nbc/nbConnecte.inc.php3" );
  37. //$nb=nbc();
  38. echo $nb." connecté sur le site";
  39. if($nb>1) echo "s";
  40. ?>
  41.   <p>
  42.   <?PHP include('centre.php');  ?>
  43.   </p>
  44.   </div>
  45.         <div id="InfosPage" class="txt">
  46.           <?PHP
  47.       // Affichage temps de chargement de la page
  48.       $time_end = getmicrotime();
  49.       $time = $time_end - $time_start;
  50.       echo '- Page générée en<b> '.round($time,5).'</b>secondes -';
  51.     ?>
  52.           <br />AndOne &copy; 2004 - Tous droits réservés
  53.         </div>
  54. </body>
  55. </html>


Message édité par AlphaZone le 15-05-2004 à 21:07:17
n°727065
naceroth
Posté le 15-05-2004 à 22:18:25  profilanswer
 

Ben c'est clair, tu fais une sortie html avant de tenter ta redirection, ce qui est impossible à faire :)

n°727083
AlphaZone
Posté le 15-05-2004 à 22:53:07  profilanswer
 

Je ne vois pas ce qui cloche.
Tu peux m'indiquer l'erreur et si possible la corriger. Merci.

n°727094
Hermes le ​Messager
Breton Quiétiste
Posté le 15-05-2004 à 22:58:42  profilanswer
 

AlphaZone a écrit :

Je ne vois pas ce qui cloche.
Tu peux m'indiquer l'erreur et si possible la corriger. Merci.


 
Un header ne peux PAS être précédé d'une sortie HTML. En clair tu n'as PAS LE DROIT d'afficher quoi que ce soit avant ton header.

n°727230
naceroth
Posté le 16-05-2004 à 02:28:03  profilanswer
 

AlphaZone a écrit :

Je ne vois pas ce qui cloche.
Tu peux m'indiquer l'erreur et si possible la corriger. Merci.


 
Oh le lourd  :pt1cable:  
 
Dans un fichier qui contient un header, tu ne peux pas avoir quoi que ce soit de transmis au navigateur avant le header (donc, pas de html entre autres). Dans ton fichier index.php, la première ligne (hors doctype) est déjà de l'html, c'est pour ça que index ne fonctionne pas tandis que le livre d'or seul fonctionne (parce que j'imagines que tu inclus le livre d'or dans index.php)

n°727250
RiderCrazy
Posté le 16-05-2004 à 10:22:56  profilanswer
 

Citation :

N'oubliez jamais que header  doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichges PHP. Une erreur très classique est de lire un fichier avec include  ou require  , et de laisser des espaces ou des lignes vides, qui génèreront un affichage avant que la fonction header  ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
header doit toujours être appelé en premier


 
Source: http://www.nexen.net/docs/php/anno [...] header.php

n°727260
ratibus
Posté le 16-05-2004 à 10:57:00  profilanswer
 

Une solution pour contourner ce pb de header à bien placé est la bufferisation de sortie : http://fr3.php.net/manual/fr/ref.outcontrol.php

mood
Publicité
Posté le 16-05-2004 à 10:57:00  profilanswer
 

n°727264
RiderCrazy
Posté le 16-05-2004 à 11:09:13  profilanswer
 

bien vu mais je pense qu'il faut avoir acquis un certain niveau de base avant d'utiliser ça... je crois pas que ce soit le cas ici :/


Message édité par RiderCrazy le 16-05-2004 à 11:09:32
n°727266
ratibus
Posté le 16-05-2004 à 11:13:54  profilanswer
 

RiderCrazy a écrit :

bien vu mais je pense qu'il faut avoir acquis un certain niveau de base avant d'utiliser ça... je crois pas que ce soit le cas ici :/

effectivement mais pour lui il suffit de faire un  

Code :
  1. <?php ob_start(); ?>

dans sa première ligne du index.php :D


Message édité par ratibus le 16-05-2004 à 11:14:09
n°727272
RiderCrazy
Posté le 16-05-2004 à 11:27:15  profilanswer
 

ratibus a écrit :

effectivement mais pour lui il suffit de faire un  

Code :
  1. <?php ob_start(); ?>

dans sa première ligne du index.php :D

Tout à fait d'accord sur la forme mais sur le fond, ça me parait pas une bonne idée... et je crois que tu penses la même chose ( :D ). Autant lui pondre un code direct. Le problème c'est que s'il apprend pas à chercher un peu par lui-même, dès qu'il aura le moindre il va venir nous voir. Vaut mieux qu'il étudie la doc, qu'il fasse du pas à pas, qu'il améliore son/ses script(s) au fur et à mesure.
Mais je crois qu'on est tous d'accord sur ce point...
 
edit: faudrait que j'apprenne à taper aussi vite que je pense, ça m'éviterait d'oublier des mots [:ddr555]


Message édité par RiderCrazy le 16-05-2004 à 11:28:39
n°727822
AlphaZone
Posté le 17-05-2004 à 07:30:31  profilanswer
 

Merci beaucoup de vos aides.
 
J'ai retenu la règle ;)

n°728851
AlphaZone
Posté le 17-05-2004 à 12:55:56  profilanswer
 

C'est quand même bizarre.
 
J'ai fais une partie administration, et le header fonctionne très bien.
 
Pourquoi dans ma nouvelle page index.php, cela ne fonctionne pas ?
 
Voici les modifications apportées:

Code :
  1. <?php
  2. require('admin/includes/config.inc.php');
  3. $time_start = getmicrotime();
  4. include('header.tpl');
  5. echo '<table width="760" border="0" cellspacing="0" cellpadding="0" align="center">
  6.     <tr>
  7.       <td><img src="images/banniere.jpg" width=760 height=100 border=0></td>
  8.     </tr>
  9.     <tr>
  10.       <td height=20></td>
  11.     </tr>
  12.     <tr>
  13.       <td class="menu">';
  14. include('menu.php');
  15. echo '</td>
  16.     </tr>
  17.     <tr>
  18.       <td height=20></td>
  19.     </tr>
  20.     <tr>
  21.       <td class="Main">';
  22. //require("lib.nbc/nbConnecte.inc.php3" );
  23. //$nb=nbc();
  24. echo $nb.' connecté';
  25. if($nb > 1) { echo 's'; }
  26. echo ' sur le site<br>';
  27. if ($page != "" )
  28.      { echo '<br><div class=AffichNom>» '.$page.'</div><br>'; }
  29. echo '<br>';
  30. include('centre.php');
  31. echo '</td>
  32.     </tr>
  33.     <tr>
  34.       <td height=20></td>
  35.     </tr>
  36.          <tr>
  37.       <td class="copyright">';
  38. include('copyright.php');
  39. echo '</td>
  40.     </tr>
  41.   </table>';
  42. include('footer.tpl');
  43. ?>


 
 
Fichier header.tpl (Evidement ce n'est pas un vrai template ;) mais seulement un leurre.)

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html>
  3. <head>
  4. <title>ASATB</title>
  5. <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
  6. <link href="admin/includes/tr_style.css" rel="stylesheet" type="text/css">
  7. <script language=Javascript>
  8. function kill_ad()
  9. {
  10.   window.top.document.body.cols = "*,0";
  11.   setTimeout("kill_ad()",10);
  12. }
  13. function setInterval(x,y)
  14. {
  15.   return 0;
  16. }
  17. window.setTimeout("kill_ad()",10);
  18. </script>
  19. </head>
  20. <body>


 
 
Ca me donne toujours la même erreur:

Code :
  1. Warning: Cannot add header information - headers already sent by (output started at c:\program files\easyphp\www\trash news\header.tpl:7) in c:\program files\easyphp\www\trash news\post.conf.php on line 53

n°728853
dropsy
et bonne chance surtout...
Posté le 17-05-2004 à 13:01:10  profilanswer
 

même cause, même conséquence [:proy]
Rajoute ob_start() au début de ton fichier index ;)
enfin, je te conseille vivement de lire la doc au sujet de header() et de ob_start(), parce que j'ai l'impression que tu comprends pas vraiment ce qu'ils font :/

n°728856
AlphaZone
Posté le 17-05-2004 à 13:03:53  profilanswer
 

Oui c'est vrai que je suis un peu embrouillé mais pourquoi ma partie admin fonctionne très bien et pas cette page ?

n°728861
AlphaZone
Posté le 17-05-2004 à 13:07:07  profilanswer
 

J'ai utilisé op_start() et ob_end_flush().
 
Ca marche parfaitement, je vous en remercie.
 
Reste l'enigme du pourquoi ca marche d'un côté et pas de l'autre :'(

n°728881
dropsy
et bonne chance surtout...
Posté le 17-05-2004 à 13:26:13  profilanswer
 

il faut lire la doc :o
en gros, header() envoie des en-têtes http qui doivent être envoyés avant tout autre contenu (histoire de respecter le protocole http)... donc si tu retournes du html avant ton header, zou t'as l'erreur en question.
ob_start et ob_flush permet d'utiliser un buffer de html, ce qui permet de retarder l'envoie du html vers le client et t'évite les erreurs avec header.
 
voila, bon, c'est à la grosse hein, la doc est plus complète et plus claire ;)

n°730054
Hermes le ​Messager
Breton Quiétiste
Posté le 18-05-2004 à 11:57:17  profilanswer
 

AlphaZone a écrit :

J'ai utilisé op_start() et ob_end_flush().
 
Ca marche parfaitement, je vous en remercie.
 
Reste l'enigme du pourquoi ca marche d'un côté et pas de l'autre :'(


 
Juste une question :
 
Tu as lu les messages précédents ?  :heink:  Tu les as compris ? Parce que  là, ya un problème quand même... On te répète 15 fois la même chose et tu reposes sans cesse la même question.  :??:

n°732448
AlphaZone
Posté le 20-05-2004 à 01:16:23  profilanswer
 

Hermes le Messager a écrit :

Juste une question :
 
Tu as lu les messages précédents ?  :heink:  Tu les as compris ? Parce que  là, ya un problème quand même... On te répète 15 fois la même chose et tu reposes sans cesse la même question.  :??:


 
Non mais t'inquiète. Ca va aller.
Cool mec ;)
 
Merci.

n°732531
Rainbow_Ef​reet
Posté le 20-05-2004 à 10:32:05  profilanswer
 

Si le but est de sortir de la page tu peut faire une redirection en javascript suivis d'un exit() en PHP ce qui va arreter l execution du code PHP puis envoyer une redirection au client et celui n'y verra que du feu :)

n°732738
dropsy
et bonne chance surtout...
Posté le 20-05-2004 à 14:27:51  profilanswer
 

rainbow_efreet a écrit :

Si le but est de sortir de la page tu peut faire une redirection en javascript suivis d'un exit() en PHP ce qui va arreter l execution du code PHP puis envoyer une redirection au client et celui n'y verra que du feu :)


quel intérêt de monter une usine à gaz :??:
il faut qu'il apprenne à se servir de header, c'est tout [:proy]

n°733344
AlphaZone
Posté le 21-05-2004 à 11:31:41  profilanswer
 

Exactement dropsy. L'expérience vient avec le temps :D

n°737123
Rainbow_Ef​reet
Posté le 25-05-2004 à 08:30:08  profilanswer
 

Je m'excuse ...

n°1874508
grosbin
OR die;
Posté le 17-04-2009 à 17:48:47  profilanswer
 

Up de 5 ans, qqu'un aurait-il vu le cas de redirections 301 se comportant comme des includes ?


---------------
Développeur Php Annecy
n°1874555
yellu
Posté le 17-04-2009 à 18:55:24  profilanswer
 

ça me semble difficile, es-tu certain que la page ciblée par la 301 n'est pas identique à la page précédente à l'exception d'un bloc et que du coup on puisse croire à un include ?

n°1876183
grosbin
OR die;
Posté le 22-04-2009 à 11:12:25  profilanswer
 

non c'est le nouveau comportement des headers dans le suphp d'ovh ( version 5.1.3 )
qui nécessite d'écrire 3 lignes bien renseignées avec le host de la redirection etc. .


---------------
Développeur Php Annecy
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] - Problème avec la fonction header

 

Sujets relatifs
[résolu][php] pb variable dynamiqueFonction PHP dans un onclick
Probleme spécialisation de template[RESOLU]Comment donner une fonction en tant qu'"action"
[ASP] Probleme de formule avec Regular Expression[PHP] GLOBALS
Fonction de génération aléatoire en Assembleur VAX[PHP] Galerie photo + upload :: Venez tester ::
Petit Probleme de programmation[PHP] Probleme sur la fonction header()
Plus de sujets relatifs à : [PHP] - Problème avec la fonction header


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR