Маленький вопросик по GET и COOKIES

Статус
В этой теме нельзя размещать новые ответы.

G-Null

Местный житель
Регистрация
6 Сен 2007
Сообщения
178
Реакции
21
В-общем, дело вот в чём:
у меня есть скрипт, пытаюсь сделать его работу мультиязычной. То есть при установке по умолчанию можно выбрать один из нескольких языков. Но когда скрипт уже установлен, путём правки двух строчек можно добиться по ссылке вида index.php?lang=english добиться перевода страницы, к примеру, с русского на английский.
строчки в коде которые отвечают за это дело:
PHP:
if (!isset($_GET['lang'])) 
   require_once("{$CONF['path']}/languages/{$CONF['default_language']}.php"); 
else 
   require_once("{$CONF['path']}/languages/{$_GET['lang']}.php");
Всё конечено хорошо, да вот только припереходе на любую другую страницу из-за отсутствия приставки lang=english язык естественно меняется на дефолтный, в данном случае русский.
То есть необходимо как то запоминать изначальный выбор пользователя. как я понимаю это делается через COOKIES..
Будте добры, подскажите, что следует сделать, чтоб работало ?
 
Код:
if ( !isset($_GET['lang']) && !isset($_COOKIE['lang']) ) {   
require_once("{$CONF['path']}/languages/{$CONF['default_language']}.php");
}
else {
$lang = ( isset($_GET['lang']) ? $_GET['lang'] : $_COOKIE['lang']);
setcookie('lang', $lang, time() + 31536000);
require_once("{$CONF['path']}/languages/{$lang}.php");
}
пример простейший, как минимум надо делать еще проверку входящих переменных на соответствие каким-то значениям, а не инклудить хз что.
 
Отлично ! всё работает ! Спасибо !
По поводу проверки входящих переменных: то есть это непосредственно то что присваивается переменной lang (к примеру lang=russian) ? верно ? И нужно ввести сначала проверку, к примеру, на соответствие всем языкам, что доступны на выбор . так ? то есть я просто изначально создам условие вроде
PHP:
if ( isset($_GET['lang']=='english') || isset($_GET['lang']=='russian') ){
...вставлю сюда тот код, что вы мне дали...
}
правильно ?
 
PHP:
if ( isset($_GET['lang']=='english') || isset($_GET['lang']=='russian') ){
...вставлю сюда тот код, что вы мне дали...
}
правильно ?

неправильно =)
так работать не будет, вернее будет работать не так как ожидаешь

лучше уж что то вроде:
PHP:
$langs=array("english","russian");
if( isset($_GET['lang']) && in_array($_GET['lang'],$langs) ...

простейшая проверочка на ограниченные варианты =)

тогда примерчик можно переписать следующим образом...
PHP:
$langs=array("english","russian");

if(
  (isset($_GET['lang']) && ($langKey=array_search($_GET['lang'],$langs))!==false) 
||

(isset($_COOKIE['lang']) && ($langKey=array_search($_COOKIE['lang'],$langs))!==false){
     setcookie('lang', $langs[$langKey], time() + 31536000);
require_once("{$CONF['path']}/languages/{$langs[$langKey]}.php");
}else{
    require_once("{$CONF['path']}/languages/{$CONF['default_language']}.php");
}


а вобще по хорошему, нужно придумать или взять гденибудь пару функций или целый набор - которые будут выполнять всю черную работу с входными данными =)
т.е. проверку на валидность , форматирование и еще - что кому нужно ...
 
А почему именно куки?

Лично я бы лучше использовал не куки а сессию. Зачем почем зря засорять куки?
PHP:
if (isset($_GET['lang'])
   $_SESSION['lang'] =  $_GET['lang'];
.......
if (isset($_SESSIN['lang']) {
  Делаем все что надо для смены языка
}
 
2 navin вполне согласен что вместо куки лучше сессии юзать.

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

со временем разбереться и на сессии переседят если нужно будет
 
а можно еще в каждый урл вставлять lang=russian или lang=english
т.е. человек выбирает язык и дальше
if ($lang=="russian" || $lang=="english")
{$lang_url="?".$lang;}
else
{$lang_url=NULL;}
а каждой ссылке добовлять
echo "http://kakoi-to-url.ru/page.php".$lang;
Это я так, может какие идеи придут..
Код не судите - я не всегда так пишу:ah:
 
2 lobzik
Слишком долго парится с ссылками, да и вид их в итоге становится на мой взгляд хуже. везде будет добавлено lang=russian, что только делает ссылки менее понятными для восприятия, ну это если с точки зрения sef

Всем Спасибо ! вариант с куками от Dogmat отличный, так и сделал
 
Согласен с пользователем lobzik. Читаемость кода не очень пострадает от добавления параметра lang.


У меня вызывает сомнения строка типа:
require_once("{$CONF['path']}/languages/{$_GET['lang']}.php");

С точки зрения безопасности - это не очень хорошо ведь через GET могут передать любую строку. Обработки никакой.
 
ТС юзает пример, который я привел.
сначала читай, потом пиши. а то получается слышишь звон - не знаешь где он.!!

нет там того, что ты привел и с безопасностью нормально все.



да и по поводу
Согласен с пользователем lobzik. Читаемость кода не очень пострадает от добавления параметра lang.
это еще бабушка на двое сказала.

тема закрыта, чего мусолить то?
вопрос риторический, можно не отвечать ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху