使用PHP从数据库中提取的数据创建html表

时间:2015-11-19 23:15:04

标签: php html mysql

我正在开发一个项目,通过PHP从sql数据库中提取数据,并从中创建一个HTML表。它是我正在创建的表单的一部分,表格将列出我正在销售的内容,成本,权重等。无论如何,我需要使用PHP执行此操作。到目前为止,我在代码的这一部分中有以下内容来制作此表:

<?php
$db=mysqli_connect(null,null,null,'weblab')
   or die("Can't connect to DB: " .
   mysqli_connect_error());

$query="SELECT fruit_item_no, fruit_name, fruit_price, fruit_weight FROM fruit_$

$result=mysqli_query($db, $query);
if (!$result) {
print "Error - The query could not be executed!" .
      mysqli_error();
}
    print "<table class = 'main'><caption> <h2> Fruit Purchasing Form </h2> </c$
    print "<tr align = 'center'>";

    $num_rows=mysqli_num_rows($result);

    if ($num_rows > 0) {
        $row=mysqli_fetch_assoc($result);
        $num_fields=mysqli_num_fields($result);

        $keys=array_keys($row);
        for ($index = 0; $index < $num_fields; $index++)
            print "<th class='a'>" . $keys[$index] . "</th>";
        print "</tr>";

        for ($row_num = 0; $row_num < $num_rows; $row_num++) {
            print "<tr>";
            $values = array_values($row);
            for ($index = 0; $index < $num_fields; $row_num++) {
                $value=htmlspecialchars($values[$index]);
                print "<td class = 'b'>" . $value . "</td>";
            }
        print "</tr>";
        $row=mysqli_fetch_assoc($result);
        }
    }
    else {
        print "There were no such rows in the table <br />";
    }
    print "</table>";
?>

我遇到的问题是当我在Chrome中尝试查看整个页面时,我看到的只有:

PHP Error

我认为错误就在这段代码的某处:

for ($row_num = 0; $row_num < $num_rows; $row_num++) {
            print "<tr>";
            $values = array_values($row);
            for ($index = 0; $index < $num_fields; $row_num++) {
                $value=htmlspecialchars($values[$index]);
                print "<td class = 'b'>" . $value . "</td>";

如果有人能就我可能缺少的东西给我一点指示,我将不胜感激。我现在已经研究了一段时间,没有明确的解决方案,我可以看到。

更新: 认为最好只更新我的帖子,而不是新的问题或评论。感谢您的所有建议,我能够更正我的代码以正确显示我的表并计算出所有验证错误。我为代码阅读噩梦道歉...我仍然相当新,我需要更多地工作。

我遇到过一个我仍然无法解决的问题。我试图在我创建的表中的每一行的末尾添加一个输入框。问题是无论我尝试将盒子放在桌子上方的一条线上(几乎都在浏览器屏幕的顶部。

我将此行放在sql查询块中以尝试获取输入框:

echo ("<input name='item[]' type='text' .=''/>");

我也试过了:

echo ("<input type='text' name ='item'/>");

在给我顶部的方框时,两者都做了同样的事情。你可以提供任何方向让这些在每一行的末尾?我不需要它将数据放回数据库或添加到那里的表。我正在尝试获取输入字段,以允许使用我的表单提交输入。

3 个答案:

答案 0 :(得分:2)

您可以通过在结果上运行while循环并遍历行来简化代码。然后使用foreach循环,因为每一行都是键值对的数组。在第一次迭代中,您可以打印标题。

$num_rows=mysqli_num_rows($result);
if ($num_rows > 0) {
    $i = 0;
    // loop through each row in the result
    while ($row=mysqli_fetch_assoc($result)) {
        // if first then print the header
        if ($i == 0) {
            print "<tr>";
            foreach ($row as $field => $value) {
                print "<th class='a'>".$field."</th>";
            }
            print "</tr>";
        }
        // print the row
        print "<tr>";
        foreach ($row as $value) {
            print "<td class='b'>".$value."</td>";
        }
        print "</tr>";
        $i++;
    }
}
else {
    print "<tr></td>There were no such rows in the table</td></tr>";
}

根据评论中的建议,将您的观点与代码分开是个好主意。

答案 1 :(得分:0)

在你的第二个for循环中,你有这个:

for($index=0; $index<$num_fields; $row_num++)

嗯,$index的值将在执行时保持0吞吐量。尝试将其更改为

for($index=0; $index<$num_fields; $index++)
{
  $row_num++;
 //rest of code
}

希望它有所帮助。

答案 2 :(得分:0)

这是不必要的复杂:

    $row=mysqli_fetch_assoc($result);
    $num_fields=mysqli_num_fields($result);

    $keys=array_keys($row);
    for ($index = 0; $index < $num_fields; $index++)
        print "<th class='a'>" . $keys[$index] . "</th>";
    print "</tr>";

    for ($row_num = 0; $row_num < $num_rows; $row_num++) {
        print "<tr>";
        $values = array_values($row);
        for ($index = 0; $index < $num_fields; $row_num++) {
            $value=htmlspecialchars($values[$index]);
            print "<td class = 'b'>" . $value . "</td>";
        }
        print "</tr>";
        $row=mysqli_fetch_assoc($result);
    }

这样的东西会更容易阅读,并且应该解决你的问题,这是由于在for循环之一上增加了错误的索引引起的:

    $headers = false;
    while($row=mysqli_fetch_assoc($result)) {
        if (!$headers) {
            echo "<thead><tr>";
            foreach($row as $k=>$v) {
                echo "<th>$k</th>";
            }
            echo "</tr></thead>";
            $headers = true;
        }
        echo "<tr>";
        foreach ($row as $k=>$v) {
            $v=htmlspecialchars($v);
            print "<td class='b'>$v</td>";
        }
        echo "</tr>";
    }

但我强烈建议a)使用像PDO这样的数据库抽象层,b)将你的逻辑与你的演示文稿分开。使用HTML调试问题的时间要高100倍,如果它与你的PHP混在一起就好了。