[PHP] - Problème avec la fonction header

- Problème avec la fonction header [PHP] - PHP - Programmation

Marsh Posté le 15-05-2004 à 14:43:52    

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
Reply

Marsh Posté le 15-05-2004 à 14:43:52   

Reply

Marsh Posté le 15-05-2004 à 15:05:12    

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 !

Reply

Marsh Posté le 15-05-2004 à 19:52:07    

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 ?

Reply

Marsh Posté le 15-05-2004 à 21:06:08    

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
Reply

Marsh Posté le 15-05-2004 à 22:18:25    

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

Reply

Marsh Posté le 15-05-2004 à 22:53:07    

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

Reply

Marsh Posté le 15-05-2004 à 22:58:42    

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.

Reply

Marsh Posté le 16-05-2004 à 02:28:03    

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)

Reply

Marsh Posté le 16-05-2004 à 10:22:56    

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

Reply

Marsh Posté le 16-05-2004 à 10:57:00    

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

Reply

Marsh Posté le 16-05-2004 à 10:57:00   

Reply

Marsh Posté le 16-05-2004 à 11:09:13    

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
Reply

Marsh Posté le 16-05-2004 à 11:13:54    

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
Reply

Marsh Posté le 16-05-2004 à 11:27:15    

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
Reply

Marsh Posté le 17-05-2004 à 07:30:31    

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

Reply

Marsh Posté le 17-05-2004 à 12:55:56    

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

Reply

Marsh Posté le 17-05-2004 à 13:01:10    

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 :/

Reply

Marsh Posté le 17-05-2004 à 13:03:53    

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

Reply

Marsh Posté le 17-05-2004 à 13:07:07    

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 :'(

Reply

Marsh Posté le 17-05-2004 à 13:26:13    

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 ;)

Reply

Marsh Posté le 18-05-2004 à 11:57:17    

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.  :??:

Reply

Marsh Posté le 20-05-2004 à 01:16:23    

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.

Reply

Marsh Posté le 20-05-2004 à 10:32:05    

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 :)

Reply

Marsh Posté le 20-05-2004 à 14:27:51    

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]

Reply

Marsh Posté le 21-05-2004 à 11:31:41    

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

Reply

Marsh Posté le 25-05-2004 à 08:30:08    

Je m'excuse ...

Reply

Marsh Posté le 17-04-2009 à 17:48:47    

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


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 17-04-2009 à 18:55:24    

ç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 ?

Reply

Marsh Posté le 22-04-2009 à 11:12:25    

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. .


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed