Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP将不同的用户选择的SQL表显示为html表?_Php_Html_Mysql_Pdo - Fatal编程技术网

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

如何使用PHP将不同的用户选择的SQL表显示为html表?,php,html,mysql,pdo,Php,Html,Mysql,Pdo,我正在创建一个页面,提示输入服务器登录信息,并在提交正确信息后重定向。进入下一页后,将出现一个select表单,该表单具有不同的表名,表示数据库中的表。一旦选择了一个,并单击了“select table”,就可以使用PHP将数据库中的整个表显示为html格式的表。我不知道如何计算sql表中的列数,以便能够使用循环和html表标记显示它 <? session_start(); if(!isset($_SESSION['session'])) { $_SESSION['session'

我正在创建一个页面,提示输入服务器登录信息,并在提交正确信息后重定向。进入下一页后,将出现一个select表单,该表单具有不同的表名,表示数据库中的表。一旦选择了一个,并单击了“select table”,就可以使用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>

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

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

您可以找到有关信息模式的更多信息。

您希望使用中所示的信息模式列表

首先创建一个循环,在其中生成表的
[CONTENT]…
行,然后运行现有循环以生成
[CONTENT]…

您的第一个循环或多或少与第二个循环相同,不同之处在于您使用的是不同的sql结果,使用
而不是
,并且在第二个循环中使用一个循环。这将

将数据库中的整个表显示为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”“;
$countColumn=0;
而($row=$statement->fetch())
{
回显“$row['COLUMN_NAME']”;
$countColumn+=1;
}
回声“;
第二个循环示例

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>";
}
$countRow=0;
而($row=$statement->fetch())
{
回声“;
foreach($行作为$数据)
{
回显“$data.”;
$countRow+=1;
}
回声“;
}
注意:浏览器是弱智儿童,除非在您的浏览器中

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

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

echo "</table>";
echo”“;
而($row=$statement->fetch())
{
echo$row['book_id']。$row['title'];
}
回声“;
将您的
$row['book\u id']分成两部分$第['title']
行中有您的
标记,但不要让它们填充中的空白。特别是如果这是一个非intranet页面

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

更新:让我们看看一些代码

...
$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
    }
...
。。。
$c=$statement->columnCount()-1//resultset中的列索引基于0
而($row=$statement->fetch())
{
回显“”;//开始行

对于($i=0;$i可能的duplicate of:老实说,你的答案是目前为止最合理的。请提供一些示例并加以解释,我将进行投票。谢谢,这就是我一直在寻找的内容。现在我唯一要做的就是从数据库中获取要显示的列名。下面是我必须创建该表的html表的代码,它所缺少的只是列标题名:>
echo“
”;>echo”“;>while($row=$statement->fetch()){echo”“;for($i=0;$i<$statement->columnCount();$i++)>{echo”“,$row[$i]。;}echo”“;}
fetch()将以PDO的默认设置检索列名。格式是否正确?

$columns=$db->prepare(“选择COUNT(*)作为信息架构中的总计列。columns,其中table_name=“.$\u POST['selected']”和table_SCHEMA=“.$\u SESSION['host']”;$columns->execute();echo var_dump($columns)
因为我在运行它时得到这个输出:
object(PDOStatement)#3(1){[“queryString”]=>string(115)“选择COUNT(*)作为信息模式中的总计列。table_name=book和table_SCHEMA=localhost的列”}
否,请尝试:$columns=$db->prepare(“选择COUNT(*)作为信息_SCHEMA.columns中的总计_列,其中表_name='“$_POST['selected']”和表_SCHEMA='”“$_SESSION['host'].“;””);如果不能这样做,请尝试@Shadow建议的方法。