如何使用 PHP 将不同的用户选择的 SQL 表显示为 html 表?
Posted
技术标签:
【中文标题】如何使用 PHP 将不同的用户选择的 SQL 表显示为 html 表?【英文标题】:How do I get different user selected SQL tables displayed as an html table using PHP? 【发布时间】:2016-01-28 23:38:03 【问题描述】:我正在创建一个页面,提示输入服务器登录信息,并在提交正确信息后重定向。进入下一页后,会出现一个选择表单,其中包含不同的表名,代表数据库内的表。一旦选择了一个,并单击“选择表”,它将使用 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>
【问题讨论】:
可能重复:***.com/questions/658395/… 【参考方案1】:您可以在调用 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
...
【讨论】:
老实说,到目前为止,您的回答是最明智的。请提供一些带有解释的示例,我会投票赞成。 谢谢,这正是我要找的。现在我唯一要做的就是从数据库中获取要显示的列名。这是我必须创建表格的 html 表格的代码,缺少的只是列标题名称:>echo "</br>"; > echo "<table border= '1'>"; > while($row = $statement->fetch()) echo "<tr>"; for($i=0; $i < $statement->columnCount(); $i++) > echo "<td>" . $row[$i] . "</td>"; echo "</tr>";
fetch() 将在 PDO 的默认设置下检索列名。【参考方案2】:
要选择表的列数,您可以使用此查询。
SELECT COUNT(*) AS total_columns
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'selected_table' AND table_schema = 'your_database';
您可以找到有关 INFORMATION_SCHEMA here 的更多信息。
【讨论】:
格式是否正确?$columns= $db->prepare("SELECT COUNT(*) AS total_columns FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name =" . $_POST['selected'] . " AND table_schema =" . $_SESSION['host']); $columns->execute(); echo var_dump($columns);
因为我运行它时得到这个输出:object(PDOStatement)#3 (1) ["queryString"]=> string(115) "SELECT COUNT(*) AS total_columns FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name =book AND table_schema =localhost"
不,试试这个:$columns= $db->prepare("SELECT COUNT(*) AS total_columns FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '".$_POST['selected']."' AND table_schema = '".$_SESSION['host']."';");
如果你不能这样做,试试@Shadow 的建议。【参考方案3】:
您希望使用this answer 中指示的 INFORMATION_SCHEMA.COLUMNS 表
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>
标签分开,不要让它们填写空白。特别是如果这将是一个非 Intranet 页面
【讨论】:
以上是关于如何使用 PHP 将不同的用户选择的 SQL 表显示为 html 表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 在 html 中使用 SELECT 标记查询我的 SQL 数据库
如何使用 PHP 将 SQL Select 语句链接到 HTML 按钮