如何在php中使用下拉列表显示不同的mysql表
Posted
技术标签:
【中文标题】如何在php中使用下拉列表显示不同的mysql表【英文标题】:How to display different mysql table using dropdown list in php 【发布时间】:2017-08-29 03:55:46 【问题描述】:我在 mysql 数据库中有不同的表,例如表 1 到 5。当我从下拉表列表中选择它时,我想要一个显示每个表的代码。当我尝试执行以下操作时,我没有得到响应,也没有从 sql 加载数据。
<div>
<form action="table1.php" method="GET">
<input list="name" name="name">
<datalist id="name">
<option value="table 1">
<option value="table 2">
<option value="table 3">
<option value="table 4">
<option value="table 5">
</datalist>
<input type="submit" name="search" value="search">
</form>
</div>
<div>
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>Column 4</th>
</tr>
</table>
在 php 代码中,我为选择值分配了一个变量,并在程序中给出。但我收到一个错误,即变量未定义或未在 $conn 语句中使用。
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sheet";
$tbname= $_GET['name'];
if (isset($_GET['search']))
try
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM '$tbname'");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "<tr>";
echo "<th>".$result['Column 1']."</th>";
echo "<th>".$result['Column 2']."</th>";
echo "<th>".$result['Column 3']."</th>";
echo "<th>".$result['Column 4']."</th>";
echo "</tr>";
catch(PDOException $e)
echo "Error: " . $e->getMessage();
$conn = null;
echo "</table>";
【问题讨论】:
试试"SELECT * FROM $tbname"
你不要引用表名。
另外,在尝试将输入发送到数据库之前,最好检查输入是否与已知的表名匹配。
如果是从本地html文件到本地php文件,为什么要使用get而不是post?
我已经检查了输入。页面没有响应。甚至没有显示任何错误。
嗨格特。我尝试过 post 方法和 get 方法。两者都没有回应。
【参考方案1】:
希望这段代码对你有帮助,
我稍微更改了您的代码结构并添加了fetchAll()
方法来从数据库中检索行,您也可以使用fetch()
方法来逐行获取最后我在最后打印这些行。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sheet";
$tbname= $_GET['name'];
$results = array();
if (isset($_GET['search']))
try
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM `$tbname`");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$results = $stmt->fetchAll();//Add this line to get db results
catch(PDOException $e)
echo "Error: " . $e->getMessage();
$conn = null;
?>
<div>
<form action="table1.php" method="GET">
<input list="name" name="name">
<datalist id="name">
<option value="table 1">
<option value="table 2">
<option value="table 3">
</datalist>
<input type="submit" name="search" value="search">
</form>
</div>
<div>
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>Column 4</th>
</tr>
<?php
if (is_array($results) && count($results)>0)
foreach ($results as $result)
echo "<tr>";
echo "<td>".$result['Column 1']."</td>";
echo "<td>".$result['Column 2']."</td>";
echo "<td>".$result['Column 3']."</td>";
echo "<td>".$result['Column 4']."</td>";
echo "</tr>";
?>
</table>
</div>
【讨论】:
【参考方案2】:你在这里所做的只是设置了获取模式,你实际上并没有获取任何东西。
改变:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
echo "<tr>";
echo "<th>".$result['Column 1']."</th>";
echo "<th>".$result['Column 2']."</th>";
echo "<th>".$result['Column 3']."</th>";
echo "<th>".$result['Column 4']."</th>";
echo "</tr>";
到:
while ($result = $stmt->fetch(PDO::FETCH_ASSOC))
echo "<tr>";
echo "<th>".$result['Column 1']."</th>";
echo "<th>".$result['Column 2']."</th>";
echo "<th>".$result['Column 3']."</th>";
echo "<th>".$result['Column 4']."</th>";
echo "</tr>";
【讨论】:
谢谢Augwa,我收到以下错误解析错误:语法错误,C:\wamp64\www\sample\table1.php 中的意外'catch' (T_CATCH) 在第 74 行 您遗漏了已经存在的尾随 大括号。在while () ...
的右大括号之后,您需要再添加一个。
正确格式化您的代码将有助于防止出现此类问题。我编辑了您的问题以正确格式化您的 php 代码。
谢谢Augwa,现在我得到数据了。谢谢你的帮助。【参考方案3】:
单引号中的表名不正确,需要用反引号代替。
您的 PHP 代码中的以下行是错误的
$stmt = $conn->prepare("SELECT * FROM '$tbname'");
应该改成这个
$stmt = $conn->prepare("SELECT * FROM `$tbname`");
【讨论】:
谢谢乔希。但我仍然没有得到响应或没有从数据库加载数据。 你在运行 sql 查询时遇到任何 sql 错误吗?请检查它并确保数据库连接设置正确并且这些表中有数据以上是关于如何在php中使用下拉列表显示不同的mysql表的主要内容,如果未能解决你的问题,请参考以下文章
在 Mysql 中插入 PHP 值后如何显示最后选择的下拉值?
如何从下拉列表中获取值并插入 MySQL Workbench?
如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?