[請益] 使用者可挑選想要顯示的欄位.如何做?

看板PHP作者 (貝爾菲格諾)時間9年前 (2015/07/28 11:40), 9年前編輯推噓4(4027)
留言31則, 8人參與, 最新討論串1/1
我是PHP新手鞭小力點~~ 我有一個資料表 內有20個欄位 每個欄位和內容全部ECHO出來沒問題 那現在我想做一個功能是 使用者可選擇他想看哪些欄位 例如我有欄位A 欄位B 欄位C 我原本的網頁是每個欄位都印出來 那我想讓使用者可選擇只想顯示的欄位,例如可挑選顯示A C 或 B C欄位 我想呈現的形式是做核取方塊Checkbox讓使用者去勾, 痾但想來想去沒什麼方向... 因為也不是要存資料庫是要看勾選的去顯示資料和欄位 這只是我想到的一種形式,當然如果有更好或說更容易的方式希望大家給我建議 希望給點方向,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.217.28 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1438054856.A.4AD.html

07/28 11:48, , 1F
display:none
07/28 11:48, 1F

07/28 11:49, , 2F
SELECT `欄位1`,`欄位2` FROM `table`
07/28 11:49, 2F

07/28 11:52, , 3F
這是Javascript的事
07/28 11:52, 3F

07/28 11:53, , 4F
回樓上,好像是這樣..想想這跟後台沒關係
07/28 11:53, 4F

07/28 12:04, , 5F
全部拉出來再切換要顯示的內容,那是javascript
07/28 12:04, 5F

07/28 12:05, , 6F
但如果是會跳頁,根據條件重拉,那是php也沒錯
07/28 12:05, 6F

07/28 12:10, , 7F
就checkbox給user勾一勾,form送回來看他勾什麼
07/28 12:10, 7F

07/28 13:03, , 8F
dataTable.js
07/28 13:03, 8F

07/28 13:17, , 9F
有勾的就加到SELECT stmt裡面 記得養成sanitation的
07/28 13:17, 9F

07/28 13:17, , 10F
好習慣 form送回來的字串比對以後才能用
07/28 13:17, 10F

07/28 13:18, , 11F
以基本練習而言這樣最直接 js啥的以後再玩就好
07/28 13:18, 11F
$sql="SELECT * FROM bag WHERE id = '{$conid}' "; $result=mysql_query($sql); //如果查到的記錄筆數大於 0, 便使用迴圈顯示所有資料 if (mysql_num_rows($result) >0){ echo "<table border='1' > <tr> <td>序號</td> <td>發包日期</td> <td>專案別</td> ..... </tr>"; while ($row = mysql_fetch_array($result)) { echo "<tr><td>{$row['序號']}</td> <td>{$row['發包日期']}</td> <td>{$row['專案別']}</td> ... </tr>"; } echo '</table>'; } 以上是原始的程式碼 <?php $field = $_POST ["field"]; //$myallsport = implode (",", $field); //echo $myallsport; if (isset($field)) { for($i=0;$i<Count($field);$i++) { echo $field[$i] . "<br>"; } } ?> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> 請勾選您想顯示的項目<br> <input type="checkbox" name="field[]" value="序號" > 序號<br> <input type="checkbox" name="field[]" value="發包日期" > 發包日期<br> <input type="checkbox" name="field[]" value="專案別" > 專案別<br> <input name="submit" type="submit" value="送出" class="myButton" /> </form> 目前可以做到勾什麼顯示什麼 放到sql描述的話 $sql="SELECT * $field[$i] FROM bag WHERE id = '{$conid}' "; 這樣方向對嗎? 試了一下 痾 好像不能這樣寫...

07/28 14:35, , 12F
不太懂sanitation?環境衛生?
07/28 14:35, 12F
※ 編輯: asd56799001 (61.221.217.29), 07/28/2015 14:48:32

07/28 14:36, , 13F
sanitation就是說 建一個table內欄位表 然後form收回來
07/28 14:36, 13F

07/28 14:37, , 14F
的欄位名稱跟這個表對照 有符合的才寫進SQL裡面
07/28 14:37, 14F

