PHP - switch avec redirection

crisom Messages postés 8 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010 - 12 avril 2010 à 16:38
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 - 13 avril 2010 à 14:11
bonjour,
problème classique dont je n'ai pas trouvé la bonne reponse
j'ai dans la page 1 ( avec un include ('haut.php'); pour avoir un head commun à differentes pages (meta et CSS)
switch($ch){
case "1";header('location:page2.php');break;
case"2" ; header('location:page3.php');break;
....
les pages 3 et 2 contiennent le meme include pour avoir le meme head
Avec un nouvel hebergeur (claranet), qui ne gere pas le "output_buffering" du PHP ,je recois le message
"Cannot modify header information - headers already sent by (.. page1...page2 ...)"

avez vous une solution pour faire des redirections dans une page vers des pages différentes
merci
PS - éviter de m'injurier pour une question peut être simpliste
A voir également:

3 réponses

roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 1
13 avril 2010 à 08:41
Salut,

T'injuriez ! Quelle drôle d'idée, faudra que je le note sinon, je vais oublier.

Nous sommes tous passé par des problèmes classiques pour certains et compliqués pour d'autre. Ce qui est chiant, ce sont les personnes qui ne cherches pas l'information. exemple ici.

Ton problème est simple en théorie mais super chiant.

La première étape est de trouver ce qui génère l'erreur à savoir la déclaration de code html...

Un espace, un "echo" peuvent parfois poser problème...

Si cela ne saute pas aux yeux de suite, débugge ton code en partant de la première ligne jusqu'au la dernière en commentant d'abord l'ensemble des lignes de codes et ensuite de moins en moins de lignes...

Tu vas alors savoir précisément à partir de quelle série d'instruction cela pose problème et cela te permettra d'identifier la source.

Un fois que tu connais ce qui génère l'erreur (la ligne de code xxx, la fonction, ...) poste celle-ci sur le forum...

Attention... dans le cas d'un "Cannot modify header information", surtout dans le cas d'un "Cannot modify header information", ce n'est pas forcement la ligne indiquée qui pose problème mais une autre situé plus haut dans l'ordre d'exécution du script...

Une erreur générée plus haut par exemple est considéré comme une "sortie"... un affichage si tu veux et de ce fait, foire le reste.

exemple:

ligne 1 : parse error affiché à l'écran.
ligne 2 : écriture d'un cookie.

Il est clair que la première ligne génére une erreur qui sera affichée à l'écran, la seconde ligne aura pour erreur un "Cannot modify header information - bla bla bla bla, c'est la merde, je veux rien savoir".

La structure même de ton "switch" m'inquiète car elle présente des erreurs...

switch($ch){

     case "1" ; header('location:page2.php') ;break;

     case "2" ; header('location:page3.php') ;break; 
}


1: Je suis certain que c'est case "1" : et non ; voir la doc ici.

2: Selon ton code est-ce bien un string que tu attends pour case "1" et case "2" car entre guillemets, c'est une chaine de caractère... (si $ch est bien une chaine et non un entier alors y a pas de soucis).

3: Toute instruction "header" visant à rediriger doit se terminer par un exit(); sinon, il me semble que le serveur continue l'exécution du code mais redirige quand même.

4: Indente ton code, ça ne consomme pas plus de ressource et c'est plus lisible.

Essaye ceci :

switch($ch){

    case "1" : 

             header('Location :page2.php');
             exit();

         break;
    
    case "2" : 

             header('Location :page3.php');
             exit();

         break;

    default:

             echo 'Valeur inconnue';
}


Pour ce qui est des redirections... j'utilise personnellement la fonction suivante :


function go2Url($url){

/* 
Redirige vers la page 'x' et privilégie la redirection
via la commande header si ceux-ci n'ont pas déjà été envoyés.
Sinon utilise une balise 'meta' afin de rediriger vers la page.
*/

$url =  trim($url);

if(headers_sent() == false){

header('Location: '.$url); // Redirection vers l'url donnée.

                // Interruption du script.

exit(); 
}

// Redirection vers l'url donnée et interruption du script.

exit('<html><head><meta http-equiv="refresh" content="0;URL='.$url.'" /></head>  </html>'); 
}

go2Url('http://www.monsite.com');

go2Url('page error');



if(headers_sent() == false)... me permet de savoir si les headers ont déjà été envoyés et n'exécute pas le code si c'est le cas.

J'espère avoir su t'aider...

Bien à toi.
0
crisom Messages postés 8 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 13 avril 2010
13 avril 2010 à 13:42
bonjour , et merci
la fonction go2Url fonctionne parfaitement
0
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 1
13 avril 2010 à 14:11
Bon hé bien j'en suis heureux lol...

N'oublie pas d'indiquer que la réponse est accèptée... pour "clore" le sujet.

bat.
0
Rejoignez-nous