这看起来很简单,但对于我的生活,我无法弄明白。基本上,我有以下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的事实,我的尝试都没有真正有意义。
澄清:
我原本想以表格的形式显示数据,但我没有在我的问题中包含这些数据,因为我已经知道如何这样做了。问题是从下拉列表中读取用户输入,我现在明白了。
答案 0 :(得分:1)
缺少的逻辑是您的PHP脚本需要获取访问用户输入的方法(关于选择了哪个表)。实际上,您可以将HTML 和保存在同一页面上,但只有在检测到用户输入时才会执行查询(即使用GET
上的<form>
方法元素,然后监听$_GET[]
对象。)
一些实施说明:
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标签。