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

时间:2015-03-17 22:25:49

标签: php html mysql drop-down-menu

这看起来很简单,但对于我的生活,我无法弄明白。基本上,我有以下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的事实,我的尝试都没有真正有意义。

澄清:

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

1 个答案:

答案 0 :(得分:1)

缺少的逻辑是您的PHP脚本需要获取访问用户输入的方法(关于选择了哪个表)。实际上,您可以将HTML 保存在同一页面上,但只有在检测到用户输入时才会执行查询(即使用GET上的<form>方法元素,然后监听$_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 - 很久以前就已经弃用了<center>这样的风格HTML标签。