我正在开发一个项目,通过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中尝试查看整个页面时,我看到的只有:
我认为错误就在这段代码的某处:
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'/>");
在给我顶部的方框时,两者都做了同样的事情。你可以提供任何方向让这些在每一行的末尾?我不需要它将数据放回数据库或添加到那里的表。我正在尝试获取输入字段,以允许使用我的表单提交输入。
答案 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混在一起就好了。