Problème de redirection avec site multilingue [Résolu]

Signaler
Messages postés
51
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
13 août 2008
-
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008
-
Salut, j'ai des soucis avec la mise à jour de mon site. Je tiens en effet à le passer en multilingue (français, anglais pour commencer) mais j'ai un petit souci.

Pour commencer, voilà une petite description de mon site. Mes pages comportent 4 includes ("entete", "menu", "corps" et "basdepage") et lors de la navigation, seul l'include "corps" change d'une page à l'autre. Dans l'include "entete", j'ai deux drapeaux permettant de choisir la langue que vous voulez. La traduction des pages se passent très bien sur le fonds. C'est sur la forme que ça marche pas. En effet si on change la langue sur une autre page que la page d'accueil, la regénération des pages me redirige forcément vers la page d'accueil (href= "index.php" ou lieu de href="index.php?page='pagecourante'&...") . C'est pas un souci dans le sens où on choisit souvent la langue en entrant dans le site mais si c'était possible de corriger cela.

Je tiens à préciser (vu que c'est une histoire de lien que pour passer d'une page à l'autre que j'utilise des liens du style : href="index.php?page='acceuil'&...'"

Je fournis une partie du code pour être (peut-être ?) plus clair...

<hr size="2" width="100%" />
index.php

<hr size="2" width="100%" />
   
    <?php
    include("langues\select_langue.php");
    ?>
    

    

    <?php
    include('entete.php');
    ?>
    

    ...
    

    <?php
    include('menu.php');
    ?>
    

    

    <?php
    if (isset ($_GET['page']))
    {
    include($_GET['page'] . '.php')
    }
    else
    {
    include('accueil.php');
    }
    ?>
    

    ...
    

    

    

    

<hr size="2" width="100%" />
entete.php

<hr size="2" width="100%" />

    ...
    

    

    [langues\choix_langue.php?langue=fr ]
    <?php
    echo $ENTETETITRE;
    ?>
    [langues\choix_langue.php?langue=en ]
    

    

    <?php
    echo '
[index.php?page=accueil ' . $ENTETEACCUEIL . ']
';
    ...
    ?>
    


<hr size="2" width="100%" />
langues\choix_langue.php ( Je pense que l'erreur vient de là quelque part )

<hr size ="2" width= "100%" />
    <?php
    if(!$_GET["langue"])
    {
    echo "Erreur, aucune langue n'a été choisie...";
    }
    else
    {
    SetCookie("languesite",$_GET["langue"]);
    Header( "Location: index.php" ); //C'est pas ici que ça plante ?
    }
    ?>

<hr size ="2" width="100%" />
langues\select_langue.php

<hr size="2" width="100%" />
    <?php
    if (!$HTTP_COOKIE_VARS["languesite"])
    {
    include("langue_fr.php");
    }
    else
    {
    $lang = $HTTP_COOKIE_VARS["languesite"];
    include("langue_" . $lang . ".php");
    }
    ?>

<hr size="2" width="100%" />
langues\langue_fr.php

<hr size="2" width="100%" />
    <?php
    $MENUTITRE='Mes créations :.';
    $MENUDIAPORAMA='.: Diaporama';
    ...
    ?>

6 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Mais sinon effectivement le pb vient du header, tu devrais essayer de le faire pointer vers la page précédente, pas l'index ($HTTP_REFERER) mais bon c'est moins joli comme solution
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Tu inclus des fichiers qui passe dans l'url :
Par exemple si l'adresse est : "http://tonsite.fr/index.php?page= forum" va afficher ton fichier " forum.php ".

Mais le problème c'est que tu ne vérifies pas si le fichier vient de ton site (ou même si le visiteur à acces à ce fichier)
Par exemple :
-> "http://tonsite.fr/index.php?page =http://autresite.fr/index" va afficher le fichier "index.php" du site "http://autre.fr"

Pour corriger cette faille au lieu de :
"if (isset($_GET['page'])) include($_GET['page'].'php');"

utilise plutot ceci :
"if (isset($_GET['page'])) switch($_GET['page']) {
/* Si la variable $_GET['page'] est égale à "page1" avec on inclus "page1.php" et ainsi de suite */
case 'page1': require_once('page1.php'); break;
case 'page2': require_once('page2.php'); break;
/* Si la variable n'est pas égale à ce que  tu veux inclure, tu inclus un page d'erreur (ou une page pour bannir le visiteur) */
default: require_once('erreur.php'); break;
}"
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut,
au lieu de faire un lien vers une autre page pour changer de langue, tu devrais faire une XMLHttpRequest qui modifie la variable de session/cookie et qui ensuite recharge la page.
à+
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Dans le lien de changement de langue, tu transmet la page en cours et ses paramètres ( index.php?var=valeur&variable2=valeur2, tu récupères var=valeur&variable2=valeur2 avec $_SERVER['QUERY_STRING'] ) et ensuite tu rediriges selon ce qui a été passé...

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
"if (isset ($_GET['page'])) include($_GET['page'] . '.php')" fait attention à la faille "include" ...
Messages postés
51
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
13 août 2008

Excusez-moi, mais il n'y aurait pas moyen d'être un petit peu plus clair quand au réponse ? Je m'embrouille un peu à vrai dire... Et je ne suis que novice pour le moment en php.

Merci d'avance