如果将行添加到数据库,则添加HTML <div>

时间:2017-12-20 18:59:04

标签: php html

我正在尝试创建一个网页,如果那里有一行数据,将添加一张充满数据库数据的卡片。我有<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>

1 个答案:

答案 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