Redirection sans header()

Redirection sans header() - PHP - Programmation

Marsh Posté le 14-03-2005 à 19:59:04    

Bonjour !
 
Y-a-t-il un moyen de rediriger vers une page sans utiliser la fonction header()... Parce que j'ai une imbrication d'include() qui m'impose de passer du code html avt un envoi de fonction header() ....
D'où ma question ....  :ange:  

Reply

Marsh Posté le 14-03-2005 à 19:59:04   

Reply

Marsh Posté le 14-03-2005 à 20:18:40    

Salut,
 
JavaScript: document.location

Reply

Marsh Posté le 14-03-2005 à 20:33:45    

Ou bien tu regardes du côté de ob_flush (ou proche de ça, bref ob_xxx), ce qui peut te permettre te passer outre le problème de html avant header...

Reply

Marsh Posté le 14-03-2005 à 20:46:16    

belay a écrit :

Bonjour !
 
Y-a-t-il un moyen de rediriger vers une page sans utiliser la fonction header()... Parce que j'ai une imbrication d'include() qui m'impose de passer du code html avt un envoi de fonction header() ....
D'où ma question ....  :ange:


 
Alors c'est que tu n'as pas bien construit ton site...
 
[mode "Je me la pete"]
Mon cms maison permet de metre un header n'importe ou, et sans utiliser les buffer (ob_flush). Je fait simplement en sorte que l'envoi des donnees ne se fasse qu'a la fin de tout le traitement php (je le repete sans buffer).
[/mode "Je me la pete"]

Reply

Marsh Posté le 14-03-2005 à 21:41:39    

Merci à tous ...
Mais à priori Cerel à raison.... :D
Jsui en train de revoir la structure de mon site :D
Et au prie je regarderai du coté de ob_qqch ;)

Reply

Marsh Posté le 14-03-2005 à 22:06:18    

Bon en fait ce que je pensais ne marche pas :( ... Je vous donne des morceaux de code :

Citation :

L'ERREUR :
Warning: Cannot modify header information - headers already sent by (output started at e:\mes documents\belay\www\index.php:11) in e:\mes documents\belay\www\phpbb.php on line 83


Citation :


LE DEBUT DE LA PAGE INDEX :3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans nom</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="conteneur">
LIGNE 11--->   <?php
  include ('head.php');
  ?>
 
  <div id="conteneur2">
   <div id="gauche">
   <?php
   include ('nav.php');
   ?>
   </div>


Citation :


LA PAGE CONTENANT LE HEADER :
 
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
 
// If user is not logged in - redirect to the login page with this scriptname as a redirect to...
if( !$userdata['session_logged_in'] )
{
header("Location: " . append_sid("../login." . php . "?redirect=" . $PHP_SELF));
}


 
Les include de la page index.php me permettent d'insérer mais page de mise en forme HTML ....
Donc en gros ds une rubrique de mon site qd je clique sur un item ça me lance le fichier phpcheck.php (qui contient le HEADER) et bim bam boum erreur parce que forcement avt j'ai chargé les diverses pages du site...
Le fichier phpcheck me permet d'utiliser les session utilisateurs que phpBB .... j'ai trouvé un script tout fait sur leur site...Qui marche sans pb tout seul mais à inclure ds le design de mon site c'est une galére...
J'ai lu d'utiliser un include_once....Est ce que ça peu corriger le pb ..
MErci de votre aide ...

Reply

Marsh Posté le 15-03-2005 à 08:01:07    

Tu ne peux rien "envoyer" avant de faire ton header, meme pas d'espaces.
Or dans ton code tu "envoi" plein de code html avant...
En gros ton <? doit etre au debut du fichier, et pas d'echo avec du html avant ton header.
 
Donc tu dois faire en sorte que le header soit la premiere chose que php va "envoyer" au nav.

Reply

Marsh Posté le 15-03-2005 à 09:18:37    

Arf ça va etre dur :D

Reply

Marsh Posté le 16-03-2005 à 19:23:07    

Jveu bien masi comment je fais pour utiliser mes pseudos frames :D .... Parce que si le code n'apparait pas à sa place...Bah ça marche po

Reply

Marsh Posté le 16-03-2005 à 21:50:06    

Bah en fait j'ai utilisé ce code html classique :D

Code :
  1. if($logout) 
  2. {
  3.     session_end($userdata['session_id'], $userdata['user_id']);
  4. die('<META HTTP-equiv="refresh" content=0;URL='. append_sid($redirect_logout) . '>');
  5. }
  6. elseif( $userdata['session_logged_in'] ) 
  7. {
  8. die('<META HTTP-equiv="refresh" content=0;URL='. $go_logout . '>');
  9. }
  10. else
  11. {
  12. die('<META HTTP-equiv="refresh" content=0;URL='. $go_login . '>');
  13. }

Reply

Marsh Posté le 16-03-2005 à 21:50:06   

Reply

Marsh Posté le 16-03-2005 à 23:03:46    

+1 pour cette methode

Reply

Marsh Posté le 16-03-2005 à 23:10:47    

cerel a écrit :

Je fait simplement en sorte que l'envoi des donnees ne se fasse qu'a la fin de tout le traitement php (je le repete sans buffer).
[/mode "Je me la pete"]


 
Comment donc ?  :??:


---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 17-03-2005 à 07:57:48    

Personellement j'utilise des templates pour separer le code html du code php.
Ensuite j'ai cree un pseudo systeme de "modules".
 
La page index.php s'occupe de charger la template du fichier index. Dans cette template il y a l'emplacement pour le code html qui est prevu.
Chaque module (lorsqu'il est charge) me renvoie une chaine de chars avec le "son" code html. Une fois que je recois cette chaine je l'introduis a l'endroit souhaite de la template puis, et uniquement a la fin de tout le processus, je renvoi le code html genere par la template au browser.
 
Un module pour faire simple, c'est simplement une page php avec une fonction predefinie "getContent" qui s'occupe de renvoyer le code html.
 
L'avantage de cette technique est que l'envoi de code html ne se fait que depuis index.php est uniquement apres toute la phase de traitement. Les modules, s'ils ont besoin peuvent utiliser header, ou les autres methodes qui ont besoin de modifier les headers, sans probleme.
 
J'ai meme laisse la possibilite aux modules de changer le titre de la page s'ils en ont besoin.
 
PS : En fait ce CMS je le code avec un pote, je suis pas tout seul dessus, alors s'il passe par ici je lui fait un petit coucou :D

Reply

Marsh Posté le 17-03-2005 à 10:01:12    

belay a écrit :

Bah en fait j'ai utilisé ce code html classique :D

Code :
  1. if($logout) 
  2. {
  3.     session_end($userdata['session_id'], $userdata['user_id']);
  4. die('<META HTTP-equiv="refresh" content=0;URL='. append_sid($redirect_logout) . '>');
  5. }
  6. elseif( $userdata['session_logged_in'] ) 
  7. {
  8. die('<META HTTP-equiv="refresh" content=0;URL='. $go_logout . '>');
  9. }
  10. else
  11. {
  12. die('<META HTTP-equiv="refresh" content=0;URL='. $go_login . '>');
  13. }



 
Est quand tu va cliquer sur précédent, hop, ça va revenir à la page. Bel exemple de cassage de bouton précédent [:itm]

Reply

Sujets relatifs:

Leave a Replay

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