2017-08-28 62 views
1

我想列出按作者分組的書籍列表,並在單選按鈕中填充結果,以便用戶能夠選擇屬於不同作者的書籍。我設法得到結果並按照我想要的方式顯示列表,但是具有相同名稱的單選按鈕使得用戶僅能夠選擇one書籍,即使作者不同。Foreach mysql查詢結果列表

我的數據庫表中的數據看起來是這樣的:

id author books 
1 Author A Book1 
2 Author A Book2 
3 Author B Book3 

我現在的編碼是如下:

$sql = "SELECT author, GROUP_CONCAT(books SEPARATOR ',') as books FROM library GROUP BY author"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     $books = explode(',',$row['books']); 

     $i = 1; 
     echo '<ul class="list-unstyled subjects">'; 
     echo '<li class="bordered" style="width: 30%;">'.$row['author'].'</li>'; 
     echo '<li class="bordered">'; 
     echo '<ul><li><input name="books" type="radio" value="" checked>N/A</li></ul>'; 

     foreach ($books as $book) { 
      echo '<ul>'; 
      echo '<li><input name="books" type="radio" value="'.$book.'" />'.$book.'</li>'; 
      echo '</ul>'; 
     } 

     echo '</li>'; 
     echo '</ul>'; 
     $i++; 
    } 
} 

$sql = NULL; 

所以我試圖把使用在無線電按鈕名稱上每一個編號變量$i,但它會使所有單選按鈕具有不同的名稱。我想讓每個作者羣都有相同的名字。

+1

你似乎從不使用'$ i'。另外,將'$ i'的值設置在你增加它的同一個塊中會使增量變得毫無用處:無論發生什麼情況,'$ i'都將始終等於1。但是,再一次,它不會破壞任何東西,因爲您無論如何都不使用它。 – ksjohn

回答

2

您正在設置$i回到1爲每個作者。您需要在之前將初始化爲while循環。

if ($result->num_rows > 0) { 
    $i = 1; 
    while($row = $result->fetch_assoc()) { 
     $books = explode(',',$row['books']); 

     echo '<ul class="list-unstyled subjects">'; 
     echo '<li class="bordered" style="width: 30%;">'.$row['author'].'</li>'; 
     echo '<li class="bordered">'; 
     echo '<ul><li><input name="books$i" type="radio" value="" checked>N/A</li></ul>'; 

     foreach ($books as $book) { 
      echo '<ul>'; 
      echo '<li><input name="books$i" type="radio" value="'.$book.'" />'.$book.'</li>'; 
      echo '</ul>'; 
     } 

     echo '</li>'; 
     echo '</ul>'; 
     $i++; 
    } 
} 
+0

我沒有放置'$ i',因爲我不知道放置它在哪裏。順便說一句,我試過你的解決方案,這正是我所期待的。謝謝! – Leon