-3

你好我有一个问题如何使用会话。

我想更改网站的语言。所以语言设置的逻辑如下:

调用我的网站时,将检查是否有 browser_accept_language。如果有语言设置,它将被用作首选语言,否则设置默认语言。在下一步中,将检查是否已经在会话中存储了它的设置。如果语言有会话值,则首选语言将更改为会话条目。

好的,这是逻辑部分。现在我尝试编码。问题是它似乎不起作用,我不知道为什么。

所以php是:

<?PHP       
    session_start();

    header ("Content-Type: text/html; charset=utf-8");


    include_once "scripts/db_connect.php";

if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){
    $max   = 0.0;
    $languages = explode(",", (strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])));
    foreach($languages as $language){
        $language = explode(';', $language);
        $q    = (isset($language[1])) ? ((float) $language[1]) : 1.0;
        if ($q > $max){
            $max = $q;
            $pref_language = $language[0];
        }
    }
    $pref_language = trim($pref_language);
}

$_SESSION['language'] = $pref_language_changed;

if (isset ($_SESSION['language']) ){

    $pref_language = $pref_language_changed;

}...

然后是一些用于 mainwrapper 的 html 页脚:

if ($pref_language === "af" OR $pref_language === "en"{
    $footer = "footer1";
    }else{
        $footer = "footer2";
    }

include_once "../scripts/".$footer.".php";

页脚本身是:

        ... <ul class="flag">
                <li id="'.$language_flag.'">
                    <ul class="drop_down">
                        <form action="'.$_SERVER['PHP_SELF'].'" method="post">
                            <a href="/foo"><li id="one"><div>language1</div></li></a>
                            <a href="/bar"><li id="two"><div>language2</div></li></a>
                        </form>
                    </ul>
                </li>
             </ul>...
<!--Footer -->';    


if (isset($_POST['one'])){
    $_SESSION['language'] = "language1";
    }
if (isset($_POST['two'])){
    $_SESSION['language'] = "language2";
    }
?>

这就是我所有页面的基础。

如果有人可以告诉我如何使用会话,我将不胜感激。

多谢。

4

2 回答 2

1

试试这个

<ul class="drop_down">
    <form action="'.$_SERVER['PHP_SELF'].'" method="post">
        <li><input type="submit" name="one" value="language1"></li>
        <li id="two"><input type="submit" name="one" value="language2"></li>
    </form>
 </ul>

此外,当您想链接<li> 使用时

<li><a href="/foo">Link</a></li>

不要在外部使用 a href<li>

于 2012-12-17T20:58:36.477 回答
0

在通过 POST 提交语言后,您必须重新加载页面,因为您在加载新语言之前阅读它!其他选项是在实际检查之前移动设置会话的代码。

杰弗里斯的回答也是对的。您的原始代码根本没有发送 lang。

于 2012-12-17T21:19:03.720 回答