2013-03-05 3 views
-8

Я новичок в php, и я действительно запутался, мой код кажется правильным, и он работает, но не полностью. Я пытаюсь реализовать перевод, используя сеанс для пользователей, для реализации какой-либо другой функции при вызове условия, если elseif elseif, мне нужно использовать hain if-statements с if else else или это возможно, как я сделал вначале.is if elseif elseif possible vs if else?

<?php 

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


elseif ($_GET['lang']=='en') { 
include('gb.php'); 
session_start(); 
$_SESSION['lang']='en'; 
} 

elseif ($_GET['lang']=='it') { 
include('it.php'); 
session_start(); 
$_SESSION['lang']='it'; 
} 

elseif ($_SESSION['lang']=='fr') 
{ 
include('fr.php'); 
} 

elseif ($_SESSION['lang']=='en') 
{ 
include('gb.php'); 
} 

elseif ($_SESSION['lang']=='it') 
{ 
include('it.php'); 
} 

else 
{ 
include('fr.php'); 
} 
?> 
+3

У меня нет абсолютно никакой идеи, что вы пытаетесь спросить. Не малейшая подсказка. – 2013-03-05 23:37:11

+0

Что вы опубликовали, является вполне допустимым кодом в PHP. Это не лучший подход (см. Ответ Оли), но, тем не менее, он отлично действует. – BenM

ответ

5

Вы можете использовать переключатель заявление для аккуратным кода вид:

 

switch($_SESSION['lang']) { 
    case 'it': 
     include(..); 
     break; 
    case 'en': 
     include(..); 
     break; 

    etc.. 
} 
 

см http://php.net/manual/en/control-structures.switch.php

+0

Извините, мой вопрос был не очень ясен, мне очень сложно объяснить, я уже смущен, и мне сложно быть конкретным на английском языке, спасибо за ваш ответ, поэтому, если я правильно понял, структура коммутатора - это цепочка, похожая на инструкцию elesif но больше похоже на цепочку. Большое спасибо за руководство. – mikker

0

При использовании сессий, вы всегда должны вызывать session_start(), будь вы инициализации сеанса или просто возобновить его, так что вытащите его из своих заявлений и поставьте поверх своей страницы. Кроме того, я не совсем понимаю, чего вы пытаетесь достичь или что-то не получается.

+0

ok теперь я думаю, что получил его так, чтобы он всегда начинал session_start(); if ($ _GET ['lang'] == 'fr') { include ('fr.php'); session_start(); $ _SESSION ['lang'] = 'fr'; } – mikker

+0

Да, почему бы вам не поместить его выше своего оператора if/switch? Таким образом, вам не нужно повторять это для каждого случая. – Rick

+0

Thats точно, что я сделал первым, но так как это ничего не меняет, я был уверен, что это не сработает. – mikker

1

Первое, что я заметил здесь, - это много повторяющегося кода и то, что по существу делает поиск из нескольких мест. Если вы реструктурируете свой код, вы можете устранить большую часть сложности. Вот то же самое сделано гораздо более простым способом:

<?php 

define('DEFAULT_LANG', 'fr'); 
$lang_inc = array(
    'fr' => 'fr.php', 
    'en' => 'gb.php', 
    'it' => 'it.php', 
); 

session_start() 

if ($_GET['lang'] && array_key_exists('lang', $_GET)) { 
    $lang = $_GET['lang']; 
} elseif ($_SESSION['lang'] && array_key_exists('lang', $_SESSION)) { 
    $lang = $_SESSION['lang']; 
} else { 
    $lang = DEFAULT_LANG; 
} 

$lang_file = $lang_inc[$lang]; 
include($lang_file); 

$_SESION['lang'] = $lang; 
+0

Спасибо, что я пытался реализовать его с помощью массивов, но сначала это не сработало, так как вы дали мне дорогу сейчас, я попробую еще раз, как вы, спасибо много и снова жалею, что не очень ясны. Я не мог теперь форматировать его так: if ($ _GET ['lang'] && array_key_exists ('lang', $ _GET)) { – mikker

+0

Мой PHP большой ржавый, я думаю, что правильный способ написать это может be 'if (isset ($ _ GET ['lang']) && array_key_exists (...', чтобы узнать, существует ли значение. Идея все та же. –

+0

Спасибо за все ответы выше, мне удалось заставить это работать сейчас и это действительно помогло мне понять структуру. Ошибка даже не пришла из этого кода, но из другой связанной с этой страницей команды menulang.php, которую я создал для того, чтобы называть сеансы «Я сейчас, я сейчас ...», но теперь я попробую у вас будет менее повторяющийся код и его чище. И спасибо за ресурсы, которыми вы поделились. – mikker

0

Я не думаю, что есть необходимость, если/другое или коммутатор, так как все, что вы делаете, в том числе файл, который динамическая часть названия уже определенный в переменной языка.

Вы также не должны перезагружать $ _SESSION ['lang'], если явно не задано $ _GET ['lang'].

Это будет более эффективным и менее половины кода, используемого с if/else или условными обозначениями переключателя на основе значения lang.

<?php 
session_start(); 

// Only set $_SESSION[$lang] if it is not set 
// or if $_GET['lang'] is explicitly defined 
if (isset($_GET['lang']) || !isset($_SESSION['lang'])) { 

    // Array of allowed languages 
    $allowed = array('fr', 'en', 'it'); 

    // Set fr to default if lang isn't defined or not allowed 
    $_SESSION['lang'] = isset($_GET['lang']) && in_array($_GET['lang'], $allowed) ? $_GET['lang'] : 'fr'; 
} 

// dynamically include file 
include($_SESSION['lang'] . '.php'); 
+0

Спасибо, что это очень хороший способ, намного проще, чем то, что я сделал. – mikker