通过mysql循环的东西

时间:2016-11-09 17:02:26

标签: php 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>

';

}

所有变量都是荷兰语,但并不重要。

你在这里看到的是制作一篇文章的代码,最后一篇。我知道为什么会这样做。

5 个答案:

答案 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
}