經驗交流

使用者自定欲呈現的資料內容

問題說明
 在通訊錄中有「暱稱」、「姓名」、「電話」、「行動電話」與「地址」等五個欄位的資料。使用者若只想查看部份欄位的內容,而非全部時,我們可以怎麼做呢?

我的做法
 我們必須先提供一個欄位勾選的介面,供使用者選取希望呈現的資料內容。
......

<form name="DemoForm" action="X_18_demo2.php" onsubmit="return Final_Check( );">
  請勾選希望顯示的資料欄位:
  <input type="checkbox" name="item_1">暱稱 
  <input type="checkbox" name="item_2">姓名 
  <input type="checkbox" name="item_3">電話 
  <input type="checkbox" name="item_4">行動電話 
  <input type="checkbox" name="item_5">地址
  <br><br>
  <input type="submit" name="toSubmit" value="確定">
</form>

......
 在這個範例中,我還加入了一項簡單的檢查,以確定使用者至少已勾選一個欄位。


 接下來,我們再依照使用者的選擇結果,顯示其所需的內容。
......

<?
// 依選取項目組合出 SQL 字串
$sql = "select ";
if ( $item_1 == "on" ) $sql .= "nickname, ";
if ( $item_2 == "on" ) $sql .= "realname, ";
if ( $item_3 == "on" ) $sql .= "phone, ";
if ( $item_4 == "on" ) $sql .= "m_phone, ";
if ( $item_5 == "on" ) $sql .= "address ";

// 若 sql 字串末尾有多餘的逗號時,去除之
if ( substr($sql, -2) == ", " ) $sql = substr($sql, 0, strlen($str)-2) . " ";

$sql .= "from demo_friend ";
?>

......
 當五個欄位全被使用者勾選時,我們可以用 select nickname, realname, phone, m_phone, address from demo_friend 這段語法來查詢。但是,使用者不打算查閱所有欄位時,我們得將那部份給剔除掉。
 此外,若使用者未選取「地址」時,該 SQL 字串將成為 select nickname, realname, phone, m_phone, from demo_friend,在 m_phone 之後多了個逗號,所以要加上一個「去除多餘逗號」的程序。

 在顯示資料時,由於使用者選取的欄位數不固定,所以我們一次讀出整個資料列(ROW),再以 While 迴圈逐一讀取各個欄位的值:
......

<?
$result = mysql_fetch_row($rs_f);
while ( list($no, $content) = each($result) ) {
  echo "<td class='myFont_12W'>";
  echo $content;
  echo "</td>";
}
?>

......

範例 「使用者勾選」原始碼 「資料呈現」原始碼
經驗交流