2015-02-24 147 views
0

我有兩個標誌,您可以點擊更改語言。 但奇怪的是,它的工作原理,但我必須點擊兩次才能保持語言。 (如果我轉到其他頁面,會話變量也消失)PHP語言選擇

就像我單擊標誌上的一次,它不會保留在會話變量中。

<?php 
      if(!isset($_SESSION['lang'])) 
      { 
       $_SESSION['lang'] = "NL"; 
      } 

      if($_SESSION['lang'] === "EN") 
      { 
      ?> 
       <div class="language-selector"> 
        <a href="page.php?id=1&lang=NL"> 
         <img src="img/nlnon.png" onmouseover="this.src='img/nlact.png'" onmouseout="this.src='img/nlnon.png'"/> 
        </a> 
        <a href="page.php?id=1&lang=EN"> 
         <img src="img/enact.png" onmouseover="this.src='img/enact.png'" onmouseout="this.src='img/enact.png'"/> 
        </a> 
       </div> 
      <?php 
      } 
      if($_SESSION['lang'] === "NL") 
      { 
      ?> 
       <div class="language-selector"> 
        <a href="page.php?id=1&lang=NL"> 
         <img src="img/nlact.png" onmouseover="this.src='img/nlact.png'" onmouseout="this.src='img/nlact.png'"/> 
        </a> 
        <a href="page.php?id=1&lang=EN"> 
         <img src="img/ennon.png" onmouseover="this.src='img/enact.png'" onmouseout="this.src='img/ennon.png'"/> 
        </a> 
       </div> 
      <?php 
      } 
      ?> 

這是爲了顯示正確的語言,每個頁面(僅一個現在)

<?php if($page_id == 1){ 

     if(isset($_GET['lang'])) 
     { 
      $language = $_GET['lang']; 
      if($language == "EN") 
      { 
       $_SESSION['lang'] = "EN"; 
       include('includes/EN/onskantoorEN.php'); 
      } 
      else 
      { 
       $_SESSION['lang'] = "NL"; 
       include('includes/NL/onskantoorNL.php'); 
      } 
     } 
     else 
     { 
      $_SESSION['lang'] = "NL"; 
      include('includes/NL/onskantoorNL.php'); 
     } 

    ?> 

概括起來代碼:

我想點擊<img src="img/nlnon.png>

<img src="img/nlennon.png>

並讓它立即謹慎地顯示正確的語言,而不是點擊兩次。 我已經在鏈接中包裝了會話變量,所以我不確定發生了什麼問題。

+1

表示會話已經啓動的所有網頁? – 2015-02-24 13:17:34

+0

是的,我把session_start()放在頁面上方。 – Jeak 2015-02-24 13:20:33

+0

代碼執行的順序是?在顯示語言鏈接的代碼(第一個代碼段)之後,您可能會執行用於分配正確會話的代碼(您發佈的第二個代碼段)。 – 2015-02-24 13:21:30

回答

0

從您的評論中,您的第一個片段正在執行,然後您正確地分配您的會話。

嘗試在代碼之後包含header.php文件,並在會話變量中評估和分配語言。

您還可以在header.php文件中包含用於初始化語言的適當會話變量的代碼。只要確保它首先被執行。

+0

謝謝,你是對的;)。 – Jeak 2015-02-24 13:30:18

0

我認爲第二代碼片段應該是這樣的:

<?php 
    if ($page_id == 1) { 
     if (isset($_GET['lang'])) { 
      $language = $_GET['lang']; 
      $_SESSION['lang'] = $language; // todo: validate the GET parameter 
     } else { 
      $language = $_SESSION['lang']; 
     } 

     if ($language == "EN") { 
      include('includes/EN/onskantoorEN.php'); 
     } else { 
      $_SESSION['lang'] = "NL"; 
      include('includes/NL/onskantoorNL.php'); 
     } 
    } 
?>