将第二个$ _GET参数添加到第一个,而不是重定向/更改URL +同时<option> </option>

时间:2014-02-27 14:29:28

标签: php redirect get multilingual

第一个问题

我有一个动态网站,页面以下列方式动态地包含在索引页面中:

 $page = (empty($_GET["page"])) ? "home" : $_GET["page"];
 $page = "folder/".basename($page).".php";

 if (is_readable($page)) { 
 include($page); 
 } else {
   echo 'Site doesn't exist!'; 
 exit;
 }

但是还有一个语言菜单,用另一个$ _GET参数更改语言:

<form name="switch" id="lang" action="" method="get">
<select name="multilingual" onchange="this.form.submit()">
<option value="lang_it">Italian</option>
<option value="lang_de" >German</option>
<option value="lang_en">English</option>
</select>
</form>

if(!isset ($_COOKIE['multilingual'])){
$lingua = null; 
}else{ 
$lingua = $_COOKIE['multilingual'];
}

if(isset($_GET['multilingual'])){
$lingua = $_GET['multilingual'];
$_SESSION['multilingual'] = $lingua;
setcookie('multilingual', $lingua, time() + (3600 * 24 * 30));
}
switch($lingua){
case 'lang_it': include_once('file_it.php');  break;
case 'lang_de': include_once('file_de.php');  break;
case 'lang_en': include_once('file_en.php');  break;
default: include_once('file_it.php'); break;
}

第二个$ _GET参数传递给URL,但在页面上它会将我总是重定向到默认主页。

如何在不重定向到主页的情况下更改语言? 换句话说,要更改语言并保持在同一页面上吗?

第二个问题

是否可以更改URL中的lang_it,lang_de,lang_en参数以重定向到页面的当前语言。 如果发生这种情况,如何在页面更改为其他语言时更改语言切换器?

2 个答案:

答案 0 :(得分:1)

<form name="switch" id="lang" action="<?php echo $page; ?>" method="get">
<select name="multilingual" onchange="this.form.submit()">
<option value="lang_it" <?php if($_COOKIE['multilingual']=='lang_it') echo "selected='selected'" ?>>Italian</option>
<option value="lang_de" <?php if($_COOKIE['multilingual']=='lang_de') echo "selected='selected'" ?>>German</option>
<option value="lang_en"<?php if($_COOKIE['multilingual']=='lang_en') echo "selected='selected'" ?>>English</option>
</select>
</form>

答案 1 :(得分:0)

this.form.submit()无法在没有页面刷新/重定向的情况下工作。

如果我理解你的问题:

您需要开始使用单页JS框架

或通过(再次)JS(通过json config populate / change / mutate DOM内容加载laguage vars)在后台动态加载语言变量

修改

忘了提及:小心你的“动态”网站。你这样做的方式非常不安全,安全明智。

修改 尝试更改表单action attibute。放在当前文件名

修改 更安全的方法是使一个数组具有实际存在且安全的页面,并在表单提交后检查针对该数组的$ _GET参数