如何将GET值的参数限制为数组中的参数?

时间:2016-12-21 07:38:12

标签: php arrays get multilingual

我已经设置了一个简单的多语言支持的基本脚本。 我的问题是,如果用户在网址上手动输入他自己的GET参数,它会显示错误(当然因为它没有正确引导)。例如,我为' en'设置了一个数组。和' el'但如果用户手动输入' de'由于此语言不在我的数组中,因此将导致未定义索引的错误页面。我想将用户重定向到index.php并选择默认语言。

这是我的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'=>'Δύναμη'
        )   
    );
?>  

2 个答案:

答案 0 :(得分:0)

检查“lang.php”文件中的条件如下

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

答案 1 :(得分:0)

if (!in_array($_GET['lang'], ["en","el"])) { // PHP 7
    header('Location: /index.php');
}

另一种方法是在运行$_SESSION['lang_ses']函数之前在脚本之上设置set_lang()的默认值。

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

在你的函数中使用这样的比较

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

...使用$defaultLangCode继续您的脚本,这样就不需要重定向了。您将拥有my.site/de英文页面的默认语言。