Всем привет=) Проблема с переключателем языка. Обработка языков: Код (PHP): define('LANG', 'admin/lang/'); if (isset($_GET['lang']) && $_GET['lang']=='rus') { $_SESSION['lang'] = 'rus' and require_once LANG.'rus.php'; } elseif (isset($_GET['lang']) && $_GET['lang']== 'eng'){ $_SESSION['lang'] = 'eng' and require_once LANG.'eng.php'; } else{ require_once LANG.'rus.php'; } echo $_SESSION['lang']; Переключатель: Код (PHP): <p class="language"><span class="language__rus"><a href ="?lang=rus">rus</a></span><span class="language__line">|</span><span class="language__eng"><a href ="?lang=eng">eng</a></span> echo $_SESSION['lang']; для проверки стоит. Это файл header.php. На каждой странице у меня session start(); в header.php не делал, ибо он инклудится на всех страницах и выдаст соответствующую ошибку. Искал уже способы решения на форумах, но решения не помогли мне. Почему языки не хранятся при переходе? В чем ошибаюсь? Спасибо.
Сайт по умолчанию на русском. При переходе на eng язык, $_SESSION['lang'] запоминает это и выдает мне это, при переходе по ссылкам тоже выдает eng, но язык на русский меняется все равно=(
Потому, что срабатывает условие Код (PHP): else{ require_once LANG.'rus.php'; Забавная конструкция and require_once ) Добавлено спустя 6 минут 33 секунды: не благодари Код (PHP): define('LANG', 'admin/lang/'); $lang = isset($_GET['lang']) && in_array($_GET['lang'], ['rus', 'eng'])? $_SESSION['lang'] = $_GET['lang'] : ( isset($_SESSION['lang']) ? $_SESSION['lang'] : 'rus'); include_once( LANG . $lang . '.php' ); print $lang ;
У ТС косяк в том, что значение из сессии не используется. lastdays вроде правильно написал, только зря слепил такую длинную строку. ненаглядно. Мой пример (без сессии): viewtopic.php?t=51855#p414898
Ну про 7 я уже знаю=) Просто мне потом его на timweb садить. В ТП сказали, что до 5.6 держит только=(
Ребята, новая проблема. Продолжу эту, ибо связана с языками. Обновил php на 5.5.9. Теперь жалуется на Warning: Illegal string offset 'header' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 22. Файл rus.php. Не выкладываю подключение к БД и прочие проверки, ибо они тут не нужны. Код (PHP): $result = mysqli_query($db, "SELECT * FROM hefo") or die("Ошибка" . mysqli_error($result)); if ($result) { while($row = mysqli_fetch_assoc($result)) $mass[] = $row; } $lang['header'] = $mass['header']; $lang['subtitle'] = $mass['subtitle']; $lang['button'] = $mass['button']; //Главное меню $lang['menu'] = array('Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value6'); $lang['search'] = 'Поиск'; //Меню информации $lang['infomenu'] = array('Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value6'); $lang['butup'] = 'Наверх';
там, где используются соответствующие значения=) полная ошибка выглядит так, но об одном и том же: Warning: Illegal string offset 'header' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 22 Warning: Illegal string offset 'subtitle' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 23 Warning: Illegal string offset 'button' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 24 Warning: Illegal string offset 'menu' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 26 Warning: Illegal string offset 'search' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 28 Warning: Illegal string offset 'infomenu' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 31 Warning: Illegal string offset 'butup' in Z:\home\тут_сайт\www\admin\lang\rus.php on line 34 Также и на eng.php жалуется с теми же ошибками.
он ответил: string(3) "us" Добавлено спустя 2 минуты 23 секунды: Решил вопрос. Может кому поможет. $lang у меня определялся не как массив, а как строка(имхо)=) Решение: объявить $lang, как массив. Вот так: Код (PHP): $lang = array();
это правильное решение. тут кто-то недавно был не рад что я массив объявляю явно - вот вам, новички, реальным пример как не сесть в лужу с неожиданным типом данных в переменной. Добавлено спустя 1 минуту 38 секунд: и кстати реальный пример ошибки в именовании переменных. вроде и язык выбранный лежит а вроде и массив локализации. упс.
Новая проблема=))) Хоть и обычный Notice, но лекать надо по 2 причинам: 1) Самая главная- ошибок вообще не должно быть. 2) У меня не отображаются заголовок($lang['header']), подзаголовок($lang['subtitle']) и кнопка($lang['button']) на русском. Пишет: Notice: Undefined index: header in Z:\home\тут_сайт\www\admin\lang\rus.php on line 11 Notice: Undefined index: subtitle in Z:\home\тут_сайт\www\admin\lang\rus.php on line 12 Notice: Undefined index: button in Z:\home\тут_сайт\www\admin\lang\rus.php on line 13 Добавил var_dump($lang), результат: array(3) { ["header"]=> NULL ["subtitle"]=> NULL ["button"]=> NULL } Где ошибся?
Код (PHP): if ($result) { while($row = mysqli_fetch_assoc($result)) $mass[] = $row; } в итоге, каждую итерацию цикла массив перезаписывается же, не? и посмотри, что всё-таки лежит в $mass
нет, туда просто складываются массивы. будет массив массивов. а ему надо чтоб массив ключей и значений был
Имхо, нет, не перезаписываются, они должны попадать в массив. Добавлено спустя 55 секунд: Так в чем все-таки проблема? В eng.php работает все, а в rus- нет.
нет никакой проблемы. у тебя просто нет скила программиста. ты не понимаешь что делаешь и что ожидаешь получить. а любой неожиданный по твоим меркам результат приводит тебя не к размышлениям о том почему так а на форум за решением. ты знаком с понятием отладка? вот ты себе представил как должен выглядеть массив а сраный компьютер посчитал иначе. и вот ты садишься, проверяешь значение переменной, понимаешь что оно не правильное, понимаешь какое оно должно быть правильное, знаешь где оно у тебя модифицируется, смотришь какие данные приходят в эту модификацию, думаешь как изменить алгоритм, меняешь алгоритм, опять запускаешь, сравниваешь фактический результат с ожидаемым. вот это отладка. а не жизнь на форуме.
Спасибо за наставления=) Я понял проблему. Я делал массив с ключами, а надо просто массив=) Решение: $mass[] - заменить на $mass.