0

こんにちは、言語設定にセッションを使用したいと思います。

だから私は 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;
}

セッションの使用中に変数を設定および変更する正しい方法であるかどうか、誰かが教えてくれるとうれしいです。

どうもありがとう。

アップデート:

答えに関しては、ユーザーのオラフ・ダイエットの方法を使用しました。

だから私はそのようにしました:

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';
                }



}
4

2 に答える 2

1

Web サーバーのログを調べると、具体的なエラー メッセージが表示されます。

私は推測するだろう

if (isset($_SESSION['pref_lang'])){
    $_SESSION['pref_lang'] = $pref_language;
}

$pref_language設定されていません。に変更してみてください

if (isset($_SESSION['pref_lang'])){
    if (isset($pref_language))
        $_SESSION['pref_lang'] = $pref_language;
    else
        echo 'pref_language is not set';
}

エラーがなくなったかどうかを確認します。それ以外の場合は、サーバー ログを調べてください。

isset($_SESSION['pref_lang'])if 部分ですでにチェックインしているため、else 部分を再度チェックインする必要はありません。

session_start();
...
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{ 
    //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';
        }
    }
于 2012-12-18T13:22:12.490 に答える
0

あなたはチェックできませんif (isset($_SESSION['pref_lang']))

しかし、そのような投稿で確認する必要があります

  if (isset($_POST['pref_lang']))

   {
     $_SESSION['pref_lang']) = $_POST['pref_lang']) ;  // HERE you define the session variable
   }

そして $_SESSION['pref_lang'])、あなたのコードで使用できます

  • post/get 送信後のセッション ストア データなので、post/get 変数からセッションを定義します。
于 2012-12-18T13:23:03.403 に答える