我正在创建一个“新闻”网站(仅供练习)。 我在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>
';
}
所有变量都是荷兰语,但并不重要。
你在这里看到的是制作一篇文章的代码,最后一篇。我知道为什么会这样做。
答案 0 :(得分:2)
更改循环,以免覆盖$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>
';
}
答案 1 :(得分:0)
每当你迭代循环时,$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;
答案 2 :(得分:0)
由于您在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;
答案 3 :(得分:0)
使用.=
代替=
$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的内容]
答案 4 :(得分:0)
至少有两种方法可以做到这一点..#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
}