簡體   English   中英

通過mysql循環的東西

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM