想請問一下,我想寫一個有關選擇題的程式碼,但是選擇題的選項卻不一定只有四個甚至有可能到五個六個這樣,如果先在資料庫中先新增(如下)
他就會跑出這樣的畫面(如下)
請問這要怎麼改比較好呢?求大大能開個頭,讓我研究OAO謝謝!
程式碼(如下)
<?php
// 建立MySQL的資料庫連接
$link = mysqli_connect("localhost","root",
"1234","learning")
or die("無法開啟MySQL資料庫連接!<br/>");
//echo "資料庫clasesgg開啟成功!<br/>";
$sql = "SELECT topic.topic_id , topic.number , topic.topic ,topic.ans, choose.optionA, choose.optionB,choose.optionC,choose.optionD,choose.optionE from topic,choose WHERE topic.topic_id=choose.topic_id"; //
mysqli_query($link, 'SET NAMES utf8');
if ( $result = mysqli_query($link, $sql) ) {
echo "<b>學生資料: </b><br/>"; // 顯示查詢結果
while( $row = mysqli_fetch_assoc($result) ){
echo "題號 ". $row["topic_id"].""."<h4>問題 ".$row["topic"]."</h4><br/>";
echo "<p>". "<input type='radio' name='radio[]'/>"." A)".$row["optionA"]."</p>"."<BR>";
echo "<p>". "<input type='radio' name='radio[]'/>"." B)".$row["optionB"]."</p>"."<BR>";
echo "<p>". "<input type='radio' name='radio[]'/>"." C)".$row["optionC"]."</p>"."<BR>";
echo "<p>". "<input type='radio' name='radio[]'/>"." D)".$row["optionD"]."</p>"."<BR>";
echo "<p>". "<input type='radio' name='radio[]'/>"." E)".$row["optionE"]."</p>"."<BR>";
}
mysqli_free_result($result); // 釋放佔用記憶體
}
mysqli_close($link); // 關閉資料庫連接
?>
</tbody>
</tbody>
</table>
</div>
如果是我我會這樣寫,不見得正確,僅供參考,如果有大大歡迎來指教
<?php
// 建立MySQL的資料庫連接
$link = mysqli_connect("localhost","root",
"1234","learning")
or die("無法開啟MySQL資料庫連接!<br/>");
//echo "資料庫clasesgg開啟成功!<br/>";
$sql = "SELECT topic.topic_id , topic.number , topic.topic ,topic.ans, choose.optionA, choose.optionB,choose.optionC,choose.optionD,choose.optionE from topic,choose WHERE topic.topic_id=choose.topic_id"; //
mysqli_query($link, 'SET NAMES utf8');
##如果可以確定資料庫的選項option是固定的可以這樣寫,先宣告一個選項的array
$optionArray= array('optionA','optionB','optionC','optionD','optionE');
if ( $result = mysqli_query($link, $sql) ) {
echo "<b>學生資料: </b><br/>"; // 顯示查詢結果
while( $row = mysqli_fetch_assoc($result) ){
echo "題號 ". $row["topic_id"].""."<h4>問題 ".$row["topic"]."</h4><br/>";
##利用optionarray foreach 出來get 那些欄位名稱
foreach($optionArray as $option)
{
if (!empty($row[$option]))
{
##如同留言所說判斷是否為空
echo "<p>". "<input type='radio' name='radio[]'/>"." A)".$row[$option]."</p>"."<BR>";
}
}
}
mysqli_free_result($result); // 釋放佔用記憶體
}
mysqli_close($link); // 關閉資料庫連接
?>
</tbody>
</tbody>
</table>
</div>
把foreach($optionArray as $option)
改為foreach($optionArray as $i => $option)
把echo "<p>". "<input type='radio' name='radio[]'/>"." A)".$row[$option]."</p>"."<BR>";
改為echo "<p><input type='radio' name='radio[]'/> ",chr(65+$i),")",$row[$option],"</p><BR>";
就完美了。
PS1: 上面多個 $i 是為了取序號,給下面用
PS2: 原本 A), B), C), ... 的地方,用 chr(65+$i)產生
PS3: echo 參數無謂的 . 字串串接,改用 , 逗號即可(效率好)
謝謝指教,只是有點好奇用逗號串接與用.有什麼樣的差別?
然後啊忘記了ABC 也是foreach的範圍之一,用chr(65+i)這方法也很聰明!!
<?php
$arr = array($row["optionA"],$row["optionB"],$row["optionC"],$row["optionD"],$row["optionE"]);
echo arrToOptions($arr);
function arrToOptions($arr) {
$sRet = '';
$sRet = $sRet . "==== Start of question ===<BR/>";
$i=65; //選項為 A,B,C
//$i=49; //選項為 1,2,3
foreach ($arr as $one) {
if (!empty($one)) {
$sRet = $sRet . chr($i++) . ") $one<BR/>";
}
}
$sRet = $sRet . "==== End of question ===<BR/>";
return $sRet;
}
?>