【问题标题】:Duplicate data on html table when I refresh the page刷新页面时html表上的重复数据
【发布时间】:2017-08-06 20:25:56
【问题描述】:

我正在从 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>";

}
}
?>

【问题讨论】:

  • 您的代码看起来有点连线。为什么要在结果集上创建array_unique?如果你做出不同的事情,你可以直接遍历你的结果。
  • 我使用了array_unique,因为我想确保我不会从数组本身获取那些重复的数据,但即使使用了该函数,当我刷新页面时我仍然会不断得到重复的数据。

标签: php html mysql duplicates html-table


【解决方案1】:

我认为您的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】:

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

    这里有一些伪代码试图说明我的意思:

    while(new row) {
        $data[] = $row; // adding row to data
        foreach($data as $result) {
            // iterate over all rows in data, ever
        }
    }
    

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

    第三次,数据有结果 1 和 2,并添加了 3。然后 1、2 和 3全部显示

    【讨论】:

      【解决方案3】:

      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>";
      }
      

      【讨论】:

      • 这行得通,尽管我首先尝试遍历行数组,但由于某些原因,我只得到从 0 开始的数字,这让我认为我可能需要迭代两次为了获取数组中的数据。现在它就像一个魅力。
      猜你喜欢
      • 2012-05-23
      • 2016-09-04
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2011-07-14
      • 2015-09-07
      • 2014-07-04
      • 1970-01-01
      相关资源
      最近更新 更多