2016-12-21 12 views
0

私は簡単な多言語サポートのための基本的なスクリプトを設定しました。 私の問題は、ユーザーが手動でURLに自分のGETパラメータを入力するとエラーが表示されることです(もちろん、どこにも正しく表示されないためです)。たとえば、私は 'en'と 'el'の配列を設定しましたが、この言語が私の配列にないので、ユーザーが手動で 'de'をタイプすると、定義されていないインデックスのエラーページが表示されます。私はデフォルトの言語が選択された状態で、ユーザをindex.phpにリダイレクトしたい。ここでGET値のパラメータを配列のものに制限するにはどうすればよいですか?

は私のindex.phpはここ

<?php 

include('lang.php'); 
set_lang(); 
$current = $_SESSION['lang_ses']; 
?> 
<html> 
<body> 
<div style="height:100px; background-color:red; color:black;"> 
    <a href="index.php?lang=en">ENG</a> 
    <a href="index.php?lang=el">EL</a> 
</div> 
<div style="height:400px; background-color:gray; color:white;"> 
    <h2><?php echo $langarray[$current]['service1']; ?></h2> 
    <h2><?php echo $langarray[$current]['service2']; ?></h2> 
    <h2><?php echo $langarray[$current]['service3']; ?></h2> 
</div> 
</body> 
</html> 

である私のスクリプトlang.php

<?php 

function set_lang() { 

session_start(); // Starting php session 

$default = 'en'; // Here you can set with which language the website should start. 

if(!isset($_SESSION['lang_ses'])) { // Setting up chosen language or load default language 
    if(isset($_COOKIE['lang'])) { 
     $_SESSION['lang_ses'] = $_COOKIE['lang']; 
    } else { 
     $_SESSION['lang_ses'] = $default; 
    } 
} 

if(isset($_GET['lang'])) { 
    $_SESSION['lang_ses']=$_GET['lang']; 
    setcookie('lang',$_GET['lang'],time()+24*3600); // writing cookie 
} 
} 

$langarray = array(
    'en'=>array(
     'service1'=>'Health', 
     'service2'=>'Beauty', 
     'service3'=>'Strength' 
     ), 
    'el'=>array(
     'service1'=>'Υγεία', 
     'service2'=>'Ομορφιά', 
     'service3'=>'Δύναμη' 
     ) 
    ); 
?> 
+0

(isset($ _ GET)&&($ _GET ['lang'] == 'es' || $ _GET ['lang'] == 'en'){ } else {//ここであなたのコードを実行してください} –

答えて

0
if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7 
    header('Location: /index.php'); 
} 
として、以下の

もう1つの方法は、tのデフォルト値を設定することですset_lang()機能を実行する前に、彼のスクリプトの上に彼$_SESSION['lang_ses']。あなたの関数

if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7 
    $defaultLangCode = $_SESSION['lang_ses']; 
} else { 
    $defaultLangCode = $_GET['lang']; 
} 

内でこのような比較

$_SESSION['lang_ses'] = "en"; 
set_lang(); 

使用... $defaultLangCodeを使用してスクリプトを続行するには、この方法は、リダイレクトのための必要はありません。 my.site/deあなたの英語ページのデフォルト言語を使用します。

+0

PHP 7を使用していない場合はどうすればいいですか?回答ありがとうございます! –

+0

@EliasL '[" en "、" el "]' use 'array(" en "、" el " ")' –

+0

それがうまくいった!ありがとう! –

0

は "lang.php" ファイル内の状態を確認され

$Arr_languages=array("en","el"); 
if (!(in_array($_GET['lang'],$Arr_languages)) 
    header('Location: index.php');exit; 
else { 
    //your process; 
} 
関連する問題