Page 1 sur 1
cmt faire une redirection automatique en php (autre qu'heade
Publié : 13 janv. 2005, 10:58
par GregK84
salut,
j'ai un problème sur mon site,
pour le moment, je le developpe en local et tout fonctionne a merveille.
par contre ce n'est plus la meme chose quand il est en ligne
je m'explique :
je developpe mon site sur base de la methode
fusebox, cette methode me permet de realiser mon site sous forme de module reutilisable par a suite (c'est tres interessant, cela evite une longue et penible reprogrammation, vive la reutilisation du code

)
Etant donné qu'il s'agit de mon premier site fusebox, il s'agit plutot d'une expermentation.
Quoi qu'il en soit, j'utilise actuellement des redirections sur certaine page, du style :
j'ai bien entendu essaye avec l'url relative et l'url absolue
mais ces redirections ne fonctionne pas en ligne!
y a t'il moyen de realiser une redirection autrement que par hearder ?? (et en php biensur)
merci
Publié : 13 janv. 2005, 12:54
par martin
Il faut spécifier une URI absolu :
Code : Tout sélectionner
header("Location: http://www.tonsite.com/dossiermachin/index.php?fuseaction=accueil.home");
Garde l'espace entre "Location:" et l'uri, je crois que çà a son importance.
Et fait bien attention de ne pas envoyer au navigateur la moindre chose avant les headers, même un espace ou un saut à la ligne. Plus explicitement un espace ou un saut de ligne avant :
Code : Tout sélectionner
<?php
header("Location: http://www.tonsite.com/dossiermachin/index.php?fuseaction=accueil.home");
?>
et çà ne marchera pas !
Tu peux aussi rajouter un exit(); aprés le header (mais je pense que ce n'est pas grave)
La seule autre possibilité à mon avis, c'est de générer un entête dans le head du html :
Code : Tout sélectionner
echo '<meta http-equiv="refresh" content="5; URL=http://www.tonsite.com/dossiermachin/index.php?fuseaction=accueil.home">';
Ce coup ci l'uri absolue est facultative, elle peut être relative.
Publié : 13 janv. 2005, 19:13
par GregK84
merci,
j'avais deja essaye les 2 premieres, me reste plus que la 3eme, mais je doute qu'elle va fonctionner car au moment de ma redirection, je ss dans un pur fichier de validation php ... d'ou pas d'entete dans le head.
mais un grand merci à toi
Publié : 13 janv. 2005, 20:03
par martin
J'ai édité mon post précédent, il y avait un copié-collé foireux.
Ma main au feu que tu envoies quelque chose au navigateur avant le header...
J'insiste, fait la chasse aux espaces et retours chariot, y compris dans les éventuels include qui précède.
Publié : 14 janv. 2005, 16:21
par GregK84
voici un exemple du code que j'utilise
Code : Tout sélectionner
<?php
/*
--------------------------------------------------------------------------------
name : validation_form.php
description : formulaire 1
author : gregk84
creation date : lundi 10 janvier 2004
Version : 1
--------------------------------------------------------------------------------
*/
switch($Fusebox["fuseaction"]) {
# Affichage du formulaire
case "form":
include("preparation_form.php");
include("form.php");
break;
# Validation du formulaire
case "validation_form":
include('fonction_validation_form.php');
include("validation_form.php");
if(isset($error)) {
include('preparation_form.php');
include('form.php');
} else {
header("Location:index.php?fuseaction=accueil.home");
}
break;
}
?>
et comme je te l'ai dis ci dessus, j'ai aussi essaye :
Code : Tout sélectionner
header("Location:http://membres.lycos.fr/kgdevelopment/index.php?fuseaction=accueil.home");
ou bien :
Code : Tout sélectionner
<?php
$relative_url = "index.php";
header("Location: http://" . $_SERVER['HTTP_HOST']. dirname($_SERVER['PHP_SELF']). "/" . $relative_url);
?>
voila
Publié : 14 janv. 2005, 17:15
par SB
L'erreur ne serait-elle pas que comme
Code : Tout sélectionner
# Affichage du formulaire
case "form":
include("preparation_form.php");
include("form.php");
break;
est avant
les "include" comptent comme une page affichée et donc le header n'est plus possible ?
Publié : 14 janv. 2005, 19:47
par GregK84
si jamais c'est effectivement l'erreur, cela va etre tres dur pour la contourner sourtout que j'utilise des header apres chaque fase de validation (et comme il y en a un certains paquets ...
ce que je ne comprend pas, c'est la raison pour laquel ca tourne en local et non en ligne. si l'erreur vient des includes qui se trouve avant mon header, cela ne devrait pas fonctionner en local !
je me trompe ?
la seule solution que j'ai trouvé pour le moment est de realiser a la place de mon header un include du style :
cette solution fonctionne, mais quand j'efface une varible de session et que juste apres je fais un include au lieu d'un header (j'arrive bien sur la page de mon choix, c deja ca) par contre tant que la page n'est pas actualisée, tout ce qui etait affiché grace a ma variable de session l'est toujours (ce qui pose un léger probleme)
ex: je me deconnecte, la page d'accueil se reaffiche, mais je vois encore tous mes paramettres. c po tres interessant ...
Publié : 14 janv. 2005, 20:39
par martin
je constate dans ton exemple qu'il y a un retour chariot envoyé au navigateur avant le header, juste avant <?php .
Je vois aussi qu'il n'y pas d'espace dans entre "location:" et l'URI ("http://"). Je suis moins sûr que celà pose un problème, mais c'est possible.
ce que je ne comprend pas, c'est la raison pour laquel ca tourne en local et non en ligne.
Personnellement il m'ait déjà arriver qu'un espace ou retour chariot affiché avant le header passe en essayant localement (windows et apache), et que les mêmes lignes ne passe pas sur le vrai serveur (linux et apache). Donc peut être que je me trompe, mais ...
De même, il te faut vérifier si les includes ('preparation_form.php' et 'form.php') ne font pas la même chose.
signé "le gars qui insiste".
Publié : 17 janv. 2005, 09:21
par GregK84
je v verifier ca maintenent avec un code simplifié.
on verra si ca marche ou pas.