07/28 14:38, , 15F
不然別人把form內容改掉再submit 你就可能被黑
07/28 14:38, 15F
※ 編輯: asd56799001 (61.221.217.29), 07/28/2015 14:57:59

07/28 15:02, , 16F
你的意思是勾選的欄位再建一個表去新增進去
07/28 15:02, 16F

07/28 15:04, , 17F
然後再跟原本的表比對才寫進SQL,是這意思嗎?
07/28 15:04, 17F

07/28 15:25, , 18F
想問這功能有什麼關鍵字嗎?依描述查都偏蠻多的..
07/28 15:25, 18F

07/28 15:29, , 19F
不是資料表啦 就一個陣列啦
07/28 15:29, 19F

07/28 15:29, , 20F
有那種函數可以得知資料表裡面有哪些欄位 查好變成一個
07/28 15:29, 20F

07/28 15:30, , 21F
陣列以後 逐個檢查form收回來的欄位名有沒有在裡面
07/28 15:30, 21F

07/28 15:31, , 22F
檢查通過的欄位名字才把他implode起來組成SQL述句
07/28 15:31, 22F

07/28 15:32, , 23F
然後才查詢 在此之前都不是資料庫的工作
07/28 15:32, 23F

07/28 15:34, , 24F
這步很重要但是對練習而言有點麻煩 可以暫時先跳過
07/28 15:34, 24F

07/31 17:09, , 25F
我已經可以做到勾甚麼查什麼內容了
07/31 17:09, 25F

07/31 17:10, , 26F
但我上面的欄位表格無法看到我下面的變數
07/31 17:10, 26F

