J'ai un soucis avec la fonction "header"...

J'ai un soucis avec la fonction "header"... - PHP - Programmation

Marsh Posté le 02-11-2005 à 13:14:24    

Bonjour,
 
J'ai un petit soucis avec la fonction "header". Je travaille sous EasyPHP pour faire un site internet.
je ne comprends pas trop le sens du message. Est-ce que vous pourriez me dire de quoi il s'agit au juste ?
 
Code :
 

Code :
  1. (...)
  2. header("Location: http://www.php.net/" );
  3. (...)


 
message d'erreur :
 

Warning: Cannot modify header information - headers already sent by (output started at m:\site internet\adage\modification_tables\index.php:12) in m:\site internet\adage\modification_tables\index.php on line 18


 
D'avance merci
@+
cvb

Reply

Marsh Posté le 02-11-2005 à 13:14:24   

Reply

Marsh Posté le 02-11-2005 à 13:17:14    

Erreur très très classique.
 
Tu envois des données au navigateur avant la fonction header et il ne faut pas, même pas une espace.

Reply

Marsh Posté le 02-11-2005 à 13:34:33    

Bonjour,
 
Je viens de le mettre en 1er ligne comme conseillé et ca fonctionne. Ce que je ne comprends pas c'est pourquoi je trouve des exemples comme ça sur le NET  ou sur des livres ? Il y a bien un espace et c'est semble t-il intégrer dans le code HTML ?
 

Code :
  1. <?php
  2. if ($age <12)
  3. { header ("location:catalogue.php" );
  4. }
  5. else
  6. { header("location:catalogue2.php" );
  7. }
  8. ?>


 
Merci
@+

Message cité 1 fois
Message édité par cvb le 02-11-2005 à 13:45:05
Reply

Marsh Posté le 02-11-2005 à 15:32:02    

cvb a écrit :

Bonjour,
 
Je viens de le mettre en 1er ligne comme conseillé et ca fonctionne. Ce que je ne comprends pas c'est pourquoi je trouve des exemples comme ça sur le NET  ou sur des livres ? Il y a bien un espace et c'est semble t-il intégrer dans le code HTML ?
 

Code :
  1. <?php
  2. if ($age <12)
  3. { header ("location:catalogue.php" );
  4. }
  5. else
  6. { header("location:catalogue2.php" );
  7. }
  8. ?>


 
Merci
@+


Dans ton exemple, si il n'y a rien avant,  c'est entièrement correct car rien n'a été envoyé au navigateur avant. C'est la seule chose qui compte, que surtout rien ne soit envoyé au navigateur AVANT le header().


---------------
2 * yo = yoyo
Reply

Marsh Posté le 02-11-2005 à 15:37:16    

A moins qu'il se prennent une erreur type Notice pour une variable non définie : $age.


Message édité par dwogsi le 02-11-2005 à 16:54:38
Reply

Marsh Posté le 02-11-2005 à 16:51:10    

merci à vous deux :)
@+

Reply

Marsh Posté le 02-11-2005 à 20:13:03    

Bonjours,
 
J'ai fait la fonction suivante :
 

Code :
  1. function redirect($url)
  2. {
  3.       header('location:$url')
  4. }


 
Que j'ai mise dans une page fonction.php
 
Et dans une autre page tel que login.php ou index.php
j'apelle la fonction, mais le message d'erreur classique apparait.
Pourtant j'ai bien veiller a mettre l'include au debut de la page...

Reply

Marsh Posté le 02-11-2005 à 21:41:10    

comme quoi même comme ça, ça fonctionne pas

Reply

Marsh Posté le 02-11-2005 à 22:03:23    

Bha normalement ca devrais fonctionner puisque j'ai mis le header avant tout script enfin je pense que c'est ca non ? :gratgrat:

Message cité 1 fois
Message édité par richou_ le 02-11-2005 à 22:04:20
Reply

