如何在URL(HTML GET)上保留参数而不复制它们?

时间:2015-08-19 14:17:59

标签: php html forms get url-parameters

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

按钮如下:

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

选择如下:

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

当我点击一个按钮时,它会显示该表格(并且会在URL中显示&#39; table = x&#39;等参数)。但是当我改变语言时,只有#lang = y&#39;参数显示,&#39;表&#39;参数消失。

我尝试了解决方案hereherehere,但它无效。隐藏的参数添加到现有按钮,我得到两个表&#39; 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>

1 个答案:

答案 0 :(得分: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元素还具有指向它们所属的表单的表单属性,因此这应该起作用。只需在JavaScript中找到调用JavaScript函数的输入的父级即可。也可以在这里使用最近的。玩它。

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

然后使用PHP解释$ _GET ['table'] AND $ _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;
    }

    ?>

类似的东西。

希望它有所帮助!