如何在PHP中从下拉列表中显示MySQL表


How to Display MySQL Table from Dropdown List in PHP

这看起来很简单,但就我的一生而言,我无法理解。基本上,我有以下HTML下拉列表:

<html>
<head>
</head>
<center>
<form method="post" action="myfile.php">
<table>
Select a table to display:
<select name = "list" size = "1">
<option value = "t1">TABLE 1</option>
<option value = "t2">TABLE 2</option>
<option value = "t3">TABLE 3</option>
<option value = "t4">TABLE 4</option>
<option value = "t5">TABLE 5</option>
</select>
<tr><colspan = "2">
<!- <p align = "center" ->
<input type="submit" value="Display Selected Table">
</td>
</tr>
</table>
</form>
</center>
</html>

我想做的是让用户从下拉列表中列出的5个表中选择一个,然后单击"显示"。这样做后,系统将显示连接的MySQL数据库中相应表的完整数据。

我的PHP文件实际上是一个骨架,但这就是我目前所拥有的:

<?php // myfile.php
    require_once 'login.php'; 
    $conn = new mysqli($hostname, $username, $password, $database); 
    if ($conn->connect_error) die("Could not connect to database."); 
    // missing logic here
?>

我知道应该采用SELECT * FROM TABLE查询,其中TABLE是用户从下拉列表中选择的任何内容。我只是不确定如何在我的PHP中做到这一点。我已经尝试了很多次,但考虑到我刚刚开始学习PHP,我的尝试都没有意义。

澄清:

我最初想以表格的形式显示数据,但我的问题中没有包括这一点,因为我已经知道如何做到这一点了。问题是从下拉列表中读取用户输入,我现在明白了。

缺少的逻辑是,您的PHP脚本需要获得一种访问用户输入的方法(关于已选择的表)。实际上,您可以将HTML和PHP保持在同一页面上,但仅在检测到用户输入时执行查询(即,在<form>元素上使用GET方法,然后侦听$_GET[]对象)。

一些实施注意事项:

  • 即使在使用MySQLi或PDO时,准备好的语句也只能用于查询中的VALUES参数。无法将变量注入为FROM [tableName]参数准备的语句中
  • 与上述要点相关,您必须手动创建并维护所选数据库中的表白名单。对照这个已知的白名单,交叉检查(所选兴趣表的)用户输入。如果交叉检查失败,请不要执行查询

所有这些代码实际上都可以转到同一个文件,比如search.php,只需将表单操作重定向回其自身即可。但是,如果没有关于数据库结构的进一步信息,我无法建议您如何显示数据。

<html>
<head>
</head>
<form method="get" action="search.php">
<table>
Select a table to display:
<select name = "list" size = "1">
<option value = "t1">TABLE 1</option>
<option value = "t2">TABLE 2</option>
<option value = "t3">TABLE 3</option>
<option value = "t4">TABLE 4</option>
<option value = "t5">TABLE 5</option>
</select>
<tr><colspan = "2">
<input type="submit" value="Display Selected Table">
</td>
</tr>
</table>
</form>
<?php
    if(isset($_GET['list']) && !empty($_GET['list']) {
        require_once('login.php');
        $conn = new mysqli($hostname, $username, $password, $database); 
        if ($conn->connect_error) die("Could not connect to database."); 
        // Perform DB query using value of $_GET['list']
        // Have a manual white list of TABLES you want to accept
        $table = $_GET['list'];
        $tables = ['t1','t2','t3','t4','t5']; 
        if(in_array($table, $tables)) {
            // Perform query
            if(!$result = $conn->query('SELECT * FROM '.$table.' WHERE 1=1')) {
                die('Unable to perform query.');
            } else {
                // Loop through returned rows
                while($row = $result->fetch_assoc()) {
                    // Do stuff here
                }
                // Free memory
                $result->free();
            }
        }
        // Close connection
        $conn->close();
    }
?>
</html>

p/s:您真的应该学习如何使用CSS——样式HTML标记(如<center>)早就被弃用了。