PHP 将 MySQL 数据回显到 HTML table
PHP echoing MySQL data into HTML table
所以我正在尝试制作一个 HTML table 从 MySQL 数据库获取数据并将其输出给用户。我正在使用 PHP 这样做,我对它非常陌生,所以请原谅我的 messy code!
我使用的代码是:braces for storm of "your code is awful!"
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = mysql_connect("localhost", "notarealuser", 'notmypassword');
for ($i = 1; $i <= 20; $i++) {
$items = ($mysqli->query("SELECT id FROM `items` WHERE id = $i"));
echo ("<tr>");
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['id'];
}</td>");
$items = ($mysqli->query("SELECT name FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['name'];
}</td>");
$items = ($mysqli->query("SELECT descrip FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['descrip'];
}</td>");
$items = ($mysqli->query("SELECT reward FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['reward'];
}</td>");
$items = ($mysqli->query("SELECT img FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['img'];
}</td>");
echo ("</tr>");
}
?>
</tbody>
</table>
但是,此代码不起作用 - 它只是导致页面立即输出 500 内部服务器错误。 IIS 日志将其显示为 500:0 - 通用 ISE。有什么想法吗?
<table class="table table-striped table-hover">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect("hostname","username",'password');
$sql= "SELECT * FROM `items` WHERE id <20 ";
$items = (mysqli_query($sql));
while ( $db_field = mysqli_fetch_assoc($items) ) {?>
<tr><td><?php echo $db_field['id'];?></td></tr>
<tr><td><?php echo $db_field['name'];?></td></tr>
<tr><td><?php echo $db_field['descrip'];?></td></tr>
<tr><td><?php echo $db_field['reward'];?></td></tr>
<tr><td><?php echo $db_field['img'];?></td></tr>
<?php}
</tbody>
</table>
尝试这些,未测试
问题在哪里?
这段代码有很多问题。
首先,你混淆了 PHP 和 HTML。
之间的代码是PHP。它在服务器上执行,你可以在那里有循环、变量和赋值。如果你想要一些 HTML 你可以使用 "echo".
外面的代码是 HTML - 它按原样发送到浏览器。
其次 - 您似乎在做的是分别查询每个字段。这不是你使用 SQL.
的方式
以下是您大致需要做的事情:
//Query all rows from 1 to 20:
$items = $mysqli->query("SELECT id,name,descrip,reward,img FROM `items` WHERE id between 1 and 20");
//Go through rows
while ( $row = mysqli_fetch_assoc($items) )
{
echo "<tr><td>{$db_field['id']}</td>";
//echo the rest of the fields the same way
});
您正在混合使用 mysql 和 mysqli,没有关闭 php 代码块并且您没有选择数据库。另外,您不必 运行 每个字段的查询
试试这个:
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = new mysqli("host","user", "password", "database");
$execItems = $con->query("SELECT id, name, descrip, reward, img FROM `items` WHERE id BETWEEN 1 AND 20 ");
while($infoItems = $execItems->fetch_array()){
echo "
<tr>
<td>".$infoItems['id']."</td>
<td>".$infoItems['name']."</td>
<td>".$infoItems['descrip']."</td>
<td>".$infoItems['reward']."</td>
<td>".$infoItems['img']."</td>
</tr>
";
}
?>
</tbody>
</table>
我将继续并假设代码无法正常工作,那是因为存在几个基本错误。我强烈建议围绕 PHP 主题认真阅读,尤其是因为您使用的是数据库,如果使用不安全的代码访问数据库,可能会带来重大的安全风险。
首先,您已经使用过程 mysql_connect 函数设置了连接,但仅仅几行之后,您就通过尝试调用方法 mysqli::query 切换到了面向对象在非对象上,因为它在您的连接期间从未实例化。
http://php.net/manual/en/mysqli.construct.php
其次,PHP echo() 不需要括号。 PHP 有时将其描述为一个函数,但它是一种语言结构,如果您尝试解析多个参数,括号会导致问题。
http://php.net/manual/en/function.echo.php
第三,您不能通过通知 server/browser 简单地从 HTML 和 PHP 切换,反之亦然。如果你想这样做,你需要连接...
echo "<td>".while($db_filed = mysqli_fetch_assoc($item)) {
print $db_field['id'];
}."</td>;
或者最好(在我看来它看起来更干净)
<td>
<?php
while($db_filed = mysqli_fetch_assoc($item)) {
print $db_field['id'];
}
?>
</td>
但是,这些示例基于您的代码,该代码将每个 ID 输出到同一个单元格中,我认为这不是您的目标,因此您也应该将单元格插入循环中,以便每个 ID 都属于自己的细胞。此外,我建议使用 echo over print(速度更快)。
其他现在可能不是问题但可能会演化成问题的是您为 FOR 循环使用了常量。如果你需要从你的 table 中提取超过 20 行,那么你将不得不手动增加这个数字,如果你的 table 少于 20 行,你将收到一个错误,因为循环将正在尝试访问 table 不存在的行。
我不是 PHP 专家,所以我的一些术语可能不正确,但希望我所掌握的知识会有用。同样,我强烈建议您在使用该语言之前先充分了解该语言。
所以我正在尝试制作一个 HTML table 从 MySQL 数据库获取数据并将其输出给用户。我正在使用 PHP 这样做,我对它非常陌生,所以请原谅我的 messy code!
我使用的代码是:braces for storm of "your code is awful!"
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = mysql_connect("localhost", "notarealuser", 'notmypassword');
for ($i = 1; $i <= 20; $i++) {
$items = ($mysqli->query("SELECT id FROM `items` WHERE id = $i"));
echo ("<tr>");
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['id'];
}</td>");
$items = ($mysqli->query("SELECT name FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['name'];
}</td>");
$items = ($mysqli->query("SELECT descrip FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['descrip'];
}</td>");
$items = ($mysqli->query("SELECT reward FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['reward'];
}</td>");
$items = ($mysqli->query("SELECT img FROM `items` WHERE id = $i"));
echo ("
<td>
while ($db_field = mysqli_fetch_assoc($items)) {
print $db_field['img'];
}</td>");
echo ("</tr>");
}
?>
</tbody>
</table>
但是,此代码不起作用 - 它只是导致页面立即输出 500 内部服务器错误。 IIS 日志将其显示为 500:0 - 通用 ISE。有什么想法吗?
<table class="table table-striped table-hover">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect("hostname","username",'password');
$sql= "SELECT * FROM `items` WHERE id <20 ";
$items = (mysqli_query($sql));
while ( $db_field = mysqli_fetch_assoc($items) ) {?>
<tr><td><?php echo $db_field['id'];?></td></tr>
<tr><td><?php echo $db_field['name'];?></td></tr>
<tr><td><?php echo $db_field['descrip'];?></td></tr>
<tr><td><?php echo $db_field['reward'];?></td></tr>
<tr><td><?php echo $db_field['img'];?></td></tr>
<?php}
</tbody>
</table>
尝试这些,未测试
问题在哪里?
这段代码有很多问题。 首先,你混淆了 PHP 和 HTML。 之间的代码是PHP。它在服务器上执行,你可以在那里有循环、变量和赋值。如果你想要一些 HTML 你可以使用 "echo".
外面的代码是 HTML - 它按原样发送到浏览器。
其次 - 您似乎在做的是分别查询每个字段。这不是你使用 SQL.
的方式以下是您大致需要做的事情:
//Query all rows from 1 to 20:
$items = $mysqli->query("SELECT id,name,descrip,reward,img FROM `items` WHERE id between 1 and 20");
//Go through rows
while ( $row = mysqli_fetch_assoc($items) )
{
echo "<tr><td>{$db_field['id']}</td>";
//echo the rest of the fields the same way
});
您正在混合使用 mysql 和 mysqli,没有关闭 php 代码块并且您没有选择数据库。另外,您不必 运行 每个字段的查询
试试这个:
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Description</th>
<th>Reward</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<?php
$con = new mysqli("host","user", "password", "database");
$execItems = $con->query("SELECT id, name, descrip, reward, img FROM `items` WHERE id BETWEEN 1 AND 20 ");
while($infoItems = $execItems->fetch_array()){
echo "
<tr>
<td>".$infoItems['id']."</td>
<td>".$infoItems['name']."</td>
<td>".$infoItems['descrip']."</td>
<td>".$infoItems['reward']."</td>
<td>".$infoItems['img']."</td>
</tr>
";
}
?>
</tbody>
</table>
我将继续并假设代码无法正常工作,那是因为存在几个基本错误。我强烈建议围绕 PHP 主题认真阅读,尤其是因为您使用的是数据库,如果使用不安全的代码访问数据库,可能会带来重大的安全风险。
首先,您已经使用过程 mysql_connect 函数设置了连接,但仅仅几行之后,您就通过尝试调用方法 mysqli::query 切换到了面向对象在非对象上,因为它在您的连接期间从未实例化。
http://php.net/manual/en/mysqli.construct.php
其次,PHP echo() 不需要括号。 PHP 有时将其描述为一个函数,但它是一种语言结构,如果您尝试解析多个参数,括号会导致问题。
http://php.net/manual/en/function.echo.php
第三,您不能通过通知 server/browser 简单地从 HTML 和 PHP 切换,反之亦然。如果你想这样做,你需要连接...
echo "<td>".while($db_filed = mysqli_fetch_assoc($item)) {
print $db_field['id'];
}."</td>;
或者最好(在我看来它看起来更干净)
<td>
<?php
while($db_filed = mysqli_fetch_assoc($item)) {
print $db_field['id'];
}
?>
</td>
但是,这些示例基于您的代码,该代码将每个 ID 输出到同一个单元格中,我认为这不是您的目标,因此您也应该将单元格插入循环中,以便每个 ID 都属于自己的细胞。此外,我建议使用 echo over print(速度更快)。
其他现在可能不是问题但可能会演化成问题的是您为 FOR 循环使用了常量。如果你需要从你的 table 中提取超过 20 行,那么你将不得不手动增加这个数字,如果你的 table 少于 20 行,你将收到一个错误,因为循环将正在尝试访问 table 不存在的行。
我不是 PHP 专家,所以我的一些术语可能不正确,但希望我所掌握的知识会有用。同样,我强烈建议您在使用该语言之前先充分了解该语言。