Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

redirection header

20 réponses
Avatar
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

10 réponses

1 2
Avatar
Olivier Miakinen

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.

Avatar
Philippe Le Van
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

Avatar
thiebaut olivier
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
Avatar
Bruno Desthuilliers
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.


Avatar
Bruno Desthuilliers
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 ?>.

Avatar
Thierry
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>
<a href='http://www.yahoo.fr'>redirigez</a> vous!
<?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

Avatar
Thief13
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...


Avatar
John GALLET
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

Avatar
Thief13
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é...


Avatar
Bruno Desthuilliers
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...



1 2