我正在尝试创建一个网页,如果那里有一行数据,将添加一张充满数据库数据的卡片。我有<div class>
格式化卡片。有没有办法以编程方式添加<div class>
,以便每个<div class>
是一行数据?
这是我的PHP,它确实正确地读取了所有行:
//SQL SELECT statement
$result = $conn->prepare("SELECT userid, pName, pDesc, dDate FROM test");
$result->execute();
// assign returned array elements to variables
for($i=0; $row=$result->fetch(); $i++){
$pName = $row['pName'];
$pDesc = $row['pDesc'];
$dDate = $row['dDate'];
}
这是HTML,它目前只显示最后一行数据:
<h1>Project Dashboard</h1>
<div class="project-container">
<label>Project Owner:</label>
<span><?php echo $pName; ?></span><br>
<label>Project Description:</label>
<span><?php echo $pDesc; ?> </span><br>
<label>Project Due Date:</label>
<span><?php echo $dDate; ?> </span><br>
<div class="progress-bar">
<div id="myBar" class="container purple" style="height:24px;width:25%">
</div>
</div>
</div>
答案 0 :(得分:0)
如评论中所述,PHP值会在for
循环的每次迭代时被覆盖,因此只会显示最后一行值。例如,$pName
一次只能包含一个值。因此,在循环之后,$pName
被定义为最后一行的pName值。
我建议使用while
循环输出HTML行。下面,我假设每个.project-container
都是一行。我也在使用PDO。
<?php
while ($row=$result->fetch(PDO::FETCH_ASSOC)) {
?><div class="project-container">
<label>Project Owner:</label>
<span><?=$row['pName']?></span><br>
<label>Project Description:</label>
<span><?=$row['pDesc']?></span><br>
<label>Project Due Date:</label>
<span><?=$row['dDate']?></span>
</div><?php
}
或者,您可以将所有行提取到单个PHP数组中,然后遍历数组。
$rows=$result->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
// output row's HTML, just like above
}
有关性能方面的考虑,请参阅PDO::fetchAll vs. PDO::fetch in a loop 。