Page 1 sur 3
un petit coup de main pour une erreur de code
Posté : 12 nov. 2007, 12:51
par jfaucon
Bonjour.
Je suis en train de faire un site multilangues et j’ai un petit souci.
Voici le code de mon fichier index.php
<?
if(!empty($_COOKIE[lang]))$lang=$_COOKIE[lang];
if(!empty($_GET[lang]))$lang=$_GET[lang];
if(!empty($lang) && ($lang==eng || $lang==fr || $lang==esp)){
include(lang_.$lang..php);
setcookie(lang,$lang,time()+3600*25*365,/);
}else include(lang_fr.php);
?>
<html>
<body>
<a href=?lang=fr><img src=images/Drapeau/fr.gif border=0></a>
<a href=?lang=eng><img src=images/Drapeau/eng.gif border=0></a>
<a href=?lang=esp><img src=images/Drapeau/esp.gif border=0></a>
<br>
<?php echo $txt001; ?>
</body>
</html>
le code des fichiers langues.
lang_eng.php.
lang_fr.php.
lang_esp.php.
Quand je lance index.php dans le navigateur, il me met l’erreur suivante.
Parse error: parse error in c:\program files\easyphp1-8\www\multilangues 2\index.php on line 5
quelqu'un peut il regarder ce code et me filer un petit coup de main pour savoir d'ou vien cette erreur.
je vous remerci d'avance.
Posté : 12 nov. 2007, 12:56
par Truc
comme un petit souci ici, non ?
include(lang_.$lang..php);
Posté : 12 nov. 2007, 13:13
par jfaucon
c'est un code que j'ai recopié car je ne suis pas un as de php.
as tu la solution a cette erreur ?
si oui merci beaucoup je galere dessus depuis 3 jours.
quelle perte de temps je suis vert.
enfin c'est comme ça je suis entrain d'apprendre php mais tout seul c'est pas facile facile.
Posté : 12 nov. 2007, 13:18
par jfaucon
sinon j'ai aussi essayé ce tuto.
mais je ne sais pas comment faire la gestion des langues avec des drapeaux.
Posté : 12 nov. 2007, 13:19
par zeus
Quand tu fait un include normal, tu doit faire un truc du genre
include('lang_fr.php');
Avec ton système multilangue, tu essayes que le 'fr' ne soit pas en dur, mais contenu dans une variable.
Pour celà, il te suffit juste de remplacer le 'fr' par la variable et la concaténation
include('lang_'. $lang .'.php');
Mais il ne faut retirer les ' autour des parties fixes du nom du fichier

Posté : 12 nov. 2007, 13:23
par Truc
"Débutant" pourquoi ne pas profiter du forum "Débuter en PHP" alors ?
Les réponses sont adaptés au niveau du posteur.
Enfaite tu as plusieurs erreurs
1.
$_COOKIE[lang]
doit etre
$_COOKIE["lang"]
avec des guillemets
2. Comparaison de chaine de caractères avec une variable :
$lang==eng
doit etre
$lang=="eng"
Idem pour les autres.
3. Concaténation de chaine de caractères avec une variable
include(lang_.$lang..php);
doit être
include("lang_".$lang.".php");
4. include doit être le nom d'un fichier en tant que chaine de caractères
include(lang_fr.php);
doite être
include("lang_fr.php");
5. Affectation d'une chaine de caractères à une variable
$txt001=hi welcome;
doit être
$txt001="hi welcome";
Tu sembles avoir un problème avec les chaines de caractères (= mot, phrase)
Posté : 12 nov. 2007, 13:40
par jfaucon
merci je test et je clos le topic par resolusi ça fonctionne.
c'est super sympat le réponse, en esperant etre aussi bon un jour pour repondre a des debutants comme moi.
encore merci
Posté : 12 nov. 2007, 15:10
par jfaucon
les liens fonctionnent mais les constantes ne changent pas.
Posté : 12 nov. 2007, 15:12
par Cyrano
...mais les constantes ne changent pas.
C'est le propre des constantes : erreur de formulation ?

Posté : 12 nov. 2007, 15:17
par jfaucon
excusez moi.
les echo du fichier index ne changent pas quand je change de langue.
pourtant dans l'url le lien change bien.
Posté : 12 nov. 2007, 15:23
par Cyrano
Fais donc voir ton code corrigé qu'on voie où tu en es au juste...
Posté : 12 nov. 2007, 15:23
par jfaucon
Code : Tout sélectionner
<?php require("lang/decide-lang.php"); ?>
<html>
<body>
<table width="100" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><div align="center"><a href="?lang=fr"><img src="images/Drapeau/fr.gif" width="21" height="13" border="0"></a></div></td>
<td><div align="center"><a href="?lang=eng"><img src="images/Drapeau/eng.gif" width="21" height="13" border="0"></a></div></td>
<td><div align="center"><a href="?lang=esp"><img src="images/Drapeau/esp.gif" width="21" height="13" border="0"></a></div></td>
</tr>
</table>
<?php echo TXT_ACCUEIL_INDEX; ?>
<br>
Meteo du jour : <?php echo TXT_METEO; ?>
<br>
Conseil du jour : <?php echo TXT_CONSEIL_INDEX; ?>
</body>
</html>
merci
Posté : 12 nov. 2007, 15:28
par Cyrano
Mouais, pour celui-ci, pas de problème, mais le fichier
decide-lang.php serait plus utile

Posté : 12 nov. 2007, 15:29
par jfaucon
Code : Tout sélectionner
<?php
if(isset($HTTP_COOKIE_VARS['lang'])) {
$lang = $HTTP_COOKIE_VARS['lang'];
} else {
// si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
}
//script d'origine
if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('lang/fr-lang.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('lang/en-lang.php');
} elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier esp-lang.php
include('lang/esp-lang.php');
}
//fin du script d'origine
//définition de la durée du cookie (1 an)
$expire = 365*24*3600;
//enregistrement du cookie au nom de lang
setcookie("lang", $lang, time() + $expire);
?>
Posté : 12 nov. 2007, 15:38
par Ryle
Quand tu cliques sur le lien, tu envoi la variable lang en get. Avant de vérifier si une langue est définie dans le cookie, il faudrait peut être t'assurer qu'aucune langue n'a été sépcifiée dans $_GET['lang']. Et si une langue est spécifiée, utiliser la nouvelle langue demandée pour ouvrir le bon fichier et mettre à jour le cookie
