[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбор языка
AlMaster
Помогите пожалуйста, запутался в конец уже.. :unsure: Пишу скрипт для сайта, нужно реализовать 3 языка на выбор и переключение между ними.
Названия языков хранятся в массиве:
$languages = array('Russian', 'Eesti', 'English');

Далее выводятся ссылки и формы для переключения между этими языками. Тут по сути ничего проблемного, все понятно.
К примеру генерируются ссылки - "?lang=0", "?lang=1", "?lang=2" где номер - порядковый номер элемента в массиве.
Так же существует переменная $default_lang = 1, в которой указывается язык по умолчанию (так же по номеру элемента в массиве).

Далее код обработки данных:

if (! empty($_GET['lang'])) {
$get_language = check_variable($_GET['lang']); // данные прогоняются через функцию проверки (фильтрации)
}

if (isset($get_language)) {
if (isset($languages[$get_language])) { // проверка на наличие элемента в массиве
$_SESSION['language'] = $get_language; // значение сохраняется в сессии
}
}


if (empty($_SESSION['language'])) {
$_SESSION['language'] = $default_lang; // если переменная в сессии пуста - присваиваем значение по умолчанию.
}


Я постарался раскидать все как можно попроще, убрал все лишнее. В оригинале еще существует проверка POST переменной.

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

Но проблема в том что когда я хочу переключить на первый язык - переменная $_GET['lang'] оказывается равной нулю, и по этому не проходит проверку уже на первой строке кода -
if (! empty($_GET['lang'])) { ... }


Ну и далее подобного рода проблемы видны и с переменной $_SESSION['language'], если ей опять же присвоить значение первого языка - "0", то она не пройдет проверку -
if (empty($_SESSION['language'])) { ... }

и будет заменена на значение по умолчанию.

Как в PHP можно отличить что переменная не "" (пустое значение) а 0? Существует ли иное решение этой проблемы? :huh:
Заранее благодарю...



Спустя 39 минут, 11 секунд (8.12.2010 - 11:03) Lenarfate написал(а):
if($_GET['lang'] !== 0)

Спустя 13 минут, 47 секунд (8.12.2010 - 11:16) linker написал(а):
Смотри у тебя массив
$languages = array('Russian', 'Eesti', 'English');
который равносилен этому
$languages = array(0 => 'Russian', 1 => 'Eesti', 2 => 'English');
т.е. первый индекс в массиве НОЛЬ. Далее по коду
if (! empty($_GET['lang']))
для функции empty() значение НОЛЬ - является пустым значением, а значит при выборе русского языка проверки не будет. Используй
$get_language = isset($_GET['lang']) ? (integer)$_GET['lang'] : 0;

Спустя 11 часов, 52 минуты, 2 секунды (8.12.2010 - 23:08) AlMaster написал(а):
Спасибо огромное за ответы!

Проверку исправил, теперь переменная сессии $_SESSION['language'] задается корректно. Может быть равна: 0, 1, 2.

Но далее проблема опять повторяется - нужно проверить присвоено ли какое либо значение переменной $_SESSION['language']. isset и empty тут не подходят.

if (empty($_SESSION['language'])) {
$_SESSION['language'] = $default_lang; // если переменная в сессии пуста - присваиваем значение по умолчанию.
}


хмм....

---------------------------------------------
РЕШЕНО! Использовал функцию is_numeric(). Если переменной приравнивается числовое значение - то язык по умолчанию присваивать не нужно. И так как 0 число, а пустое значение не является численным с ней все прекрасно работает.

Остается небольшой вопрос - корректно ли использовать данную функцию?

Спустя 5 минут, 58 секунд (8.12.2010 - 23:14) ZSH написал(а):
$_SESSION['language'] = (isset($_SESSION['language']) && (int)$_SESSION['language'] < 3) ? (int)$_SESSION['language'] : 0;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.