PHP <Select name="lang">... Need Help !

Résolu
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   -  
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis débutant en PHP (encore un) ;) et je dois dire que ça m'éclate (la tête contre le mur ~_~° ) !

Je souhaite faire un site multilingue avec une méthode de select.

Index.php


<form method="post" action="index.php"> 
     <select name="lang"> 
      <option value="es">Español 
      </option> 
      <option value="fr">Français 
      </option> 
      <option value="en"                           selected="selected">English 
      </option> 
      <option value="d">Wörterbuch 
      </option> 
     </select> 
     <input type="Submit" value"OK"/> 
    </form> 

<?php  
       
       
       if ($_POST['lang']=="es") 
       { 
       include 'es-lang.php'; 
       } 
        
       if ($_POST['lang']=="en") 
       { 
       include 'en-lang.php'; 
       } 
       
       if ($_POST['lang']=="d") 
       { 
        include 'd-lang.php'; 
       } 
       
       if ($_POST['lang']=="fr") 
       { 
        include 'fr-lang.php'; 
       } 
        

    ?> 



Et la partie gestion de la langue :


en-lang.php

<?php 

define( "hello" ,"Hello World !"); 
echo hello; 

?> 



Le problème dans toute cette histoire.... C'est qu'il y en a un XD (soyez indulgent avec mes blagues à deux balles je craque ^_^° )

Je n'arrive pas à récupérer la valeur (qui me tient à coeur) lang pour faire les tests et gérer la langue en fonction du choix de l'utilisateur.

erreur :

Notice: Undefined index: lang

Si quelqu'un veut bien daigner partager son expérience/savoir pour me tirer de ce pétrin ce serait gentil.


A voir également:

3 réponses

darkygame Messages postés 352 Date d'inscription   Statut Contributeur Dernière intervention   149
 
Bonjour,

J'ai testé, ça fonctionne. Mon "echo" affiche la valeur.

Pourant je n'ai quasiment rien modifié.

<form method="post" action="index.php"> 
  <select name="lang"> 
    <option value="es">Español 
    </option> 
    <option value="fr">Français 
    </option> 
    <option selected value="en">English 
    </option> 
    <option value="de">Wörterbuch 
    </option> 
  </select> 
 <input type="Submit" value"OK"/> 
</form> 

<?php 


       if ($_POST['lang']=="es") 
       { 
       include 'es-lang.php'; 
       } 

       if ($_POST['lang']=="en") 
       { 
       include 'en-lang.php'; 
       } 

       if ($_POST['lang']=="d") 
       { 
        include 'd-lang.php'; 
       } 

       if ($_POST['lang']=="fr") 
       { 
        include 'fr-lang.php'; 
       } 

echo $_POST['lang']; 

?> 


essai à nouveau !
DarkyGammmme
???? Mettez-le sous corticoïdes et faîtes-lui une biopsie cérébrale. ????
Dr.House
1
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   82
 
Effectivement XD ça marche ;) dsl du dérangement XD
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Le problème, c'est que tu places ton formulaire et l'action à réaliser sur la même page. Du coup, à l'affichage du formulaire, avant même que l'utilisateur ait pu lui cliquer dessus, il va déjà aller chercher le $_POST['lang'] ! Qui n'a, évidemment, pas encore été défini.

La meilleure solution dans ce cas-là, c'est de vérifier son existence avant de l'utiliser.

Accessoirement, tu auras également un (petit) soucis avec la sélection de la langue qui restera sur English même si la page sélectionnée et affichée est devenue l'espagnol.

Si on rajoute que l'utilisation de switch()...case... dans ton cas est plus adaptée que la série de if(), même si celle-ci fonctionne, ton code donnerait donc :

<?php
    // Récupération de la langue choisie, avec "en" comme valeur par défaut.
    $lang = (isset($_POST['lang'])) ? $_POST['lang'] : 'en';
?>

<form method="post" action="index.php"> 
     <select name="lang"> 
      <option value="es">Español           <?php echo(($lang == 'es') ? 'selected="selected"' : ''; ?>
      </option> 
      <option value="fr">Français            <?php echo(($lang == 'fr') ? 'selected="selected"' : ''; ?> 
      </option> 
      <option value="en"                            <?php echo(($lang == 'en') ? 'selected="selected"' : ''; ?>
      </option> 
      <option value="d">Wörterbuch       <?php echo(($lang == 'd') ? 'selected="selected"' : ''; ?>
      </option> 
     </select> 
     <input type="Submit" value"OK"/> 
    </form> 

<?php  
       
       $aInclure = '';
       switch ($lang)
       {
            case 'es': $aInclure = 'es-lang.php'; break;
            case 'en': $aInclure = 'en-lang.php'; break;
            case 'fr': $aInclure = 'fr-lang.php'; break;
            case 'd': $aInclure = 'd-lang.php'; break;
       }
       include $aInclure;
 ?> 

Si tu es sûr que tes fichiers s'appelleront toujours comme ça, tu peux même remplacer tout le bloc d'inclusion par cette ligne unique :
include $lang.'-lang.php';

Xavier
1
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   82
 
En effet merci de votre aide effectivement les switch simplifie la lecture du programme ^^
Merci pour la ligne d'inclusion cela va m'être très utile.

Ce que je vais faire c'est mettre le site en anglais par défaut.

Merci beaucoup ;)
0
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   82
 
o_O je viens de remarquer ça. J'y comprend plus rien mdr

Je devrais peut être mettre le test !empty() pour éviter les undefined. Merci désolé du dérangement ;)
0
aurelbo Messages postés 548 Date d'inscription   Statut Membre Dernière intervention   82
 
et de mettre une langue par défaut.
0