首页 文章

如何使用PHP将不同的用户选择的SQL表显示为html表?

提问于
浏览
2

我正在创建一个提示服务器登录信息的页面,并在提交正确的信息后重定向 . 进入下一页后,会有一个选择表单,其中包含表示数据库内部表的不同表名 . 选择一个,并单击“选择表”后,将使用PHP将数据库中的整个表显示为html中的表 . 我不知道如何计算sql表中的列数,以便能够使用循环和html表标记显示它 .

<?
session_start();
if(!isset($_SESSION['session']))
{
    $_SESSION['session'] = 0;
}
if(isset($_POST['host']))
{
    $_SESSION['host'] = $_POST['host'];
    $_SESSION['dbname'] = $_POST['dbname'];
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['pw'] = $_POST['pw'];
}

?>
<!DOCTYPE html>
<html>

<body>
    <?          
    if(isset($_POST['logout']))
    {
        $_SESSION['session'] = 0;
    }

    if(isset($_POST['submit']))
    {
        try
        {
            $db = new PDO("mysql:host=".$_POST['host'].";dbname=".$_POST['dbname'], $_POST['username'], $_POST['pw']);
        }
        catch(Exception $error)
        {
            die("Connection to user database failed: " . $error->getMessage());
        }

        try
        {
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION);
            $query = "SHOW TABLES";
            $results = $db->query($query)->fetchall();
            $_SESSION['session']=1;
        }
        catch(Exception $error)
        {
            echo "Problem with ~query, go back to home screen";
            $_SESSION['session']=0;
        }
    }       

    if($_SESSION['session'] == 0)
    {?>
    <form action="<?$_SERVER['PHP_SELF']?>" method="post" name='initialentry'>
        <table border='0' style='text-align: center'>
            <tr>
                <td style='text-align: right;'>Enter host name:</td>
                <td style='text-align: left;'>
                    <input type='text' name='host' value='localhost'>
                </td>
            </tr>
            <tr>
                <td style='text-align: right;'>Enter database name:</td>
                <td style='text-align: left;'>
                    <input type='text' name='dbname' value='zxyx999'>
                </td>
            </tr>
            <tr>
                <td style='text-align: right;'>Enter user name:</td>
                <td style='text-align: left;'>
                    <input type='text' name='username' value='zxyx999'>
                </td>
            </tr>
            <tr>
                <td style='text-align: right;'>Enter password:</td>
                <td style='text-align: left;'>
                    <input type='password' name='pw' width='15' value='12345'>
                </td>
            </tr>
            <tr>
                <td style='text-align: right;'>
                    <input type="reset" value="Reset">
                </td>
                <td style='text-align: left;'>
                    <input name='submit' type="submit" value="Submit">
                </td>
            </tr>
        </table>
    </form>
    <?}

    if($_SESSION['session']==1)
    {
        ?><form action='<?$_SERVER['PHP_SELF']?>' method='post' name='tableList'>
        <select name='selected'><?
            foreach($results as $row)
            {
                echo "<option value=".$row[0].">" . $row[0] . "</option>";
            }?>
        </select>
        <input type="submit" name="selectTable" value="Select Table">
        <input type="submit" name="logout" value="logout">
        </form><?
    }

    if(isset($_POST['selectTable']))
    {
        try
        {
            $db = new PDO("mysql:host=".$_SESSION['host'].";dbname=".$_SESSION['dbname'], $_SESSION['username'], $_SESSION['pw']);
        }
        catch(Exception $error)
        {
            die("Connection to user database failed: " . $error->getMessage());
        }

        try
        {
            $statement = $db->prepare("SELECT * FROM ".$_POST['selected']);
            $statement->execute();
        }
        catch(Exception $error)
        {
            echo "Problem with ~query";
        }

        echo "</br>";
        echo "<table border= '1'>";

        while($row = $statement->fetch())
        {
            echo $row['book_id'] . $row['title'];
        }

        echo "</table>";
    }

    ?>
</body>
</html>

3 回答

  • 0

    在调用execute()之后,可以使用PDOStatement对象的columncount属性来确定结果集中的列数 .

    更新:让我们看一些代码

    ...
    $c=$statement->columnCount()-1; //column indexes in resultset are 0 based
    while($row = $statement->fetch())
        {
            echo '<tr>'; //start row
            for($i=0; $i<=$c; $i++)
                {
                    echo '<td>'.$row[$i] . '</td>'; //print cell
                }
            echo '</tr>'; //close the row
        }
    ...
    
  • 0

    要选择表的列数,可以使用此查询 .

    SELECT COUNT(*) AS total_columns
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'selected_table' AND table_schema = 'your_database';
    

    您可以找到有关INFORMATION_SCHEMA here的更多信息 .

  • 2

    你想要使用INFORMATION_SCHEMA.COLUMNS表,如this answer所示

    SELECT `COLUMN_NAME` 
    FROM `INFORMATION_SCHEMA`.`COLUMNS` 
    WHERE `TABLE_SCHEMA`='yourdatabasename' 
        AND `TABLE_NAME`='yourtablename';
    

    首先创建一个循环,在其中创建表的 <tr><th>[CONTENT]</th>...</tr> 行,然后运行现有循环以生成 <tr><td>[CONTENT]</td>...</tr> 行 .

    您的第一个循环或多或少与您的第二个循环相同,区别在于您使用的是不同的sql结果,使用 <th> 而不是 <td> 并在第二个循环中使用循环 . 这将...

    将数据库中的整个表显示为html中的表

    如果需要行/列计数,可以在每个循环中粘贴某种迭代器

    第一个循环示例

    echo "<tr>";
    $countColumn = 0;
    while($row = $statement->fetch())
    {
        echo "<th>".$row['COLUMN_NAME']."</th>";
        $countColumn += 1;
    }
    echo "</tr>";
    

    第二个循环示例

    $countRow = 0;
    while($row = $statement->fetch())
    {
        echo "<tr>";
        foreach($row as $data)
        {
            echo "<td>".$data."</td>";
            $countRow += 1;
        }
        echo "</tr>";
    }
    

    注意:浏览器是智障儿童,除非在你的

    echo "<table border= '1'>";
    
    while($row = $statement->fetch())
    {
        echo $row['book_id'] . $row['title'];
    }
    
    echo "</table>";
    

    部分你的 $row['book_id'] . $row['title'] 有你的 <tr><td> 标签不让他们填补空白 . 特别是如果这将是一个非内部网页

相关问题