cmt faire une redirection automatique en php (autre qu'heade

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

cmt faire une redirection automatique en php (autre qu'heade

Message 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 :cry:

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

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 :

Code : Tout sélectionner

header("Location:index.php?fuseaction=accueil.home");
j'ai bien entendu essaye avec l'url relative et l'url absolue

mais ces redirections ne fonctionne pas en ligne! :cry:
y a t'il moyen de realiser une redirection autrement que par hearder ?? (et en php biensur)

merci
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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.
Dernière modification par martin le 13 janv. 2005, 19:59, modifié 1 fois.
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message 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
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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.
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message 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
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Message 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

Code : Tout sélectionner

# Validation du formulaire 
les "include" comptent comme une page affichée et donc le header n'est plus possible ?
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

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

Code : Tout sélectionner

include('../mon_module/mapage.php');
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 ...
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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".
GregK84
Lézard à collerette
Messages : 360
Inscription : 15 oct. 2004, 15:24

Message par GregK84 »

je v verifier ca maintenent avec un code simplifié.

on verra si ca marche ou pas.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités