繁体   English   中英

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

[英]How can I limit the parameters of the GET values to the ones in my array?

我已经为简单的多语言支持设置了基本脚本。 我的问题是,如果用户在URL上手动键入自己的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'=>'Δύναμη'
        )   
    );
?>  

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

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

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

$_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您的英语页面将使用默认语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM