我试图在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;参数消失。
我尝试了解决方案here,here和here,但它无效。隐藏的参数添加到现有按钮,我得到两个表&#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>
答案 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;
}
?>
类似的东西。
希望它有所帮助!