Сделал скрипт для передачи параметра языка. Подскажите корректен ли такой вариант.

Гриша К.

Новичок
Сделал скрипт для передачи параметра языка. Подскажите корректен ли такой вариант.

Здравствуйте.
Я использую вот такой для передачи скрипту информации о выбранном языке:
language.php
PHP:
if(isset($_GET['language'])) {
  if(valid_language($_GET['language'])) { //Сзедсь буду проверять есть ли такой язык у меня
    $_SESSION['language'] = $_GET['language']; 
    // После передачи скрипту информации о я зыке, возвращаю пользователю на ту страницу где он был   
    header("Location: $_SERVER[HTTP_REFERER]");
   }
}
if(!isset($_SESSION['language'])) {
  $_SESSION['language'] = 'rus';
}

$language = $_SESSION['language'];
Вот что меня беспокоит в такой реализации смены языка:

Например я нахожусь на странице: _http://phpclub.ru/page.php?world=ru&country=rus
Часть кода страницы page.php:
PHP:
<?php 
include ('language.php');

//Список языков
<a href="?lang=eng">English</a>
<a href="?lang=fra">France</a>
<a href="?lang=rus">Russian</a>
?>
И вот такой момент:
Если в коде страницы language.php, я уберу строку header("Location: $_SERVER[HTTP_REFERER]");
То тогда находясь на странице _http://phpclub.ru/page.php?world=ru&country=rus и нажав на ссылку <a href="?lang=eng">English</a>,
я получается попадаю на страницу _http://phpclub.ru/page.php?lang=eng, т.е. потерялись параметры страницы (world=ru&country=rus).
И тогда я решил, что код на странице language.php, я добавлю строку header("Location: $_SERVER[HTTP_REFERER]"); и тогда со страницы _http://phpclub.ru/page.php?lang=eng я буду сразу поподать опять на _http://phpclub.ru/page.php?world=ru&country=rus, и + язык поменяется.

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

Фанат

oncle terrible
Команда форума
я одного не погу понять
зачем пользователя куда-то сначала отправлять, а потом возвращать?

не говоря уже о том, что держять язык в сессии - головотяпство
 

Гриша К.

Новичок
Фанат.
я одного не погу понять
зачем пользователя куда-то сначала отправлять, а потом возвращать?
Вот смотрите почему я так стал делать: находясь на странице _http://phpclub.ru/page.php?world=ru&country=rus, пользователь должен выбрать язык и остаться на ней (любой пользователь), если он выберит <a href="?lang=eng">English</a>, то попадет на страницу _http://phpclub.ru/page.php?lang=eng, где нет нужных параметров, поэтом я решил сразу же переслать его на ту страницу где он был _http://phpclub.ru/page.php?world=ru&country=rus, и получается, что и язык передался и страница совершенно не поменяла вид (lang=rus нет в строке броузера).


не говоря уже о том, что держять язык в сессии - головотяпство
Я вас не совсем понял, что значит держать языки в сессии:
$language, затем передается в строку
include_once($config['RootPath'].'language/lang_'.$language.'/main.php');


Вот как я все представляю. Но я очень хочу сделать все правильно, может быть разъясните мои основные ошибки?
 

Фанат

oncle terrible
Команда форума
то попадет на страницу _http://phpclub.ru/page.php?lang=eng, где нет нужных параметров
ну а кто мешает тебе СРАЗУ нужные параметры добавить в строку, без того, чтобы гонять браузер туда-сюда?

-~{}~ 18.02.06 21:57:

может быть разъясните мои основные ошибки?
чего там разъяснять?
тебе нужно, чтобы поисковик индексировал страницы на французском?

-~{}~ 18.02.06 22:02:

Я вас не совсем понял, что значит держать языки в сессии:
ты
записываешь
язык
в
сессию.

то есть, судя по твоим словам, ты не понимаешь, что делаешь?
 

Гриша К.

Новичок
Когда я начал это делать, я все думал как же мне передать эти параметры, пробовал $QUERY_STRING, но увидел, но увидел что такой вариант не подойдет. Где-то на форуме увидел сообщение, где предлагалось делать редирект, вот и сделал.
Ну а вы Фанат, навели меня на правильный вариант. Спасибо вам. Теперья спокоен.

Меня сначала пугало что на разных страницах есть разные параметры, ну в кратце, я сделал так:

//Так что есkи нет параметра, то его не добавляем
$world_id = (!empty($world)) ? 'world='.$world.'&' : '';

<a href="?'.$world_id .'lang=eng">English</a>
 

Фанат

oncle terrible
Команда форума
что-то ты фигню какую-то написал.
то есть, рассудил ты всё правильно, но последняя строчкау тебя какая-то странная. очень странная.

и, у тебя осталась проблема я языками.
пошлёт один француз другому ссылку на страницу - тот откроет, и увидит какую-то белиберду.

-~{}~ 18.02.06 22:37:

вот, теперь больше похоже на правду, но всё равно не очень понятно
постой, ты все параметры собрался так перебирать?
а зачем?
чем тебя QUERY_STRING не устроила?
 

Гриша К.

Новичок
Фанат
и, у тебя осталась проблема я языками.
пошлёт один француз другому ссылку на страницу - тот откроет, и увидит какую-то белиберду.
Ага, точно, у меня же $lang на следующих страницах не отображается в строке броузера. Есть в голове соображения какие-то, попробюую щас решить, точнее обязательно надо решить.
А вот теперь я вас помойму понял, по поводу того, что сессии неподходят для этих случаев.

вот, теперь больше похоже на правду, но всё равно не очень понятно
постой, ты все параметры собрался так перебирать?
а зачем?
чем тебя QUERY_STRING не устроила?
Да придется так все параметры перебирать, вроде как по другому не получится.

Я пробоавл делать так:
$QUERY_STRING = $_SERVER['QUERY_STRING'];
<a href="?'.$QUERY_STRING.'lang=eng">English</a>

Получается, если на одной странице нажать два раза на эту ссылку, то вот что будет в строке броузера:
http://phpclub.ru/page.php?world=eu&lag=eng&lang=eng

Т.е. параметр lang, прибавляется (по логике все правильно)
Возможно это можно как-то обойти?
 

Фанат

oncle terrible
Команда форума
Получается, если на одной странице нажать два раза на эту ссылку, то вот что будет в строке броузера:
http://phpclub.ru/page.php?world=eu&lag=eng&lang=eng
ну и кто тебе мешает вместо перебора параметров просто проверить - есть ли ланг в гете, и если есть - не подставлять?
 

Гриша К.

Новичок
Фанат, мой мозг мне мешает, в одну волну вошел и по ней прет. Ну уже вышел. Спасибо вам.
Сессии использовать не буду, как передавать параметры $lang думаю разберусь, потом готовый результат напишу.
 
Сверху