2017-06-17 13 views
0

私はPHPを使い始めていますので、どうしたらいいのか分かりません。関数を使って$ _SESSION varの値を更新しようとしていますが、機能していません。すべての まず、私がセッションを開始し、それは私のheader.phpの中で「未定義」であればセッションにデフォルト値を設定します。

<?php 
    session_start(); 
    if (!isset($_SESSION["locale"])) { 
     $_SESSION["locale"] = 'pt_BR'; 
    } 
    ?> 

それから私は私のPHPの関数を呼び出すいくつかのAJAXを持っています。 PHPファイル内の後

$('#change_locale_br').click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "i18n/i18n_functions.php", 
     data: { action: "changelocale", new_locale: "pt_BR" }, 
     success: function() { 
     } 
    }); 
    }); 

、私は次のコードを持っている:

<?php 
    function changelocale($l) { 
     $_SESSION["locale"] = $l; 
    } 

    if(isset($_POST['action']) && $_POST['action'] == 'changelocale'){ 
     $l = $_POST['new_locale']; 
     changelocale($l); 
    } 
    ?> 

だからchangelocale機能が異なる値(語pt_BR、ESおよびなど)と呼ばれているが、呼び出された後、それはdoesnのを$ _SESSION ["locale"]値を実際に変更しません。

私は多くの研究を行い、ここでの提案やPHPのマニュアルページでは何も提案されていません。この場合、何ができるのか誰かが知っていますか?

ありがとうございます。

+0

投稿を編集しました。 'session_start()'を試しましたか? [エラー報告を有効にする](https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display)後にエラーメッセージが表示されますか? – FrankerZ

+0

はい、header.php(これは他のページにも含まれています)で行いました。私はエラーメッセージを受け取っていません。 –

+0

'print_r($ _ SESSION)'を実行するとどうなりますか?それを設定する前後に印刷し、あなたの投稿応答(JavaScriptから)に更新された値が表示されていることを確認してください。 – FrankerZ

答えて

0

私はsession_write_close();を呼び出しました。私は、header.phpにセッションのデフォルト値を設定した直後に、セッションデータが "ロックされていない"ことを保証するために使用されます。

<?php 
    ini_set('session.cookie_domain', 'localhost'); 
    if(!isset($_SESSION)) session_start(); 

    if (!isset($_SESSION["locale"])) { 
     $_SESSION["locale"] = 'pt_BR'; 
    } 
    session_write_close(); 
    ?> 

はその後、私のchangelocale.phpに私がsession_start()と呼ばれ、最後にsession_write_close()と呼ばれます。これは今のようです:

<?php 
    if(!isset($_SESSION)) session_start(); 

    function changelocale($new_locale) { 
     $_SESSION["locale"] = $new_locale; 
    } 

    if(isset($_POST['action']) && $_POST['action'] == 'changelocale'){ 
     $l = $_POST['new_locale']; 
     changelocale($l); 
    } 
    session_write_close(); 
    ?> 
3

$_SESSIONの情報を設定またはアクセスするページの上部にsession_start()を含める必要があります。

+0

私はheader.phpに追加しました。それを他の場所に含める必要がありますか? –

+0

ヘッダーの場合。PHPはあなたがアクセスしている各ページに/ '$ _SESSION'変数を設定しています(実際に' $ _SESSION'変数を使用する前に)。 – FrankerZ

+0

はい、そうです。ヘッダーはすべてのページに含まれています。私はあなたがそれをより良く見ることができるように質問を編集しました。 –

関連する問題