【发布时间】:2012-12-18 23:04:57
【问题描述】:
您好,我想使用会话来设置语言设置。
所以我会从 http_language_accept 获得首选语言:
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);
}
现在我想检查是否已经保存了之前访问保存的设置:
if (isset($_SESSION['pref_lang'])){
$_SESSION['pref_lang'] = $pref_language;
}
这是第一个问题。调用页面时会显示错误500。
我还想在发送 $_POST 时更改 $pref_language:
所以我有这个代码:
$one = $_POST['one'];
if(isset($_SESSION['pref_lang']) AND isset($one) ){
$_SESSION['pref_lang'] = 'one';
$_SESSION['pref_lang'] = $pref_language;
}
如果有人能告诉我这是否是在使用会话时设置和更改变量的正确方法,那就太好了。
非常感谢。
更新:
关于答案,我使用了用户 olaf Dietsche 的方法。
所以我就这样做了:
if (!isset($_SESSION['pref_lang'])){ //if the session does not exist
if (isset($pref_language)){ //but the given $pref_language from above
$_SESSION['pref_lang'] = $pref_language; //the session will be registered with the value of $pref_language
}
}else{
if (isset($_SESSION['pref_lang'])){ //in case of that an existing session from a previous visit
if (isset($pref_language)){ //and the pref_language is set from above
$_SESSION['pref_lang'] = $pref_language; //the session will be given a variable
if (isset($one)){ // this will be the problem now when isset $_post
$pref_language = 'one'; //$pref_language or even session will get a new value
}
if (isset($two)){
$pref_language = 'two';
}
}
【问题讨论】:
-
it will display error 500检查您的错误日志以查看消息。 -
错误 500 不太可能是由会话引起的。它可能是一些服务器错误,您可以先检查那里是否存在 .htaccess。它可能有问题。
-
不会显示错误日志。我使用了error_reporting(E_ALL);但不会定向..会说网站编码错误。
-
@techie_28 PHP 错误可能会在某些设置中导致 500 错误。我的大学运行 suEXEC 的服务器在 PHP 错误时会报错 500。
标签: php html session session-variables