Je perd ma variable URL lors d'un submit()

Résolu
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007 - 20 nov. 2007 à 15:52
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007 - 22 nov. 2007 à 02:29
Bonjour,
j'aimerais avoir de l'aide PHP à propos du site que je suis en train de construire multilingues, multidevises.

Par défaut mon site est en français avec la devise $CAN. Mon problème est lorsque je clique sur Anglais et que je change ma devise. Mon site redevient en français. et vice versa c'est-à-dire lorsque je sélectionne un autre devise et que je clique sur Anglais ma devise revient à $CAN.

Voici comment je procède (le site pour que vous puissez voir est le suviant :  www.gimypro.com/maximeplante ) :

Pour changer ma langue :
Dans ma page html:
                        <td>Français</td>
                        <td>Anglais</td>
   
Et lors du chargement de ma page :

if(!isset($_GET['lang']))
{$_SESSION['lang'] = 'fr.php';}
else
{
     if ($_GET['lang'] != '')
    {$_SESSION['lang'] = ($_GET['lang'].'.php');}
}
include $_SESSION['lang'];

Maintenant pour changer ma devise :
Dans ma page html:

<form action ="index.php" method= "POST" >
<select name="currency" class="texteZoneD" style="width: 100px;" onchange="submit()">
<option value="CAD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='CAD'){echo 'selected';}} ?>> $ Canadien</option>
<option value="USD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='USD'){echo 'selected';}} ?>> $ Americain</option>
<option value="EUR" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='EUR'){echo 'selected';}} ?>> Euro</option>
</select>
</form>

lors du chargement de ma page :

if ( isset($_POST['currency']) AND !empty($_POST['currency']) )
{$_SESSION['curr'] = $_POST['currency'];}
else
{ $_SESSION['curr'] = 'CAD';}

et la conversion des prix :

   <?php
        $x = new CurrencyConverter('localhost','user','pass','convertisseurDeDevises','devises');
    echo $x->convert(2.50,'CAD',$_SESSION['curr']);      
    echo $_SESSION['curr'];
   ?>

Qu'est-ce qui ne marche pas? Je sais que lors du changement de devise je perd ma variable lang dans mon url, comment le garder? ou comment procéder?

Merci pour votre aide

Jimmy Plante

13 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 nov. 2007 à 16:42
Ok...

