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 专家,所以我的一些术语可能不正确,但希望我所掌握的知识会有用。同样,我强烈建议您在使用该语言之前先充分了解该语言。