Ne prends pas toutes mes variables en comptes

Lasko
Invité n'ayant pas de compte PHPfrance

25 mars 2014, 11:55

Bonjour,
Je suis vraiment très nul en php mais j'essaye de me dépatouiller tant bien que mal, donc j'espère que vous pourrez m'aider ! :)

Je dois rediriger des sites en fonction de la langue de chaque navigateur mais je dois faire cela dans le header de mon site car je n'ai pas accès au serveur...
Donc voilà ce que j'ai trouvé et modifié :
<?php

$lang=$HTTP_ACCEPT_LANGUAGE;
if ($lang='fr')
{
header('location:http://monsite.fr');
}
if ($lang='fr_FR')
{
header('location:http://monsite.fr');
}
if ($lang='fr_BE')
{
header('location:http://be.monsite.be');
}
if ($lang='nl_BE')
{
header('location:http://nl.monsite.be/');
}
if ($lang='nl')
{
header('location:http://monsite.nl');
}
exit;
?>
La c'était mon premier test et je me rend compte que seul ma dernière variable if est prise en compte.
J'ai ensuite remplacé les "if" (sauf le premier) par des "esleif" (après l'avoir vu sur la toile) et cela ne change rien non plus...

Pourriez vous m'aider svp?

Merci d'avance!

ViPHP
xTG
ViPHP | 7331 Messages

25 mars 2014, 12:55

Le simple égal est une affectation.
Le double égal est une comparaison. ;)

N.B : le résultat d'une affectation retourne toujours true.

Mammouth du PHP | 2278 Messages

25 mars 2014, 13:06

Le simple égal est une affectation.
Le double égal est une comparaison. ;)

N.B : le résultat d'une affectation retourne toujours true.
@xtg Ca devrait toujours entrer dans le premier cas.

Il faut remplacer le = par un ==, come dit xtg
Il y a un problème supplémentaire:
pour avoir la langue de la requete il faut écrire
$lg = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

laskoo
Invité n'ayant pas de compte PHPfrance

25 mars 2014, 15:46

Merci xTG & Sirakawa :)

J'ai donc fais les changements que vous m'avez proposé et modifié la première ligne suite à divers recherches google. Ca fait peut etre bcp de "$_SERVER"... je ne sais pas... :?

Toutefois il y a quand meme un problème, les navigateurs prennent en compte que les 2 première lettres lors des "languages composés" type nl-be et fr-be.
en gros je m'explique, lorsque je configure mon navigateur en "nl-be", je suis redirigé vers le "nl" et si je suis en "fr-be", alors redirigé vers le "fr"...
Comment faire en sorte que les 4 lettres soient prises en compte?

Dernier point, que veux dire le "0,2" dans ta ligne
$lg = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);
?
<?php

$lang=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lg = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0,2);
if ($lang == 'fr')
{
header('location:http://monsite.fr');
}
elseif ($lang == 'fr-FR')
{
header('location:http://monsite.fr');
}
elseif ($lang == 'fr-BE')
{
header('location:http://fr.monsite.be');
}
elseif ($lang == 'nl-BE')
{
header('location:http://nl.monsite.be/');
}
elseif ($lang == 'nl')
{
header('location:http://monsite.nl');
}
exit;
?>
Merci bcp de votre aide ! :)

Mammouth du PHP | 2278 Messages

25 mars 2014, 17:29

Dernier point, que veux dire le "0,2" dans ta ligne:
une chaine de caractères php , entre autes, est un tableau de lettres, dont les cellules sont numérotées de 0 à nombre de lettres -1 de la chaine.
substr($chaine, $debut, $ombre_de_lettres);
donc dans ce cas les deux premières lettres.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

lasko
Invité n'ayant pas de compte PHPfrance

25 mars 2014, 18:16

Super Sirakawa ! Merci :)
Donc si je change le 2 en 5, il me prendra les 5 lettres et non pas que les 2 premières?
Par ex pour nl-be, si je fini par "0,4", alors les 5 lettres de langues (dont le trait d'union) seront prises et pas que les deux premières qui me renvoient vers la hollande?
Merci encore de ton aide :)

ViPHP
xTG
ViPHP | 7331 Messages

25 mars 2014, 19:28

0,N => de 0 à N-1 => N caractères
0,4 => 4 caractères
0,5 => 5 caractères
:)