2017-03-15 9 views
-1

データベースからいくつかのデータを選択していますが、それらをhtmlテーブルに表示しようとしています。 問題は、私がページをリフレッシュすると、私のHTMLテーブルにすべてのデータが重複してしまうことです。私はGoogleにこの問題を修正しようとしていましたが、今は3日間結果がありません。ページを更新するときに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>"; 

} 
} 
?> 
+0

あなたのコードは少し有線に見えます。なぜあなたは結果セットで 'array_unique'を作っていますか?別のものを作成した場合、結果を通して直接反復することができます。 – Stony

+0

私はarray_uniqueを使用しました。なぜなら、配列自体から重複データを取得しないようにしたいのですが、その関数を使用しても、ページを更新するときに重複しています。 –

答えて

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

が成功した理由は、行配列を最初に反復しようとしたにもかかわらず、何らかの理由で0から順番に番号を取得していたため、データを取得するためにおそらく2回繰り返す必要があると思いました配列の内側にある。今は魅力のように働いています。 –

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

次に、二倍値を使用しないでください。

0

$dataを外側のwhileに追加してから、その間に$dataを繰り返していると思います。

は、ここで私が何を意味するかを示すためにしようといくつかの擬似コードです:最初のDBの結果については

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

、$データは空です。あなたはそれを追加し、表示し、移動します。 2番目のdbの結果、$ dataには最初の結果が残っています。2番目の結果を追加し、最初の結果(もう一度)と2番目の結果の両方を表示して繰り返します。

3回目以降、データには1と2があり、3が追加されます.1,2,3はすべてと表示されます。

関連する問題