你好,我有一个如何使用会话的问题。
我想更改网站的语言。所以语言设置的逻辑如下:
在调用我的网站时,如果有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;
}...
后面是一些html for mainwrapper the footer:
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";
}
?>
这就是我所有网页的构建。
如果有人可以告诉我如何使用会话,我真的很感激。
非常感谢。
答案 0 :(得分: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>
请勿在{{1}}
之外使用a href答案 1 :(得分:0)
您必须在通过POST提交lang后重新登录页面,因为您在加载之前阅读了新的lang!其他选项是在实际检查之前移动设置会话的代码。
杰弗里斯的回答也是对的。您的原始代码根本没有发送lang。