Подскажите в чем проблема в сессиях?

Тема в разделе "PHP", создана пользователем AndBerd, 26 янв 2009.

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

    AndBerd Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    15
    Симпатии:
    0
    Необходимо подключение языкового файла в зависимости от выбранного на первой странице флажка.
    Логика такова:
    если index.php открывается первый раз (без переданной ему переменной $lang то выводиться русский, если нажали на флажок то эта же страница перегружается, но уже с определенной переменной.

    Есть такой код:
    PHP:
    <?
    session_start();
    if (isset(
    $lang)) { 
      unset(
    $_SESSION['lang']);
      if (
    $lang==="ru"$_SESSION['lang']="ru";
      if (
    $lang==="en"$_SESSION['lang']="en";
      } else {
      
    //$lang = "ru"; $_SESSION['lang']="ru";           //  !!!!!! основная проблема
    };
    if (
    $_SESSION['lang']==="en") {
      require_once 
    "languages/lang_en.php ";
    }; 
    else {require_once 
    "languages/lang_ru.php ";};
    //echo $lang;
    //echo $_SESSION['lang'];
    unset($lang);
    ?>
    далее в теле страницы выводим флажки

    HTML:
    
    <div id="flags">
      <table width="52" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td><a href="Index.php?lang=ru"><img src="images/RU.gif" width="21" height="13" border="0" /></a></td>
          <td width="10" height="13"></td>
          <td><a href="Index.php?lang=en"><img src="images/EN.gif" width="21" height="13" border="0" /></a></td>
        </tr>
      </table>
    </div> 
    Проблема в том, что все работает только один раз!
    Стоит один раз выбрать язык, как затем его уже не возможно изменить?
    Хотя поставил удаление переменных?

    Подскажите где ошибка в коде.
    Глаз замылился не могу найти.:bc:
    Может я что то не правильно понимаю в работе сиссий?
    Может они кэшируются, хотя запрет кэша тоже ставил не помогает.
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Что тут делаю точка с запятой? перед else.
    PHP:
    if ($_SESSION['lang']==="en") {
      require_once 
    "languages/lang_en.php ";
    }; 
    else
     
  3. AndBerd

    AndBerd Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    15
    Симпатии:
    0
    Да действительно бестолковый КОСЯК. но на суть происходящего он не влияет.
    Убрал - все тоже самое.
     
  4. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    ну тогда require_once. оно не работает в условии. необходимо юзать include_once. В общем надо тщательнее курить мануалы. Правда там на английском, но вроде так.
     
  5. AndBerd

    AndBerd Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    15
    Симпатии:
    0
    Исправил на include_once все равно таже ерунда.

    Поставил впереди echo оказывается он с правильной $lang переменной только первый раз входит, а потом уже ее не меняет?????
    Откуда он вытаскивает старую? кэширование запрещал!
    Короче каждый раз работает в одной сессии только один раз правильно, затем не одну не другую поменять не может.
     
  6. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    нет никакого кэширования. Из того, что ты дал, много не поймешь. Но можно сказать следующее.
    1.Не нужно любить глобалы. юзай $_GET['lang']
    2.Также не надо диких сравнений типа ===. хватит и ==
    3. Любой дебагер через минуту уже дал бы тебе ответ, что куда пришло.
    Лучше сделай в начале скрипта
    PHP:
    die(var_export($_GETtrue));
     
    AndBerd нравится это.
  7. AndBerd

    AndBerd Создатель

    Регистр.:
    15 янв 2009
    Сообщения:
    15
    Симпатии:
    0
    Помогло спасибо!
     
Статус темы:
Закрыта.