Redirection en php

Signaler
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour,

Je suis en train de développer une fonction menu : Le langage de programmation utilisé est php.

function menu($num)
{
switch ($num)
{
case 1 :

echo"
<center><SCRIPT LANGUAGE="JavaScript" SRC="./menu/menuNiv1.js"></script></center>



\";
break;
case 2 :
echo\"
<table class=\\"menu\\" cellspacing=\\"0\\" cellpadding=\\"0\\">----
<center><SCRIPT LANGUAGE="JavaScript" SRC="./menu/menuNiv2.js"></script></center>



\";
break;
case 3 :
echo\"
<table class=\\"menu\\" cellspacing=\\"0\\" cellpadding=\\"0\\">----
<center><SCRIPT LANGUAGE="JavaScript" SRC="./menu/menuNiv3.js"></script></center>



\";
break;
case 4 :
echo\"
<table class=\\"menu\\" cellspacing=\\"0\\" cellpadding=\\"0\\">----
<center><SCRIPT LANGUAGE="JavaScript" SRC="./menu/menuNiv4.js"></script></center>



\";

break;
default :
echo\"
<table class=\\"menu\\" cellspacing=\\"0\\" cellpadding=\\"0\\">----
<center><SCRIPT LANGUAGE="JavaScript" SRC="./menu/menuNiv1.js"></script></center>



<table class="info" cellspacing="0" cellpadding="0" >";
break;
}


Et mon soucis est que je voudrais faire une redirection pour chaque cas selon le profil du menu.


J'ai essayé avec location...mais je n'obtiens rien, serait il judicieux à la place de faire une structure conditionnelle en if else ?


Merci d'avance

20 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

une redirection en php ,c'est :
header ('Location: mapage.php');
Mais ce ne peut se faire si des en-têtes ont déjà été envoyés. Bref, tu ne peux pas afficher de html avant ce header ().
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006

euh, j'ai pas très bien compris ton code et la ou tu veux en venir, mais si ça t'intéresse, moi j'utilise ceci pour rediriger:
echo '<META HTTP-EQUIV="Refresh" CONTENT="1; URL=tapage.php">';
dans cet exemple, tu sera redirigé vers tapage.php au bout d'une seconde (le nb de secondes est la valeur de content). Je préfère cette méthode à la méthode header('Location:tapage.php') car avec celle-ci il ne faut rien mettre comme balise html avant, sous peine d'une erreur que j'ai souvent rencontré avant de découvrir ce moyen de redirection... Mais je ne sais pas si c'est du "codage propre" aussi.
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

Salut !

Ok pour ta méthode, mais comment procédes tu pour qu'elle ne se rafraichisse pas toutes les secondes ?

Merci
Messages postés
214
Date d'inscription
lundi 20 mars 2006
Statut
Membre
Dernière intervention
23 juin 2006

tu veux dire si tu rediriges sur la meme page? la je ne sais pas, mais c'est clair que ça va te faire une boucle infinie dans ce cas la: tu rafraichis, t'attends une seconde, tu rafraichis à nouveau, tu attend, tu rafraichis... Si tu veux que cela ne rafraichisse qu'une seule fois, passe un nouveau paramètre, par exemple tu fait url=tapage.php?booleen=1 et ensuite tu fais :
if($_GET['booleen']!=1){
tu rafraichis
}
naturellement, avant il faut tester si $_GET['booleen '] existe.Dis moi si c'était bien cela ta question, ou si j'ai mal compris ce que tu voulais.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
C'est horrible, cette façon de faire.

header () reste la meilleure solution.
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

Tu le placerais ou exactement ton header () car il me semble que tu dois l'utiliser avant le html, moi mes pages sont toutes en php

switch ($num)
{
case 1 :

tu le placerais après le case 1 : avec un echo'

Merci d'avance.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Y a méprise sur php et html, là.
PHP génère du html...
un echo, ça génère du html, même si c'est une structure php.

Je ne sais pas où je le placerais parce que je ne comprends pas ce que tu veux faire exactement.

TU affiches un bout de tableau, puis tu rediriges ton utilisateur...? A quoi sert le bout de tableau, dans ce cas...?
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

je veux rediriger mes utilisateurs selon le profil qu'ils ont, voila pourquoi j'ai choisi une fonction comme ci dessous :

function menu($num)
{
switch ($num)
{
case 1 :

break;
case 2 :
break;
case 3 :
break;
case 4 :
break;
default :
echo"
break;
}
}
Je veux faire une redirection pour chaque cas ?
après case 1 : redirection....

Voila
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ben oui...
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

D'ou ma question, comment faut il que je mette header() , avec un echo sans echo....
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Faudrait voir à lire un peu les docs, quand même, avant de poser des questions sur un forum.


header


HTTP/1.1 Specification pour plus d'informations sur les en-têtes <VAR class= literal>Location:</VAR>, y compris le protocole, hôte et chemin absolu. Mais certains navigateurs acceptent les URI relatives. Vous pouvez généralement utiliser les variables globales <VAR class=varname>$_SERVER['HTTP_HOST']</VAR>, <VAR class=varname>$_SERVER['PHP_SELF']</VAR> et dirname() pour construire vous-même une URI absolue :
session.use_trans_sid est activé. Il doit être passé manuellement en utilisant la constante <TT class =constant>SID</TT>.


Les scripts PHP génèrent souvent du HTML dynamiquement, qui ne doit pas être mis en cache, ni par le client, ni par les proxy intermédiaires. On peut forcer la désactivation du cache de nombreux clients et proxy avec :
session_cache_limiter() et <VAR class= literal>session.cache_limiter</VAR> peuvent être utilisés pour générer les en-têtes de caches corrects, lorsque les sessions sont utilisées.


N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichges PHP. Une erreur très classique est de lire un fichier avec include() ou require(), et de laisser des espaces ou des lignes vides, qui génèreront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
ob_start() et ob_end_flush() dans vos scripts, ou en modifiant la directive de configuration <VAR class =literal>output_buffering</VAR> dans votre fichier <TT class=filename>php.ini</TT> ou vos fichiers de configuration du serveur.


Si vous voulez que vos utilisateur recoivent une alerte pour sauver les fichiers générés, comme si vous génériez un fichier PDF, vous pouvez utiliser l'en-tête Content-Disposition pour fournir un nom de fichier par défaut, à afficher dans le dialogue de sauvegarde.
safe mode est activé, l'UID du script est ajouté à la partie <VAR class=literal>realm</VAR> des en-têtes <VAR class=literal>WWW-Authenticate</VAR> que vous envoyez avec cet en-tête.


Voir aussi headers_sent(), setcookie() et la section sur l'identification HTTP.

http://fr2.php.net/manual/fr/function.header.php
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

tu peux le mettre partout en passant par des solutions un peu plus gourmandes telle que la bufferisation de sortie par exemple.

<?php
ob_start();

echo 'balbalbalbalablabal';

header('location:tapage.php');

ob_end_flush();
?>

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

Bonjour,

Est ce que la solution que tu me proposes peut entrer dans ma fonction ou pas ou faut que je fasse abstraction de ma fonction avec mon switch, case et break ?

Merci d'avance
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ton switch n'a aucune influence là-dessus.
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

J'ai fait un essai avec la bufférisation, et il ne me redirige toujours pas, il ne vas que sur la page d'acceuil et pas sur ma frame.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Sur ta frame...?
Tu n'avais pas parlé de frame jusqu'ici...


Et il faut m'expliquer ce que tu appelles une redirection vers une frame.
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

Ce que j'appelle redirection c'est que après après valider ton identité par ton login et ton mot de passe, cela te redirige vers une frame précise qui regroupe sommaire et acceuil ?

Voila
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Je pense que tu t'embarques dans un code pas possible, pour rediriger dans une autre frame faut du javascript à gogo... bref utiliser les frames pour faire un site est une mauvaise solution.

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
30
Date d'inscription
samedi 13 novembre 2004
Statut
Membre
Dernière intervention
5 juillet 2006

Si tu as une autre solution que les frames pour que le menu principal soit du côté gauche et la page auquel est relié le menu apparaissent à droite, je t'écoute, je suis toute ouie.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah tu utilises du XHTML et CSS, avec des includes en PHP pour ne pas fouttre tout le code de ton menu dans chaque fichier.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>