如何从 PHP 中的下拉列表中显示 MySQL Table
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>
我想要做的是让用户 select 成为下拉列表中列出的 5 个 table 之一,然后单击显示。这样做后,系统将显示连接的 MySQL 数据库中相应 table 的完整数据。
我的 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
是下拉列表中的用户 select。我只是不确定如何在我的 PHP 中做到这一点。我已经尝试了多次,但考虑到我实际上才刚刚开始学习 PHP,我的 none 尝试确实有意义。
澄清:
我本来想以table的形式显示数据,但我没有把它包括在我的问题中,因为我已经知道如何这样做了。问题是从下拉列表中读取用户输入,我现在明白了。
缺少的逻辑是您的 PHP 脚本需要获取访问用户输入的方法(关于 table 已被选择)。实际上,您可以将 HTML 和 PHP 放在同一页面上,但仅在检测到用户输入时才执行查询(即通过使用 [= <form>
元素上的 11=] 方法,然后监听 $_GET[]
对象)。
一些实现说明:
- 即使在使用 MySQLi 或 PDO 时,准备好的语句也仅适用于查询中的
VALUES
参数。无法将变量注入到 FROM [tableName]
参数的预准备语句中。
- 与上述观点相关,您将必须手动 创建和维护所选数据库中存在的 table 的白名单。对照这个已知的白名单交叉检查用户输入(选择 table 感兴趣的)。如果交叉检查失败,则不执行查询。
所有这些代码实际上都可以转到同一个文件,比如 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>
很久以前就被弃用了。
这看起来很简单,但对于我的生活我无法弄清楚。基本上,我有以下 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>
我想要做的是让用户 select 成为下拉列表中列出的 5 个 table 之一,然后单击显示。这样做后,系统将显示连接的 MySQL 数据库中相应 table 的完整数据。
我的 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
是下拉列表中的用户 select。我只是不确定如何在我的 PHP 中做到这一点。我已经尝试了多次,但考虑到我实际上才刚刚开始学习 PHP,我的 none 尝试确实有意义。
澄清:
我本来想以table的形式显示数据,但我没有把它包括在我的问题中,因为我已经知道如何这样做了。问题是从下拉列表中读取用户输入,我现在明白了。
缺少的逻辑是您的 PHP 脚本需要获取访问用户输入的方法(关于 table 已被选择)。实际上,您可以将 HTML 和 PHP 放在同一页面上,但仅在检测到用户输入时才执行查询(即通过使用 [= <form>
元素上的 11=] 方法,然后监听 $_GET[]
对象)。
一些实现说明:
- 即使在使用 MySQLi 或 PDO 时,准备好的语句也仅适用于查询中的
VALUES
参数。无法将变量注入到FROM [tableName]
参数的预准备语句中。 - 与上述观点相关,您将必须手动 创建和维护所选数据库中存在的 table 的白名单。对照这个已知的白名单交叉检查用户输入(选择 table 感兴趣的)。如果交叉检查失败,则不执行查询。
所有这些代码实际上都可以转到同一个文件,比如 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>
很久以前就被弃用了。