Marsh Posté le 02-11-2005 à 22:08:55    

richou_ a écrit :

Bha normalement ca devrais fonctionner puisque j'ai mis le header avant tout script enfin je pense que c'est ca non ? :gratgrat:


Code :
  1. <?
  2. //debut de page
  3. function hello() { echo "hello"; }
  4. //pleins de trucs
  5. ?>
  6. du html...
  7. <? hello(); ?>


La fonction est définie en haut de page pourtant quand tu l'apelles, elle s'exécutera là ou tu l'as apellée

Reply

Marsh Posté le 02-11-2005 à 22:08:55   

Reply

Marsh Posté le 02-11-2005 à 22:10:38    

Ah pourtant sur phpBB2, la fonction fonctionne...

Reply

Marsh Posté le 02-11-2005 à 22:11:18    

j'ai du mal piger ce que tu expliquais alors :-/

Reply

Marsh Posté le 02-11-2005 à 22:20:41    

Nan je pense plutot que c'est moi qui comprend mal comment fonctionne les fonctions.
En fait moi je pensais que quand tu mettais une fonction dans une page et que tu l'appelais dans une autre la fonction s'executais de la page où la fonction a été declaré.
Mais apparement c'est pas ca...

Reply

Marsh Posté le 02-11-2005 à 22:24:21    

HS : Est-ce qu'il existe une fonction toute faite pour rechercher une valeur précise dans une table. Elle renverrait "true" ou "false"...
 
merci
@+

Reply

Marsh Posté le 02-11-2005 à 22:38:14    

SELECT champs from table WHERE champs='valeur précise'

Reply

Marsh Posté le 03-11-2005 à 08:13:42    


 
Bonjour,
 
Merci, mais je voulais savoir si une fonction récupérer directement la valeur en fonction de ce critère de recherche. En gros il executerais tout seul mysql_query(... et le traitement qu'est derrière ;)
 
@+

Reply

Marsh Posté le 03-11-2005 à 09:16:06    

Et non la programmation c'est pas encore magique!

Reply

Marsh Posté le 03-11-2005 à 09:44:33    

Bonjour, j'ai moi aussi un pti probleme avec mes header.
Je suis en train de faire le tutoriaux ->http://floppy.pcvteam.net/v3/page.php?page=55afin de comprendre comment marche l'authentification, mais j'ai probleme pour la partie administration: cad identification + login.
Au début de ma page j'ai le code suivant :
 
<?
include "global.inc.php";
include "fonction.inc.php";
$conn = connecte();
if (isset($HTTP_GET_VARS["ident"]))
    $ident = $HTTP_GET_VARS["ident"];
else
    $ident = "";
if (isset($HTTP_GET_VARS["mdp"]))
    $mdp = $HTTP_GET_VARS["mdp"];
else
    $mdp = "";
if (isset($HTTP_GET_VARS["page"]))
    $page = $HTTP_GET_VARS["page"];
else
    $page = 1;
if (! isLoginNewsOk($ident, $mdp)) {
    $err = urlEncode("Login ou mot de passe incorrecte !" );
    deconnecte($conn);
    header("Location: newsLogin.php?erreur=$err&ident=$ident&mdp=$mdp" );
}
?>  
 
Le problème est que le header n'etant pas au debut de mon code il ne fonctionne pas, j'ai donc mis le header en début de code mais voila j'ai un msg d'erreur comme quoi les variables $err, $ident, et $mdp ne sont pas declaré (c'est logique).
 
Si vous pouviez m'avancer un petit peu, thx.

Reply

Marsh Posté le 03-11-2005 à 09:49:32    

3tnieS a écrit :

header("Location: newsLogin.php?erreur=$err&ident=$ident&mdp=$mdp");


Moi je trouve ca très moyen....
 
Sinon pour ton problème ca veut dire que l'un des script inclus plus haut renvoit quelque chose, du texte, un espace, un retour à la ligne, etc.... Ou alors c'est une fonction que tu appel mais ca je pense pas.

Reply

Marsh Posté le 03-11-2005 à 10:11:48    

dwogsi a écrit :

Et non la programmation c'est pas encore magique!


 
Dés fois il existe des prés fonction, donc j'ai tenté le coup de demandé ;)

Reply

Marsh Posté le 03-11-2005 à 12:33:39    

thx dwogsi ca marche ^^, tu peux me donne un peu plus dinfo  pour
header("Location: newsLogin.php?erreur=$err&ident=$ident&mdp=$mdp" );
Pourquoi tu trouve ca moyen ? y a quoi pour ameliorer ?

Reply

Marsh Posté le 03-11-2005 à 14:08:54    

3tnieS a écrit :

thx dwogsi ca marche ^^, tu peux me donne un peu plus dinfo  pour
header("Location: newsLogin.php?erreur=$err&ident=$ident&mdp=$mdp" );
Pourquoi tu trouve ca moyen ? y a quoi pour ameliorer ?


Parce que identifiant et mot de passe saisis ne sont certainement pas des informations à passer dans une url.

Reply

Marsh Posté le 03-11-2005 à 14:10:50    

Le mdp dans l'url c'est pas génial pour la sécurité ;)

Reply

Marsh Posté le 03-11-2005 à 14:29:15    

richou_ a écrit :

Le mdp dans l'url c'est pas génial pour la sécurité ;)


