Page 1 sur 1

comment empecher une url sans parametre ???

Posté : 25 mai 2009, 15:46
par webgalerien
bonjour,

je ne suis pas sur de ce qu il me faut faire mais

j ai un problème avec un site en plusieurs langues

tous marche correctement lorsque que la page est appeler avec le parametre de langue

sur ce principe :
http://www.monsite.com/acceuil.php?lang=fr
http://www.monsite.com/acceuil.php?lang=en

mais si jamais l url est :
http://www.monsite.com/acceuil.php?lang=

la j ai une erreur

j intègre le fichier de langue avec une session
le fichier choix-lang.inc.php

<?php
//choix_langue.inc.php
session_start('traduction');
$_SESSION['choixlang'] = $_GET['lang'] ;
if(isset($_SESSION['choixlang']))
{
   // "fr" => fr_lang.php et "en" => en_lang.php
      include('lang/'.$_SESSION['choixlang'].'-lang.php');
 }
else
{
    $_SESSION['choixlang'] = 'fr';
    include('lang/fr-lang.php');
}
?>
mais je ne sais pas comment faire pour que
si l url saisie est
http://www.monsite.com/acceuil.php?lang=
ou alors avec un parametre inconnu genre 'xzwp'
cela ne me crée pas d'erreur, et, que cela affiche par défaut la langue fr

si quelqu'un peux m expliquer , d avance merci

Posté : 25 mai 2009, 16:15
par Yosh
Je te conseil de forcer la langue si jamais le paramètre n'existe pas ou est vide ou est différent de ce qui est attendu.

Par exemple:
if(empty($_SESSION["lang"])) {
    $_SESSION["lang"] = "fr"; //si la langue par défaut est fr
}
Comme ça pas besoin de créer des règles spécifiques.

Posté : 25 mai 2009, 18:53
par webgalerien
merci pour cette reponse si rapide (j adore les gens de ce forum..héhé)

voila ce que j ai fais
<?php
//choix_langue.inc.php
//je demarre une session
if(empty($_SESSION["choixlang"])) {
    $_SESSION["choixlang"] = "fr"; //si la langue par défaut est fr
   include('lang/fr-lang.php');
}
else
{
session_start('traduction');//je nomme la session tableau
$_SESSION['choixlang'] = $_GET['lang'] ;//j ouvre une session table "choixlang"
if(isset($_SESSION['choixlang']))
{
    // Si la session ["choixlang"] existe
    // On recupere la variable pour l'ajouter au choix de fichier
    // Attention la variable doit avoir la meme appelation que le debut du nom du fichier
    // "fr" => fr_lang.php et "en" => en_lang.php
      include('lang/'.$_SESSION['choixlang'].'-lang.php');
    //la je teste si c ok par un echo
    //echo 'La variable "choixlang" existe et le fichier langue est :' . $_SESSION['choixlang'];
    //echo '<br>';
}
else //sinon
{
    // Si la session $_SESSION["choixlang"] n'est pas renseignée
    // Alors j'inclus la langue par défaut
    $_SESSION['choixlang'] = 'fr';
    include('lang/fr-lang.php');
}
}
?>
cela fonctionne mais comme je débute en php

je ne suis pas sur d avoir ecrit cela correctement

es ce bon ? ou ai je commis des erreurs monstrueuses ????

Posté : 25 mai 2009, 19:15
par AB
Il faut que session_start() soit appelé avant toute utilisation ou comparraison d'une variable de session.

Ensuite puisque tu fais des includes en te servant de $_SESSION['choixlang'], il serait prudent de vérifier si $_SESSION['choixlang'] correspond à une langue traduite sur ton site.

Par exemple
$langues_traduites = array('fr','en','de');
$_SESSION['choixlang']  = (isset($_SESSION['choixlang']) && in_array($_SESSION['choixlang'], $langues_traduites))? $_SESSION['choixlang'] : 'fr';

Posté : 26 mai 2009, 09:47
par Yosh
Un peu tard mais je suis d'accord avec AB

Posté : 26 mai 2009, 15:09
par webgalerien
ok merci
  • mais je me demandais comment empêcher l'erreur suivante:
    j ouvre mon navigateur et je tappe ceci

    http://www.monsite.com/acceuil.php?lang=
    la pas de souci le site s affiche en francais
    mais si je saisi apres le 1er affichage un truc du genre
    http://www.monsite.com/acceuil.php?lang=azerty
    alors forcement j ai une erreur puisque j appel un fichier langue qui n existe pas.
    comment je peux dire en php
    si langue n est pas "fr" "en" ou "nl" alors langue est "fr"
    voila le script complet avec l ajout de la precedente reponse
<?php
//choix_langue.inc.php
session_start('traduction');
$langues_traduites = array('fr','en','nl');

 if(empty($_SESSION["choixlang"])) {
    $_SESSION['choixlang']  = (
    isset($_SESSION['choixlang'])
     && in_array($_SESSION['choixlang'], $langues_traduites)
     )
     ? $_SESSION['choixlang'] : 'fr';

   include('lang/fr-lang.php');
}else {
$_SESSION['choixlang'] = $_GET['lang'] ;
 if(isset($_SESSION['choixlang']))
{
     include('lang/'.$_SESSION['choixlang'].'-lang.php');
}else {
    $_SESSION['choixlang'] = 'fr';
    include('lang/fr-lang.php');
 }
}
?>

Posté : 26 mai 2009, 15:35
par Ryle
Modération :
webgalerien, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

Posté : 26 mai 2009, 17:37
par webgalerien
oui Ryle merci pour l info .....mais justement mon problème n 'est pas résolu

seulement une partie ...

dans mon 1er post il y avais aussi

mais je ne sais pas comment faire pour que
si l url saisie est
http://www.monsite.com/acceuil.php?lang=
ou alors avec un paramètre inconnu genre 'xzwp'
cela ne me crée pas d'erreur, et, que cela affiche par défaut la langue fr
faut t'il que je réouvre un post et clôturer celui la ou on laisse celui la ouvert ?

Posté : 26 mai 2009, 17:38
par AB
Heu... et si tu rassemblais tout ça en quatre lignes ?
$session_start();

$langues_traduites = array('fr','en','nl');

$_SESSION['choixlang'] = (isset($_SESSION['choixlang']) && in_array($_SESSION['choixlang'], $langues_traduites))? $_SESSION['choixlang'] : 'fr'; 

$_SESSION['choixlang'] = (isset($_GET['lang']) && in_array($_GET['lang'], $langues_traduites))? $_GET['lang'] : $_SESSION['choixlang'] ;

include('lang/'.$_SESSION['choixlang'].'-lang.php'); 

Posté : 26 mai 2009, 17:52
par webgalerien
parfait

c'est exactement ce que je voulais faire

encore merci
rapide precis et clair..je cloture