如何在php中使用下拉列表显示不同的mysql表
我在mysql数据库中有不同的表,如表1到表5。当我从下拉表列表中选择每个表时,我需要一个显示该表的代码。当我尝试执行下面的命令时,我没有得到任何响应,也没有从sql加载任何数据如何在php中使用下拉列表显示不同的mysql表,php,html,mysql,pdo,Php,Html,Mysql,Pdo,我在mysql数据库中有不同的表,如表1到表5。当我从下拉表列表中选择每个表时,我需要一个显示该表的代码。当我尝试执行下面的命令时,我没有得到任何响应,也没有从sql加载任何数据 <div> <form action="table1.php" method="GET"> <input list="name" name="name"> <datalist id="name"> <option value="table 1">
<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 width="600" 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>";
}
您在单引号中放置了表名,这是不正确的,您需要使用反勾号 PHP代码中的以下行是错误的
$stmt = $conn->prepare("SELECT * FROM '$tbname'");
应该改成这个
$stmt = $conn->prepare("SELECT * FROM `$tbname`");
您在这里所做的只是设置获取模式,实际上您没有获取任何内容 更改:
$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>";
致:
希望这段代码能帮助你 我稍微改变了您的代码结构,并添加了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 width="600" 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>
尝试只从$tbname中选择*不引用表名。此外,在尝试将输入与已知表名相匹配之前,最好先检查输入是否匹配,然后再将其发送到数据库。如果从本地html文件发送到本地php文件,为什么要使用get和not post?我已检查了输入。页面中没有响应。甚至没有显示任何错误。嗨,格特。我试过post方法,也试过get方法。两个都没有回应。谢谢你,乔希。但我仍然并没有得到响应或者并没有从数据库中加载数据。当你们运行sql查询时,你们有并没有遇到任何sql错误?请检查它,并确保数据库连接设置正确,并且这些表中有数据。谢谢您,Augwa,我得到了以下错误解析错误:语法错误,C:\wamp64\www\sample\table1.php中的意外“catch”T\u catch在第74行您遗漏了已经存在的尾随}括号。在while{…}的右大括号之后,您需要有另一个右大括号。正确的代码格式将有助于防止类似的问题。我编辑了你的问题以正确格式化你的php代码。谢谢你,现在我得到了数据。谢谢你的帮助。
<?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 width="600" 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>