为什么使用'hidden'和& # 39;按钮# 39;输入相同的变量

Why do I get 2 equal html GET parameters when using 'hidden' and 'button' input for same variable?

本文关键字:变量 输入 hidden 为什么 按钮      更新时间:2023-09-26

我想在一个网站上有三种语言-两个按钮用于非选择的语言,只是一个文本用于使用的语言-加上两个按钮,显示不同的数据在一个div(表从数据库,不在这里显示)。

一切都是"button type='submit'…"我读到我"只需要"添加一个"input type='hidden'…",但是我在URL上得到一个重复的'lang'参数,因为没有选择语言的可点击按钮。

请问做这件事的正确方法是什么?

代码如下,右上角有浮动语言条:

<?php session_start();
// connects to the databse
$erroConn = include(".../connector.php");
// converts $_GETs to $php_vars
if (isset($_GET['lang'])) { // language
    $lang = $_GET['lang'];
    leDic($lang); // reads the apropriate language file
} else {
    $lang = NULL;
}
if (isset($_GET['table'])) { // table
    $table = $_GET['table'];
} else {
    $table = NULL;
}
?>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <title>Example</title>
    <style>
        .langs { /* makes the language bar float */
            background-color: #90A090;
            position:absolute;
            right:10;
            top:10;
            font-size: 0.75em; /* 10px/16px = 0.625em */
        }
    </style>
</head>
<body>
    <form id="form1" name="form1" method="get" action="">
    <?php
    echo "<h1>".txt('titulo')."</h1>"; // draws the appropriate phrase from the language file
// if don't have a table selected yet
    if (is_null($table)) {
// shows both buttons
        echo "<button type='submit' name='table' value='A'>table A</button><BR>";
        echo "<button type='submit' name='table' value='B'>table B</button><BR>";
    } else {
// if already have a table selected, shows only the others as buttons
        switch($table) {
            case 'A':
                echo "table A<BR>";
                echo "<button type='submit' name='table' value='B'>table B</button><BR>";
            break;
            case 'B':
                echo "<button type='submit' name='table' value='A'>table A</button><BR>";
                echo "table B<BR>";
            break;
        }
    }
// constructs the language bar inside the div 'langs'
    $dir1 = glob('./coisas_txt*'); # all languages available
    echo "<div id='langs' class='langs'>";
    foreach ($dir1 as $fname) {
        $sigla = mb_substr($fname,-2,NULL,'UTF-8');
// draws a darker button for the selected language
        if ($sigla == $lang) {
            echo "<button type='submit' name='lang' value='$sigla'><strong>$sigla</strong></button>";
        } else {
            echo "<button type='submit' name='lang' value='$sigla'>$sigla</button>";
        }
    }
    echo "</div>";
    echo "<div id='tabela'>";
    if (!is_null($table)) {
// shows the data, if any
        switch($table) {
            case 'A':
                echo 'tabela A';
            break;
            case 'B':
                echo 'tabela B';
            break;
        }
    }
    echo "</div>";
    ?>
    </form>
</body>
</html>

谢谢!

下面是一个基本语言选择和会话存储的粗略示例

<?php // lang.php
  session_start();
  $validLanguages = array('en','jp','ru');
  // If found on URL, set the session
  if(isset($_GET['lang']) and !empty($_GET['lang']) and in_array($_GET['lang'],$validLanguages))
  {
    $lang = $_SESSION['lang'] = $_GET['lang'];
  }
  // Read from session
  elseif(isset($_SESSION['lang']))
  {
    $lang = $_SESSION['lang'];
  }
  // Default
  else
  {
    $lang = 'en';
  }
?>
<form method="get">
  <input type="submit" name="lang" value="en" <?php if($lang == 'en'){ ?>disabled<?php }?>>
  <input type="submit" name="lang" value="jp" <?php if($lang == 'jp'){ ?>disabled<?php }?>>
  <input type="submit" name="lang" value="ru" <?php if($lang == 'ru'){ ?>disabled<?php }?>>
  <input type="submit" name="lang" value="es" <?php if($lang == 'es'){ ?>disabled<?php }?>>
</form>
<a href="lang.php">Some Page link</a> | <a href="lang.php">Another Page link</a>

我所需要的就是两个独立的表单,其中一个表单的按钮作为隐藏输入,另一个表单的按钮作为隐藏输入,反之亦然。

下面是代码,以防有人需要它:

<?php // index.php
session_start();
$errorConn = include(".../dbfile.php");
// If found on URL, set the session
if(isset($_GET['lang']) and !empty($_GET['lang'])) { //and in_array($_GET['lang'],$validLanguages)
    $lang = $_SESSION['lang'] = $_GET['lang'];
} elseif(isset($_SESSION['lang'])) { // Read from session
    $lang = $_SESSION['lang'];
} else { // Default
    $lang = $_SESSION['lang'] = 'BR';
}
leDic($lang);
if(isset($_GET['table']) and !empty($_GET['table'])) { //and in_array($_GET['lang'],$validLanguages)
    $table = $_SESSION['table'] = $_GET['table'];
} elseif(isset($_SESSION['table'])) { // Read from session
    $table = $_SESSION['table'];
} else { // Default
    $table = $_SESSION['table'] = -1;
}
?>
<html lang='BR'>
<head>
    <meta charset='UTF-8'>
    <title>Example</title>
    <style>
        .langs {
            background-color: #90A090;
            position:absolute;
            right:10;
            top:10;
            font-size: 0.75em; /* 10px/16px = 0.625em */
        }
    </style>
</head>
<body>
    <form id="form1" name="form1" method="get" action="">
    <?php
    echo "<h1>".txt('titulo')."</h1>";
    echo "<input type='hidden' name='lang' value='$lang' />";
    echo "<button type='submit' name='table' value='A'>table A</button><BR>";
    echo "<button type='submit' name='table' value='B'>table B</button><BR>";
    echo "<div id='tabela'>";
    if (!is_null($table)) {
        switch($table) {
            case 'A':
                echo 'tabela A';
            break;
            case 'B':
                echo 'tabela B';
            break;
        }
    }
    echo "</div>";
    ?>
    </form>
    <form id="form2" name="form2" method="get" action="">
    <?php
    $dir1 = glob('./coisas_txt*'); # all languages available
    echo "<input type='hidden' name='table' value='$table' />";
    echo "<div id='langs' class='langs'>";
    foreach ($dir1 as $fname) {
        $sigla = mb_substr($fname,-2,NULL,'UTF-8');
        if ($sigla == $lang) {
            echo "<button type='submit' name='lang' value='$sigla'><strong>$sigla</strong></button>";
        } else {
            echo "<button type='submit' name='lang' value='$sigla'>$sigla</button>";
        }
    }
    echo "</div>";
    ?>
    </form>
</body>
</html>