if (isset($_GET['lang']))
{
if ($_GET['lang'] != '')

Tu peux alléger en mettant ça :
if (isset($_GET['lang']) && !empty($_GET['lang']))
{

C'est aussi performant et plus clair. Le deuxième test (!empty() ) n'est effectué que si le premier est vrai. Ca fait un bloc en moins... (c'est juste du pinaillage, mais bon)

Bon... Y'a un truc que je comprends pas dans tes tests. J'ai l'impression que tu fais pas tout dans le bon ordre.
Si je comprends bien, la présence dans l'url de lang permet de forcer à changer.
Donc il faut commencer par là. Pas avec le test sur la variable de session.

Tu peux essayer ça ?

$default_lang = 'fr';
// Langue spécifiée dans l'url
if (isset($_GET['lang']) && !empty($_GET['lang'])) {
// Il serait de bon ton, quand même, de vérifier que la langue est autorisée : fr ou en, pas autre chose... Sinon, on met la langue par défaut de force.
$_SESSION['lang'] = $_GET['lang'] . '.php';
}
// Pas de langue dans l'url
else {
// La variable de session n'existe pas ou est vide. On force à la valeur par défaut
if (!isset($_SESSION['lang']) || empty($_SESSION['lang'])) {
$_SESSION['lang'] = $default_lang . '.php';
}
}
// Ici, la variable de session est forcément définie et pleine.
include($_SESSION['lang']);

Je garantie pas que c'est correct, mais c'est déjà une piste.
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 nov. 2007 à 16:06
Salut,

Si tu stockes la langue dans une variable de session et qu'au chargement de la page tu ne vérifies que dans la variable GET, forcément, ça peut pas marcher...
Il faudrait AUSSI vérifier si la langue est dans $_SESSION (puisque tu l'y mets), avant de forcer la langue en français ;)
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 16:12
À vrai dire au tout début mon code était :

if (!isset($_SESSION['lang']))
{
    $_SESSION['lang'] = 'fr.php';           
}
else
{   
    echo 'est defini';
    if (isset($_GET['lang']))
    {
        if ($_GET['lang'] != '')
        {
            $_SESSION['lang'] = ($_GET['lang'].'.php');
        }
    }
    else if(empty($_SESSION['lang']))
    {
        $_SESSION['lang'] = 'fr.php';   
    }
}

include $_SESSION['lang'];

mais ca ne marche pas plus, on dirait que mon include ne se fais pas car je fais afficher ma variable SESSION et c'est la bonne dont en.php....

Est-ce que tu saurais pourquoi le include ne se ferais pas comme il le faut ?

Merci

Jimmy P
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 16:15
Si tu vas sur www.gimypro.com/maximeplante

tu va voir au tout début en haut a gauche fr.php -> ce qui est correct
par la suite si tu clique sur anglais tu vera en.php -> ce qui est correct
Si tu change la devise, tu va voir encore en.php -> ce qui est correct car c ma variable session mais mon site redevient en francais ?

merci
jimmy p
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 17:03
Merci pour ton code, c'est vrai qu'il est plus clair et plus logique... cependant le tout ne marche pas encore.
Je t'ai mis à jour sur le site le code que tu ma proposé et des traces en haut de la page les commentaires en echo, tu pourra peut-être mieux voir comment réagis le site....

c'est bizarre la variable session est correctement rempli mais mon site n'inclut comme pas le bon fichier fr.php ou en.php

encore une fois
merci pour ton aide

Jimmy P.
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 17:05
www.gimypro.com/maximeplante
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 nov. 2007 à 17:37
Tu peux remettre ici le code exact tel qu'il est actuellement sur ton site ?
Avec les echo et tout. Enfin juste la partie qui teste la langue, hein...
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 21:48
Dsl, je suis à l'école présentement je le ferai demain matin (Heure du québec)

merci
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
20 nov. 2007 à 22:13
En fin de compte j'ai réussi à avoir accès à mon ftp voici le code complet de ma page.... pt que ca va mal se lire, si tu veux le .php voici mon msn jimmyplante@gmail.com...

merci encore

<?
session_start();


//Includes
include('CurrencyConverter.php');


 


$default_lang = 'fr';
// Langue spécifiée dans l'url
if (isset($_GET['lang']) && !empty($_GET['lang'])) {
        echo ' ** Langue spécifiée dans lurl **  ';
  // Il serait de bon ton, quand même, de vérifier que la langue est autorisée : fr ou en, pas autre chose... Sinon, on met la langue par défaut de force.
  $_SESSION['lang'] = $_GET['lang'] . '.php';
}
// Pas de langue dans l'url
else {
  echo ' ** pas de langue dans lurl ** ';
  // La variable de session n'existe pas ou est vide. On force à la valeur par défaut
  if (!isset($_SESSION['lang']) || empty($_SESSION['lang'])) {
  echo 'variable session existe pas ou est vide, on force a la valeur par defaut   ';
    $_SESSION['lang'] = $default_lang . '.php';
  }
}
// Ici, la variable de session est forcément définie et pleine.
echo ' ** Contenu de la variable SESSION : ';
echo $_SESSION['lang'];
echo ' **  ';
echo ' ** Ici, la variable de session est forcément définie et pleine ** ';
include($_SESSION['lang']);


/*if (!isset($_SESSION['lang']))
{
        $_SESSION['lang'] = 'fr.php';                  
}
else
{      
        echo 'est defini';
        if (isset($_GET['lang']))
        {
                if ($_GET['lang'] != '')
                {
                        $_SESSION['lang'] = ($_GET['lang'].'.php');
                }
        }
        else if(empty($_SESSION['lang']))
        {
                $_SESSION['lang'] = 'fr.php';  
        }
}


include $_SESSION['lang']; */


 


 


if ( isset($_POST['currency']) AND !empty($_POST['currency']) )
{
        $_SESSION['curr'] = $_POST['currency'];
}
else
{                      
        $_SESSION['curr'] = 'CAD';
}




?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">


<head>
<title><?php echo $l['titleModele']; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<style type="text/css">td img {display: block;}</style>


<!-- Include CSS -->
<link rel="stylesheet" href="css/styles.css" type="text/css" />
<link rel="stylesheet" href="css/menu.css" type="text/css" />
 
<!-- Javascript -->
<script src="js/menu.js" type="text/javascript"></script> 
<script language="JavaScript" type="text/JavaScript">
<!--


//-->
</script>
</head>



<center> 
  <!-- Header -->
  ----

          
  ,
 
  <!-- Fin Header -->

  <!-- MENU -->
  <?php include 'menu.php'; ?>
  <!-- FIN MENU -->
                                       
  <!--Espace -->
  ----

   ,
 
  <!-- Fin espace -->                                                                                                                                          
 
  <!-- Zone Dynamique: Language, Devise, Panier, Compte -->
        ----

         ,
                         <table>
                   ----

                                <!-- Devises -->
                               ,
                                       

                                        <table border=0 summary=\"\">
                                        ----

                                                <?php echo $ZoneD['devise']; ?>,
                                                                                   
                                                <form action="index.php" method="POST" >
                                                <select name="currency" class="texteZoneD" style="width: 100px;" onchange="submit()">
                                                        <option value="CAD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='CAD'){echo 'selected';}} ?>> $ Canadien</option>
                                                        <option value="USD" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='USD'){echo 'selected';}} ?>> $ Americain</option>
                                                        <option value="EUR" <?php if ( isset($_POST['currency']) AND !empty($_POST['currency']) ){if(($_POST['currency'])=='EUR'){echo 'selected';}} ?>> Euro</option>
                                                </select>
                                                </form>,
                                       
                               

                               

                                </td>
                               
                                <!-- Barre séparatrice -->
                                <td width="16" height="40" align="left" valign="top">
                               
 
                                <center> | </center> 
                               

                                </td>
                               
                                <!-- Language -->
                                <td width ="180" height= "40" align="left" valign="top" >
                                       
      
                                                                                  ----

                                                <?php echo $ZoneD['langue']; ?>,
                                               
                                                Français,
                                                / ,
                                                Anglais,
                                         
                                       
       
                                       

                                </td>
                               
                                <!-- Barre séparatrice -->
                                <td width="16" height="40" align="left" valign="top">
                               
      
                                <center> | </center> 
                               

                                </td>
                                       
                                <!-- Panier -->
                                <td width ="270" height= "40" align="left" valign="top">
                               
      
                                                                        ----

                                                ,
                                               
                                               , </td>
                                       
                                        ----

                                                <?php echo $ZoneD['panierContient']; ?>,
                                                0 items,
                                       
                               

                               

                                </td>
                               
                                <!-- Barre séparatrice -->
                                <td width="16" height="40" align="left" valign="top">
                               
      
                                <center> | </center> 
                               

                                </td>
                               
                                <!-- Connexion -->
                                <td width ="140" height="40" align="left" valign="top">
                               
       
                                                                        ----

                                                <?php echo $ZoneD['connexion']; ?>,
                                       
                                        ----

                                                <?php echo $ZoneD['ouvrirCompte']; ?>,
                                       
                               

                               

                                </td>
                               
                   </tr>
                   </table>
         </td>
         <td bgcolor="#FEFADA" width="10"></td>
        </tr>  
  <!-- Fin zone dynamique -->                                                                                   
 
  <!-- Corps du site -->
  <tr>
   <td colspan="3" bgcolor="#FEFADA">

  
    
   <?php
         $x = new CurrencyConverter('localhost','jimmp','jimmp','convertisseurDeDevises','devises');
        echo $x->convert(2.50,'CAD',$_SESSION['curr']);  
        echo $_SESSION['curr'];
   ?>
  

  

   </td>
  </tr>
  <!-- Fin du corps -->
  
  <!-- Pied de page -->
  <?php include 'footer.php'; ?>
  <!-- Fin pied de page -->


</table></center>

</html>
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 nov. 2007 à 22:43
Encore une question...

Je vois dans ton code que le titre de la page html est défini comme ça :

<title><?php echo $l['titleModele']; ?></title>

Faut-il en déduire que les variables de langue sont définies dans l'array $l ?
Autrement dit, si je comprends bien, le fichier en.php contient :
$l['titleModele'] = 'ModeleEN';

et fr.php contient :
$l['titleModele'] = 'ModeleFR';

???

J'ai bon ?

Parce que si c'est bien le cas, pourquoi est-ce que le titre de la page anglaise est bien en anglais, tout le temps ?
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
20 nov. 2007 à 22:46
Etrangement, si je prends ton script tel quel en ne supprimant que les lignes qui incluent des fichiers que je n'ai pas, il fonctionne...

J'ai mis un fichier fr.php et un en.php avec la définition de $l['titleModele'] et le bon fichier est inclus, et le titre est bien en anglais quand il faut, et en français quand il faut.

Ce qui m'étonne, c'est que sur ton site, il n'est en anglais que quand la langue est passée dans l'url... Ca montre bien que le fichier contient les bonnes définitions, qu'il existe, qu'il est trouvé par le script et correctement inclus quand il le veut bien...

C'est à n'y rien comprendre...
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
21 nov. 2007 à 04:44
Oui effectivement la variable 'titleModele' est definit dans l'array $l.... les autres comme le menu sont dans l'array $menu,  $footer, etc...
Tu me fais remarquer une chose importante qui va m'aider à débugguer demain, la variable titleModele agit correctement, ce qui est bizarre comme tu as dit...
demain j'essayerai des mettre les variables du menu dans l'array $l voir s'il y a changement...

AaaaaaaaaaaaAAAhhH je crois que je vien d'allumer, imbécile que je suis, en t'écrivant !!!!!!!!!!!!!!!!!!

MON CODE PHP au début de ma page index.php n'est pas répété dans menu.php et footer.php !!!!!! je suis sure que c'est ça !!!!

entk merci de cette remarque qui m'a allumer....

je te redis demain si <ca marche !!!

Jimmy p.
0
jimmplan Messages postés 9 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
22 nov. 2007 à 02:29
Effectivement c'étais mon erreur... j'ai modifier ma fonction pour le multi-devise qui avait le meme type d'erreur ! Merci encore !!

Jimmy P.
0
Rejoignez-nous