07/31 17:10, , 27F
因為我是靠那筆欄位有沒有該內容去顯示內容的Y
07/31 17:10, 27F
<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <link rel="stylesheet" type="text/css" href="table_CSS.css" /> <title>此專案內容總覽</title> <style type="text/css"> </style> <script src="OpenWin.js"></script> </head> <body> <?php $conid = $_GET['conid']; $cyear = $_GET['cyear']; $positionid = $_GET['positionid']; ?> <input type ="button" onclick="javascript:location.href='year.php'" value="回 首頁"> <input type ="button" onclick="history.back()" value="回到上一頁"></input> <input type ="button" onclick="javascript:location.href= 'indeXa.php?anme=add&&newcaseid=<?php echo $conid; ?>&&cyear=<?php echo $cyear; ?>&&positionid=<?php echo $positionid; ?>'" value="建立新內容"> <input type="button" onclick="OpenWin('checkbox9_1.html')" value="選擇欲顯示的 欄位" ><br> <!----<input type="checkbox" onclick="var yes = getElementById('yes'); yes.style.display=yes.style.display=='none'?'':'none';"/>----> <form name="XXX" method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="checkbox" name="sport[]" value="序號"><label>序號</label><br> <input type="checkbox" name="sport[]" value="發包日期"><label>發包日期 </label><br> <input type="checkbox" name="sport[]" value="專案別"><label>專案別</label><br> <input type="checkbox" name="sport[]" value="發案者"><label>發案者</label><br> <input type="checkbox" name="sport[]" value="委外類別"><label>委外類別 </label><br> <input type="checkbox" name="sport[]" value="委外工作內容"><label>委外工作內容 </label><br> <input type="checkbox" name="sport[]" value="外包人員"><label>外包人員 </label><br> <input type="checkbox" name="sport[]" value="外包金額"><label>外包金額 </label><br> <input type="checkbox" name="sport[]" value="分期"><label>分期</label><br> <input type="checkbox" name="sport[]" value="比例"><label>比例</label><br> <input type="checkbox" name="sport[]" value="分期金額"><label>分期金額 </label><br> <input type="checkbox" name="sport[]" value="扣款"><label>扣款</label><br> <input type="checkbox" name="sport[]" value="扣款事由"><label>扣款事由 </label><br>銔N<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <link rel="stylesheet" type="text/css" href="table_CSS.css" /> <title>此專案內容總覽</title> <style type="text/css"> </style> <script src="OpenWin.js"></script> </head> <body> <?php $conid = $_GET['conid']; $cyear = $_GET['cyear']; $positionid = $_GET['positionid']; ?> <input type ="button" onclick="javascript:location.href='year.php'" value="回 首頁"> <input type ="button" onclick="history.back()" value="回到上一頁"></input> <input type ="button" onclick="javascript:location.href= 'indeXa.php?anme=add&&newcaseid=<?php echo $conid; ?>&&cyear=<?php echo $cyear; ?>&&positionid=<?php echo $positionid; ?>'" value="建立新內容"> <input type="button" onclick="OpenWin('checkbox9_1.html')" value="選擇欲顯示的 欄位" ><br> <!----<input type="checkbox" onclick="var yes = getElementById('yes'); yes.style.display=yes.style.display=='none'?'':'none';"/>----> <form name="XXX" method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="checkbox" name="sport[]" value="序號"><label>序號</label><br> <input type="checkbox" name="sport[]" value="發包日期"><label>發包日期 </label><br> <input type="checkbox" name="sport[]" value="專案別"><label>專案別</label><br> <input type="checkbox" name="sport[]" value="發案者"><label>發案者</label><br> <input type="checkbox" name="sport[]" value="委外類別"><label>委外類別 </label><br> <input type="checkbox" name="sport[]" value="委外工作內容"><label>委外工作內容 </label><br> <input type="checkbox" name="sport[]" value="外包人員"><label>外包人員 </label><br> <input type="checkbox" name="sport[]" value="外包金額"><label>外包金額 </label><br> <input type="checkbox" name="sport[]" value="分期"><label>分期</label><br> <input type="checkbox" name="sport[]" value="比例"><label>比例</label><br> <input type="checkbox" name="sport[]" value="分期金額"><label>分期金額 </label><br> <input type="checkbox" name="sport[]" value="扣款"><label>扣款</label><br> <input type="checkbox" name="sport[]" value="扣款事由"><label>扣款事由 </label><br>銔N <input type="checkbox" name="sport[]" value="實付金額"><label>實付金額 </label><br> <input type="checkbox" name="sport[]" value="交件日期"><label>交件日期 </label><br> <input type="checkbox" name="sport[]" value="請款日期"><label>請款日期 </label><br> <input type="checkbox" name="sport[]" value="付款日期"><label>付款日期 </label><br> <input type="checkbox" name="sport[]" value="請款憑據"><label>請款憑據 </label><br> <input type="checkbox" name="sport[]" value="備註"><label>備註</label><br> <input type=submit name=ok value="送出"><br> <form> <?php @header('Content-Type: text/html; charset=utf-8'); include("mysql.inc.php"); if ($conid !='' ){ $sql="SELECT * FROM `case` WHERE id = '{$conid}' "; $result=mysql_query($sql); $row_3=mysql_fetch_array($result); $concaid=$row_3['caseid']; echo "<a href='year.php'>$cyear</a>a\鵔懒 <input type="checkbox" name="sport[]" value="實付金額"><label>實付金額 </label><br> <input type="checkbox" name="sport[]" value="交件日期"><label>交件日期 </label><br> <input type="checkbox" name="sport[]" value="請款日期"><label>請款日期 </label><br> <input type="checkbox" name="sport[]" value="付款日期"><label>付款日期 </label><br> <input type="checkbox" name="sport[]" value="請款憑據"><label>請款憑據 </label><br> <input type="checkbox" name="sport[]" value="備註"><label>備註</label><br> <input type=submit name=ok value="送出"><br> <form> <?php @header('Content-Type: text/html; charset=utf-8'); include("mysql.inc.php"); if ($conid !='' ){ $sql="SELECT * FROM `case` WHERE id = '{$conid}' "; $result=mysql_query($sql); $row_3=mysql_fetch_array($result); $concaid=$row_3['caseid']; echo "<a href='year.php'>$cyear</a>a\鵔懒 //做一個欄位陣列 $sql = "select * from bag"; $result = mysql_query($sql); $arr = mysql_num_fields($result) -1; //取得欄位總數去id欄位 for ($i=0;$i<=$arr;$i++){ $fields[] = mysql_field_name($result,$i);//取得指定欄位的名稱函數 } if(!empty($_POST ['sport'])){ $sport = $_POST ['sport']; } else{ $sport = split("," , "序號,發包日期,專案別,發案者,委外類別,委外工作內容,外包 人員,外包金額,分期,比例,分期金額,扣款,扣款事由,實付金額,交件日期,請款日期,付款 日期,請款憑據,備註"); } $result777 = array_intersect ($sport, $fields); //$sql="SELECT * FROM bag WHERE id = '{$conid}' "; $sql="SELECT ".implode (",", $result777)." FROM bag WHERE id = '{$conid}' "; $result=mysql_query($sql); //如果查到的記錄筆數大於 0, 便使用迴圈顯示所有資料 if (mysql_num_rows($result) >0){ echo "<table border='1' >"; echo "<tr>"; echo "<td>序號</td>"; echo "<td>發包日期</td>"; echo "<td>專案別</td>"; echo "<td>發案者</td>"; echo "<td>委外類別</td>"; echo "<td>委外工作內容</td>"; echo "<td>外包人員</td>"; echo "<td>外包金額</td>"; echo "<td>分期</td>"; echo "<td>比例</td>"; echo "<td>分期金額</td>"; echo "<td>扣款</td>"; echo "<td>扣款事由</td>"; echo "<td>實付金額</td>"; echo "<td>交件日期</td>"; echo "<td>請款日期</td>"; echo "<td>付款日期</td>"; echo "<td>請款憑據</td>"; echo "<td>備註</td>"; echo "</tr>"; while ($row = mysql_fetch_array($result)) { echo "<tr>"; if($row['序號']!=""){echo "<td>{$row['序號']}</td>";} echo "<td>{$row['發包日期']}</td>"; echo "<td>{$row['專案別']}</td>"; echo "<td>{$row['發案者']}</td>"; echo "<td>{$row['委外類別']}</td>"; echo "<td>{$row['委外工作內容']}</td>"; echo "<td>{$row['外包人員']}</td>"; echo "<td>{$row['外包金額']}</td>"; echo "<td>{$row['分期']}</td>"; echo "<td>{$row['比例']}</td>"; echo "<td>{$row['分期金額']}</td>"; echo "<td>{$row['扣款']}</td>"; echo "<td>{$row['扣款事由']}</td>"; echo "<td>{$row['實付金額']}</td>"; echo "<td>{$row['交件日期']}</td>"; echo "<td>{$row['請款日期']}</td>"; echo "<td>{$row['付款日期']}</td>"; echo "<td>{$row['請款憑據']}</td>"; echo "<td>{$row['備註']}</td>"; echo "<td><input type=submit name=ok value='刪除' onclick=\"if(confirm('您確定送出嗎?')) { window.location.href='content_delete.php?del={$row['序號 ']}&&newcaseid={$conid}&&cyear=$cyear&&positionid=$positionid&&caseid=$caseid';return true}else return false\"> </td> <td><input type='button' value='編輯' onclick=\"self.location.href='indeXa.php?edit={$row['序號 ']}&&anme=edit&&newcaseid={$conid}&&cyear=$cyear&&positionid=$positionid'\"> </td></tr>"; $hhh = $row['id']; } echo "</table>"; } if($hhh == null){ echo "目前{$concaid}裡並沒有內容哦!請新增新內容哦!"; echo '<br>'; } else{//計算目前資料總筆數,如果有內容才計算 $sql="select * from bag WHERE id = '{$conid}'"; $result=mysql_query($sql); $row = mysql_num_rows($result) ; echo "目前總共有{$row}筆"; } ?> </body> </html> ※ 編輯: asd56799001 (61.221.217.28), 07/31/2015 17:16:20

07/31 17:19, , 28F
順便附上檔案https://goo.gl/TQgExs希望各位大大幫忙
07/31 17:19, 28F

07/31 17:40, , 29F
第98行if就是判斷有無內容是否顯示出來的
07/31 17:40, 29F

08/01 10:26, , 30F
既然你資料欄位名稱跟表格欄位名稱一樣,用撈出來的資
08/01 10:26, 30F

08/01 10:26, , 31F
料欄位去跑迴圈畫表格吧
08/01 10:26, 31F
文章代碼(AID): #1Ljld8Ij (PHP)