刷新页面时html表上的数据重复

时间:2017-03-15 21:23:40

标签: php html mysql duplicates html-table

我从db中选择一些数据,我试图在html表上显示它们。 问题是当我刷新页面时,我得到的所有数据都复制在我的html表上。我一直试图谷歌/解决这个问题,但现在没有结果三天了。

 <?php
    //select and display all post on a table.
    $query="SELECT DISTINCT * FROM posts order by post_id";
    $results=mysqli_query($conn, $query);

while($row= mysqli_fetch_assoc($results)){

$data[] = array_unique($row); 
echo "<tr>";
foreach($data as $result)
{
    foreach($result as $key=>$value)
    {
        if($key=="post_content"){
            continue;
        } if($key=="post_img"){
            $value="<img width='100px' src='../imgs/$value' class='img-responsive'>";
        }
        echo "<td>".$value."</td>";
    }
  echo "</tr>";

}
}
?>

3 个答案:

答案 0 :(得分:1)

第一次while循环运行时,这个:

$data[] = array_unique($row);

创建一个新数组并将行添加到它(我不认为array_unique真正完成了任何事情。)

随着while循环的每次后续迭代,您都会向$data添加另一行。然后,使用:

循环遍历$data
foreach($data as $result) {

这就是造成重复的原因。 $data逐步从$results获取每一行,然后重复循环。在while循环结束时,$data包含整个结果集。

删除额外的循环应该可以解决这个问题。

while ($row = mysqli_fetch_assoc($results)) {
    echo "<tr>";
    foreach ($row as $key => $value) {
        if ($key == "post_content") {
            continue;
        }
        if ($key == "post_img") {
            $value = "<img width='100px' src='../imgs/$value' class='img-responsive'>";
        }
        echo "<td>".$value."</td>";
    }
    echo "</tr>";
}

答案 1 :(得分:0)

我认为您的array_unique不是一个好主意,并且不起作用。我不知道你的参赛作品,但我认为将这个领域分组只需要一次就可以了。

<?php
//select and display all post on a table.
$query = "SELECT * FROM posts ORDER BY post_id GROUP BY xxxxx";
$results = mysqli_query($conn, $query);

while ($row = mysqli_fetch_assoc($results)) {
    if ($key == "post_content") {
        continue;
    }

    echo "<tr>";
    if ($key == "post_img") {
        echo "<td><img width='100px' src='../imgs/{$row['value']}' class='img-responsive'></td>";
    }
    echo "</tr>";
}

然后你不应该有重复的价值。

答案 2 :(得分:0)

我认为这是因为您在外部external.resources内添加$data,然后在内部迭代while

这是一些试图表明我的意思的伪代码:

$data

对于第一个db结果,$ data为空。你添加,显示,继续前进。第二个db结果,$ data仍然有第一个结果..你添加第二个结果,然后迭代它显示第一个结果(再次)和第二个结果。

第三次,数据结果为1和2,并且添加了3 ..然后显示所有的1,2和3。