【问题标题】:How do I keep the parameters on the URL (HTML GET) without duplicating them?如何保留 URL (HTML GET) 上的参数而不复制它们?
【发布时间】:2015-11-12 21:43:36
【问题描述】:

我正在尝试在 HTML 中实现一个简单的多语言表单。该表单具有在 div 中打开数据库表的按钮,并且还具有选择语言的选项。

按钮如下:

<button type='submit' name='table' value='x'>

选择是这样的:

<select name='lang' onchange='changeLang()'>
...
function changeLang() {
    document.getElementById('form1').submit();
}

当我单击一个按钮时,它会显示表格(并且 URL 中会显示一个像“table=x”这样的参数)。但是当我更改语言时,只显示 'lang=y' 参数,'table' 参数消失了。

我尝试了hereherehere 的解决方案,但它不起作用。隐藏参数添加到现有按钮,我在 URL 上获得两个“表”参数。如何在不重复的情况下保留 URL 上的所有参数?

编辑:我试图在这条线上做点什么:

<?php session_start();
$erroConn = include(".../dbfile.php");
if (isset($_GET['lang'])) { // language
    $lang = $_GET['lang'];
    leDic($lang);
} else {
    $lang = NULL;
}
if (isset($_GET['table'])) { // table
    $table = $_GET['table'];
} else {
    $table = NULL;
}
if (isset($_GET['people'])) { // people
    $people = $_GET['people'];
} else {
    $people = NULL;
}
?>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>Example</title>
<script type='text/javascript'>
function changeLang() {
    document.getElementById('form1').submit();
}
</script>
</head>
<body>
    <form id="form1" name="form1" method="get" action="">
        <h1>titulo</h1>
        <?php
            if (is_null($table)) {
                echo "<button type='submit' name='table' value='0'>tabelas</button>"; # only shows the button if not yet pressed
            } else {
                echo "<input type='hidden' name='table' value='$table' />"; # if pressed keep the variable (but is doubling it?)
                $people = NULL;
            }
            if (is_null($people)) {
                echo "<button type='submit' name='people' value='0'>people</button><BR>";
            } else {
                echo "<input type='hidden' name='people' value='$people' />"; # if pressed keep the variable (but is doubling it?)
                $table = NULL;
            }
            echo "<input type='text' name='msg' />";
            echo "<input type='submit' value='ok' />";
            $dir1 = glob('./coisas_txt*'); # all languages available as simple txt (key=value)
            echo "<div id='langs' class='langs'>"; # class to make the language bar float
            echo "<select name='lang' onchange='changeLang()'>";
            foreach ($dir1 as $fname) {
                $sigla = mb_substr($fname,-2,NULL,'UTF-8');
                if ($sigla == $lang) {
                    echo "<option value='$sigla' selected>$sigla</option>";
                } else {
                    echo "<option value='$sigla'>$sigla</option>";
                }
            }
        ?>
        </select>
        </div>
        </div>
        <div id='table'> <!-- where the table goes -->
            <?php
            if ($table !== NULL) {

            }
            ?>
        </div>
    </form>
</body>
</html>

【问题讨论】:

  • 可能是你有一个名字table和id form1的按钮,检查你的代码

标签: php html forms get url-parameters


【解决方案1】:

隐藏字段应该可以工作。

对于每个表都有一个表单元素,其中包含表唯一 ID 的隐藏输入和语言的选择。 例如:

<form id="form1" name="form1">
<input type="hidden" id="table_1" name="table_1" value="x" />
<select id="lang" name='lang' onchange='changeLang()'>    
</form>

<form id="form2" name="form2">
<input type="hidden" id="table_2" name="table_2" value="x" />
<select id="lang" name='lang' onchange='changeLang()'>    
</form>

并让 changeLang 函数仅提交它所在的表单。 作为输入的原生 DOM 元素也有一个 form 属性,该属性指向它们所属的表单,因此这应该可以工作。只需在您的 JavaScript 中找到调用 JavaScript 函数的输入的父级。也可以在这里使用最接近的。玩它。

function changeLang() {
var form = ______.form;
form.submit();
}

然后使用 PHP 解释 $_GET['table'] 和 $_GET['lang'] 变量来决定显示什么。 像这样:

    <?php
    //switch based on language...
    switch($_GET['lang']){
    case 'lang1':
      //display table_1 if we should
      if($_GET['table_1']){
      ?>
      <!-- table_1 display in lang1 HTML here. -->
      <?php
      }
      //display table_2 if we should
      if($_GET['table_2']){
      ?>
      <!-- table_2 display in lang1 HTML here. -->
      <?php
      }
      break;
    case 'lang2':
         //display table_1 if we should
      if($_GET['table_1']){
      ?>
      <!-- table_1 display in lang2 HTML here. -->
      <?php
      }
      //display table_2 if we should
      if($_GET['table_2']){
      ?>
      <!-- table_2 display in lang2 HTML here. -->
      <?php
      }
      break;
    default
          //display table_1 if we should
      if($_GET['table_1']){
      ?>
      <!-- table_1 display in default lang HTML here. -->
      <?php
      }
      //display table_2 if we should
      if($_GET['table_2']){
      ?>
      <!-- table_2 display in default lang HTML here. -->
      <?php
      }
      break;
    }

    ?>

类似的东西。

希望对你有帮助!

【讨论】:

  • 必须添加语言切换。忘了那一点。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2015-10-14
相关资源
最近更新 更多