[英]Something with looping through mysql
我正在創建一個“新聞”網站(僅供練習)。 我所有的文章都放在mysql數據庫中,我想將它們打印出來。 但是當我這樣做時,我只會得到最后一個。 我知道為什么會這樣,但是我不知道如何解決...而且我也不知道該怎么稱呼。
這是我的代碼:
$query = "SELECT * FROM `Artiekel`";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)){
$deel = '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
}
所有變量都使用荷蘭語,但這並不重要。
您在這里看到的是編寫一篇文章的代碼,最后一篇。 我知道為什么會這么做。
更改循環,以免覆蓋$deel
。 首先,在循環外聲明$deel
,然后在每次循環時將其串聯:
$deel = '';
while ($row = mysqli_fetch_assoc($result)){
//note the concatenation here, using .=
$deel .= '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
}
每當您迭代循環時, $deel
都會被覆蓋。
您可以將每個迭代添加到數組,也可以使用.=
將其附加到$deel
:
數組法
$deel = []; //creating an empty array
while ($row = mysqli_fetch_assoc($result)){
$deel[] = /* pushing to the array */ '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>';
}
//echo data
foreach($deel as $d) echo $d;
追加方法
$deel = ""; //creating empty string
while ($row = mysqli_fetch_assoc($result)){
$deel .= /* appending to string */ '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>';
}
//echo data
echo $deel;
由於在while循環中使用等號,因此$deel
變量不斷被覆蓋。 這就是為什么它最終取最后一行的值。
為了解決這個問題,您可以將字符串連接在一起。 在PHP中,您可以使用.=
運算符進行連接和分配:
// Instantiate $deel
$deel = '';
$query = "SELECT * FROM `Artiekel`";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result))
$deel .= '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
}
echo $deel;
根據包含此代碼的位置,您可能還希望脫離PHP。 適用於快速而骯臟的頁面,不適用於將數據庫和視圖邏輯混合在一起。
<?php
...
while ($row = mysqli_fetch_assoc($result)): ?>
<article>
<header>
<hgroup>
<h2><?= $row['titel'] ?></h2>
<h3>door: <?= $row['auteur'] ?></h3>
</hgroup>
</header>
<p><br><?= $row['inhoud'] ?></p>
<footer>
<p><?= $row['datum'] ?></p>
</footer>
</article>
<?php endwhile;
使用.=
而非僅=
$deel =""; //has to be defined outside the loop
$query = "SELECT * FROM `Artiekel`";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)){
$deel .= '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
}
echo $deel;
為了便於理解:這將打印$ deel = $ deel + [來自html的內容]
至少有兩種方法可以執行此操作。#1,構建一個LONG字符串並在while循環外打印,或打印每一行。
方法#1一個LOOOONG var ..使用.=
將新結果附加到上一個..
$query = "SELECT * FROM `Artiekel`";
$result = mysqli_query($link, $query);
$deel =''; //create a var to append to
while ($row = mysqli_fetch_assoc($result)){
// append to $deel var
$deel .= '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
} echo $deel; unset($deel); //print it, then free up system RAM
方法2,打印每一行。我的首選方法,也可能是您的首選方法,因為它只需要一行代碼。
$query = "SELECT * FROM `Artiekel`";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)){
$deel = '
<article>
<header>
<hgroup>
<h2>'.$row['titel'].'</h2>
<h3>door: '.$row['auteur'].'</h3>
</hgroup>
</header>
<p><br>
'.$row['inhoud'].'
</p>
<footer>
<p>'.$row['datum'].'</p>
</footer>
</article>
';
echo $deel; //printed inside the loop, so it isn't overwritten
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.