2016-11-09 43 views
0

好吧。這是我的問題。 我正在創建一個「新聞」網站(僅供練習)。 我有我的所有文章在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> 

'; 

} 

所有的變量都在荷蘭,但它其實並不重要。

你在這裏看到的是使一篇文章的代碼,最後一篇。我知道它爲什麼這樣做,但不知道如何解決它...有人可以幫我嗎?

由於提前,

Luuk Wuijster

+2

你覆蓋'$ deel'每一次,所以你只會得到最後一個。 –

+1

用循環的每次迭代覆蓋'$ deel'。或者回顯HTML而不是分配給變量,或者用'。='而不是'='追加它。 –

+0

好吧......那真是太愚蠢了...... P:謝謝你! –

回答

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> 

'; 

} 
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; 
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; 
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內容]

0

至少有2種方式要做到這一點..#1,建立一個長字符串並在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 
} 
相關問題