如何在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 选择的第一个下拉列表填充第二个下拉列表?

使用 PHP 在多个下拉列表中显示数据库中的数据

使用 MySQL、PHP/JavaScript/Ajax/jQuery 的链接下拉列表

如何使用mysql和php制作级联下拉列表