redirection header

Le
thiebaut olivier
Bonjour,

Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.
A chaque fois j'ai un already send, mais comme je tente d'utiliser un
modèle MVC avec contrôleur, il est fort probable "qu'il y ait un echo ou
print qui traine" bref une idée.

Olvier
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #72451

Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.


Sur le même site, la réponse est toujours la même : utiliser include()
ou require() plutôt que header("Location: ...").

A chaque fois j'ai un already send, mais comme je tente d'utiliser un
modèle MVC avec contrôleur, il est fort probable "qu'il y ait un echo ou
print qui traine" bref une idée.


Un modèle MVC avec contrôleur, je suppose que ce n'est pas réparti sur
trois ou quatre serveurs différents, dont la solution du require() est
la bonne.

Sinon, vérifie que tu ne sauves pas tes pages en UTF-8 avec un éditeur
de texte mou du bulbe qui te rajouterait au début un « BOM » Unicode
traduit en UTF-8.

thiebaut olivier
Le #72443
Bonjour,

et merci.
Je m'en doutais pour le include ou rewrite.
Pour ce qui est de header, je pense avoir trouvé.
Comme me petit accepte rien en sorti, j'ai vu que j'utilise une
primitice ini_set(...) qui renvoie un résultat. Je vais donc essayé de
récupérer la valeur de retour dans une variable, pour mapper la sortie.

Bref je teste + s'il y a un mou du bulbe ...;).

Olivier
Bruno Desthuilliers
Le #72445
Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.


Sur le même site, la réponse est toujours la même : utiliser include()
ou require() plutôt que header("Location: ...").


Ca ne fait pas du tout la même chose.


Bruno Desthuilliers
Le #72446
Bonjour,

Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(),


Non.

j'avoue je sèche.
A chaque fois j'ai un already send,


Tu a donc un début de sortie avant l'appel à header().

mais comme je tente d'utiliser un
modèle MVC avec contrôleur,


Avec vue et modèle aussi ?-)

il est fort probable "qu'il y ait un echo ou
print qui traine" bref une idée.


Ou juste n'importe quel caractère (même invisible - la suggestion
d'Olivier concernant un BOM n'est pas à négliger) en dehors d'une balise
<?php ?>.

Thierry
Le #72447
Bonjour,


bonjour


Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.
A chaque fois j'ai un already send, mais comme je tente d'utiliser un
modèle MVC avec contrôleur, il est fort probable "qu'il y ait un echo ou
print qui traine" bref une idée.

oui mais c'est mal aimé, pas du tout universel (javascript) et limite HC

ici.

//------------------------------------------------------------------------
...
?>
<script type='text/javascript'/>
window.location.href = 'http://www.yahoo.fr';
</script>
<?php
...
//------------------------------------------------------------------------

Si tu l'adoptes tu risques au moins d'avoir des surprises avec les fonctions
de navigation
des butineurs. Donc bien penser avant d'agir.

pas taper merci
c'est pour rendre service

thierry

Philippe Le Van
Le #72448
Bonjour

Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.


Si tu ne veux pas utiliser de header('Location... , tu peux utiliser du
javascript pour faire ta redirection (c'est plus crados, ça fait plus
d'échanges avec le serveur).

Tu peux utiliser un code du genre :

<SCRIPT LANGUAGE="Javascript">
function pageSuiv() {
location.href='http://mon_url';
}
setTimeout("pageSuiv()", 3);
</SCRIPT>


A chaque fois j'ai un already send, mais comme je tente d'utiliser un
modèle MVC avec contrôleur, il est fort probable "qu'il y ait un echo
ou print qui traine" bref une idée.


Sinon théoriquement dans un controlleur, tu n'affiches rien, il n'y a que
la vue qui peut afficher quelque chose.
Si tes echo ou printf sont juste pour du débug, utilise plutôt un logger,
ça règlera ton problème (ça mettra tes messages de debug dans un fichier
au lieu de les renvoyer au navigateur).

Cordialement,
Philippe Le Van
--
Communauté autour du Zend Framework : http://www.z-f.fr

Thief13
Le #72175
Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.


Sur le même site, la réponse est toujours la même : utiliser include()
ou require() plutôt que header("Location: ...").



Par rapport à ça j'ai essayé cette solution, mais je ne la trouve pas
satisfaisante : dans chacun de mes scripts, je défini une constante que
j'appelle DROITS et qui contiens les droits requis pour exécuter ce
script. Maintenant, imaginons que j'ai la page modifier.php qui ne
demande que des droit édition (valeur = 2), et que cette page à deux
boutons :
- un qui envois vers supprimer.php (droit nécessaire de suppression = 3)
- un autre qui envoi vers enregistrer.php (toujours droits d'édition = 2)
Jusque là, pas de problème, on passe d'une page à l'autre avec le lien
du form, mais une fois que le script de modification de la base de donné
(que se soit supprimer.php ou enregistrer.php) à fini de s'exécuter, je
veux revenir sur modifier.php, et là, si je fait un include, j'ai un
beau message d'erreur me disant que ma constante est déjà défini, donc,
il ne me reste plus que le header()...

Donc, si il y à une solution, autre qu'utiliser une variable à la place
de ma constante, je suis preneur...


John GALLET
Le #71891
Donc, si il y à une solution, autre qu'utiliser une variable à la place
de ma constante, je suis preneur...


Définir la constante dans une seule fonction/méthode, tout simplement. Ou
bestialement :

if(defined('MACONSTANTE')) return;
// [....]
define('MACONSTANTE','droits');

Je ne vois vraiment pas où est le problème.
a++;
JG

Thief13
Le #71883
Donc, si il y à une solution, autre qu'utiliser une variable à la place
de ma constante, je suis preneur...


Définir la constante dans une seule fonction/méthode, tout simplement. Ou
bestialement :

if(defined('MACONSTANTE')) return;
// [....]
define('MACONSTANTE','droits');

Je ne vois vraiment pas où est le problème.
a++;
JG


Le probleme, c'est que dans ce cas, je me retrouve avec les droits d'un
script sur un autre...

Chaque script à ses propres droits, et si j'inclu un script dans un
autre avec cette métode, ce ne seronts pas les bons droit qui
s'appliqueronts.

En plus, autre problème : dans chauqe script, je fait un
require('fonctions.php'), et si je fait l'include d'un script dans un
autre, paf, erreur puisque il me dit qu'il ne peut pas redéclarer des
fonctions déjà déclaré...


Bruno Desthuilliers
Le #71884
Quelqu'un connait-il un moyen simple pour la redirection de page sans
utiliser la fonction header(), j'avoue je sèche.
Sur le même site, la réponse est toujours la même : utiliser include()

ou require() plutôt que header("Location: ...").



Par rapport à ça j'ai essayé cette solution, mais je ne la trouve pas
satisfaisante : dans chacun de mes scripts, je défini une constante que
j'appelle DROITS et qui contiens les droits requis pour exécuter ce
script. Maintenant, imaginons que j'ai la page modifier.php qui ne
demande que des droit édition (valeur = 2), et que cette page à deux
boutons :
- un qui envois vers supprimer.php (droit nécessaire de suppression = 3)
- un autre qui envoi vers enregistrer.php (toujours droits d'édition = 2)
Jusque là, pas de problème, on passe d'une page à l'autre avec le lien
du form, mais une fois que le script de modification de la base de donné
(que se soit supprimer.php ou enregistrer.php) à fini de s'exécuter, je
veux revenir sur modifier.php, et là, si je fait un include, j'ai un
beau message d'erreur me disant que ma constante est déjà défini, donc,
il ne me reste plus que le header()...


C'est AMHA une mauvaise raison pour faire ce qui devrait être fait de
toutes façons. La bonne raison étant que c'est encore ce qui respecte le
mieux la norme HTTP. Et accessoirement, ça évite le problème de la
re-soumission de formulaire par retour à la page précédente...



Publicité
Poster une réponse
Anonyme