Parce que c'est pas ce que je viens de dire?

Reply

Marsh Posté le 03-11-2005 à 18:15:10    

Je l'ai poster juste apres toi j'ai pas eu le temps de voir ton post regarde l'heure...

Reply

Marsh Posté le 03-11-2005 à 20:38:09    

Finalement j'ai trouver une fonction sur le net utilisant le meta refresh :
 

Code :
  1. function redirect($url)
  2. {
  3.     die('<meta http-equiv="refresh" content="0;URL='.$url.'">');
  4. }


 
Mais je sais pas si c'est correct...

Reply

Marsh Posté le 03-11-2005 à 20:52:50    

En effet c'est pas correct... Bon, mais pas correct.


---------------
2 * yo = yoyo
Reply

Marsh Posté le 03-11-2005 à 21:00:38    

Je sais pas comment faire le header ne veux pas marcher dans mon code...

Reply

Marsh Posté le 03-11-2005 à 21:08:45    

Mets l'url en entier dans le header, pas seulement la page.


---------------
2 * yo = yoyo
Reply

Marsh Posté le 04-11-2005 à 13:58:34    

richou_ a écrit :

Code :
  1. function redirect($url)
  2. {
  3.     die('<meta http-equiv="refresh" content="0;URL='.$url.'">');
  4. }


Si t'utilise cette fonction, alors met au moins le content à 1 et  pas à 0. Certains navigateurs considérent que 0 = jamais.

Reply

Marsh Posté le 04-11-2005 à 14:14:57    

omega2 a écrit :

Si t'utilise cette fonction, alors met au moins le content à 1 et  pas à 0. Certains navigateurs considérent que 0 = jamais.


 
Le mieux étant quand même de ne pas utiliser cette solution!
 
Mais je comprend pas comment autant de personnes peuvent avoir des problèmes avec la fonction header(), c'est pourtant pas compliqué à utiliser, non?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 04-11-2005 à 19:19:26    

Quand j'utilise la fonction header j'ai :  

Citation :

Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/4/7/XXXXX/template.php(127) : eval()'d code:1) in /var/www/free.fr/4/7/XXXXX/redirect.php on line 4


 
Qui apparait et je comprend jamais comment faire pour le virer...

Reply

Marsh Posté le 04-11-2005 à 19:24:26    

euh ? tu veux dire la même erreur dont on a donné la solution plus haut ?

Reply

Marsh Posté le 04-11-2005 à 19:32:27    

Oui exactement mais je comprend pas comment la faire disparaitre malgres la solution plus haut :/

Reply

Marsh Posté le 04-11-2005 à 19:32:49    

The-Shadow a écrit :

Erreur très très classique.
 
Tu envois des données au navigateur avant la fonction header et il ne faut pas, même pas une espace.



---------------
Les CSS c'est bon mangez-en
Reply

Marsh Posté le 04-11-2005 à 19:35:52    

Oui mais le probleme c'est que je dois absolument mettre la fonction header la ou je l'ai mise si je la met autre part tout mon code ne marche plus...

Reply

Marsh Posté le 04-11-2005 à 19:50:36    

richou_ a écrit :

Quand j'utilise la fonction header j'ai :  

Citation :

Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/4/7/XXXXX/template.php(127) : eval()'d code:1) in /var/www/free.fr/4/7/XXXXX/redirect.php on line 4


Qui apparait et je comprend jamais comment faire pour le virer...

richou_ a écrit :

Oui mais le probleme c'est que je dois absolument mettre la fonction header la ou je l'ai mise si je la met autre part tout mon code ne marche plus...

ça sent le phpBB à plein nez ton truc, la solution doit exister qlque part sur un forum phpBB ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
Reply

Marsh Posté le 04-11-2005 à 19:52:58    

Oui j'ai utiliser les templates de phpBB, pour la fonction redirect() de phpbb c'est pratiquement le meme que celui que j'ai mis avec quelque detail qui changent...

Reply

Marsh Posté le 04-11-2005 à 20:02:07    

richou_ a écrit :

Oui mais le probleme c'est que je dois absolument mettre la fonction header la ou je l'ai mise si je la met autre part tout mon code ne marche plus...


Dans ce cas, il faut prévoir de bufferiser le code HTML, donc d'utiliser la fonction ob_start('') comme indiqué plus haut.

Reply

Marsh Posté le 25-01-2006 à 12:32:40    

Bonjour,  
 
J'ai ce même problème classique sur une page PHP que je suis en train de faire :  
le principe est le suivant :  
1/ test du login/mdp par rapport à la base LDAP
2/ si c'est concluant -> écriture d'un cookie (TRUE) et redirection sur une page index.php
3/ si c'est erroné -> test sur la base mysql
4/ si c'est concluant -> écriture d'un cookie (TRUE) et redirection sur une page index.php
5/ si c'est erroné -> écriture d'un cookie (FALSE) et redirection sur une page index.php
 
Bref en fin de test LDAP je fais ça :  

Code :
  1. if ($logu) {
  2.   setcookie("name", $user);
  3.   setcookie("logged", "1" );
  4.   Header ("location: http://server/folder/index.php" );
  5.   exit();
  6.   }


 
sinon je passe la main à la fonction suivante qui test sur la base de données MySql
 
là encore je passe les même paramètres :  

Code :
  1. if ($test_use == $user) {
  2.  if ($password == $pass){
  3.   setcookie("logged", "1" );
  4.   setcookie("name", $user);
  5.   Header ("location: http://server/folder/index.php" );
  6.   }
  7.  else {
  8.   setcookie("logged", "0" );
  9.   Header ("location: http://server/folder/index.php" );
  10.   exit();
  11.   }
  12. }


 
le hic c'est que ça marche très bien pour un utilisateur qui peut se connecter sur la base LDAP, en revanche ça chie des pruneaux quand l'utilisateur est authentifié par la base de données MySql.
 
Pourtant rien ne change véritablement :o
 
A ceci prêt que : dans la mesure où je commence par le test LDAP j'ai ce message d'erreur en haut de page quand le login/mdp n'est pas correct :  

Warning: ldap_bind(): Unable to bind to server: Invalid credentials in /var/www/folder/login.php on line 38


 
est ce que ça pourrait-en être la cause?
 
merci pour votre aide :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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