1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем G-Null, 13 сен 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. G-Null

    G-Null

    Регистр.:
    6 сен 2007
    Сообщения:
    180
    Симпатии:
    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..
    Будте добры, подскажите, что следует сделать, чтоб работало ?
     
  2. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Код:
    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");
    }
    пример простейший, как минимум надо делать еще проверку входящих переменных на соответствие каким-то значениям, а не инклудить хз что.
     
    mayken и G-Null нравится это.
  3. G-Null

    G-Null

    Регистр.:
    6 сен 2007
    Сообщения:
    180
    Симпатии:
    21
    Отлично ! всё работает ! Спасибо !
    По поводу проверки входящих переменных: то есть это непосредственно то что присваивается переменной lang (к примеру lang=russian) ? верно ? И нужно ввести сначала проверку, к примеру, на соответствие всем языкам, что доступны на выбор . так ? то есть я просто изначально создам условие вроде
    PHP:
    if ( isset($_GET['lang']=='english') || isset($_GET['lang']=='russian') ){
    ...
    вставлю сюда тот кодчто вы мне дали...
    }
    правильно ?
     
  4. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    неправильно =)
    так работать не будет, вернее будет работать не так как ожидаешь

    лучше уж что то вроде:
    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");
    }

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

    navin Создатель

    Регистр.:
    21 авг 2007
    Сообщения:
    20
    Симпатии:
    2
    А почему именно куки?

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

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    2 navin вполне согласен что вместо куки лучше сессии юзать.

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

    со временем разбереться и на сессии переседят если нужно будет
     
  7. lobzik

    lobzik

    Регистр.:
    8 авг 2006
    Сообщения:
    311
    Симпатии:
    49
    а можно еще в каждый урл вставлять lang=russian или lang=english
    т.е. человек выбирает язык и дальше
    а каждой ссылке добовлять
    Это я так, может какие идеи придут..
    Код не судите - я не всегда так пишу:ah:
     
  8. G-Null

    G-Null

    Регистр.:
    6 сен 2007
    Сообщения:
    180
    Симпатии:
    21
    2 lobzik
    Слишком долго парится с ссылками, да и вид их в итоге становится на мой взгляд хуже. везде будет добавлено lang=russian, что только делает ссылки менее понятными для восприятия, ну это если с точки зрения sef

    Всем Спасибо ! вариант с куками от Dogmat отличный, так и сделал
     
  9. HeeL

    HeeL Создатель

    Регистр.:
    15 май 2006
    Сообщения:
    39
    Симпатии:
    5
    Согласен с пользователем lobzik. Читаемость кода не очень пострадает от добавления параметра lang.


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

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

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    ТС юзает пример, который я привел.
    сначала читай, потом пиши. а то получается слышишь звон - не знаешь где он.!!

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



    да и по поводу
    это еще бабушка на двое сказала.

    тема закрыта, чего мусолить то?
    вопрос риторический, можно не отвечать ;)
     
Статус темы:
Закрыта.