【问题标题】:Add second $_GET parameter to the first without beeing redirect/ Change URL + simultaneously the <option>将第二个 $_GET 参数添加到第一个而不需要重定向/更改 URL + 同时 <option>
【发布时间】:2014-02-27 14:29:27
【问题描述】:

第一个问题

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

 $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 参数以重定向到页面的当前语言。 如果出现这种情况,当页面切换到另一种语言时,如何更改语言切换器?

【问题讨论】:

标签: php redirect get multilingual


【解决方案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>

【讨论】:

  • 仍然被重定向到索引页面。 :-( 此外,语言切换器仅第二次更改,但语言显然正在更改。我认为它不起作用,因为 request_uri 始终是索引页面,而不是其他包含的页面
  • 尝试添加 $_GET["page"];在行动中。它可以解决问题吗?语言切换器仅第二次更改是什么意思?
  • 现在我得到一个全局 $_GET['page'] 的未定义错误,因为包含切换菜单。但为什么?我以为 $_GET 是一个全局变量?
  • 嗯,如果你使用变量 $page 而不是 $_GET['page']
  • 对于语言切换器:我必须选择该选项两次才能显示语言。但是语言在变,只是切换器的问题。我应该在哪里写变量 $page?非常感谢您的帮助!
【解决方案2】:

如果没有页面刷新/重定向,this.form.submit() 将无法工作。

如果我正确理解了您的问题:

你需要开始使用一页JS框架

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

编辑

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

编辑 尝试更改表单action 态度。把当前文件名放在那里

编辑 更安全的方法是拥有一个包含实际存在且安全的页面的数组,并在表单提交后针对该数组检查 $_GET 参数

【讨论】:

  • 如果我在语言切换器中使用 $_POST 而不是 $_GET,我的代码可以完美运行。用于更改语言的 Js 对 SEO 不利。 URL 应该是唯一的。这就是我尝试在语言切换器中使用 $_GET 的原因。你能告诉我代码中有什么不安全的地方吗?
  • 已经在“动作”中使用 REQUEST_URI 进行了尝试。仍然没有运气。也许一些更具体的答案,一些代码?提前致谢!
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2013-05-31
相关资源
最近更新 更多