Re: [請益] 有關php架站的問題

看板PHP作者 (ChrisLiu)時間16年前 (2009/05/28 10:24), 編輯推噓4(405)
留言9則, 6人參與, 最新討論串2/2 (看更多)
: 這是有關設計一個簡單的報名系統的問題... : [題目] 請在4個小時內作出一學生課程報名系統 功能如下: : 1.各科系學生基本資料查詢 : 可以<顯示><新增><刪除><更新>各班科系的學生基本資料 : 2.各開設課程簡介查詢 : 可以<顯示><新增><刪除><更新>目前開設的課程名稱 共有的功能,可以寫在同一個頁面來處理 <顯示> SELECT * FROM TABLENAME ORDER BY `id`; 基本上只有 TABLENAME 不一樣 只要讓 TABLENAME 動態調整就可以把學生基本資料和課程查詢的撈DB部份做好 <新增> 欄位名稱應該不同,似乎不太好偷懶 <刪除> DELETE FROM TABLENAME WHRER `id` = '{$id}'; 同顯示 <更新> 同新增 所以基本上,新增刪除更新可以寫在同一頁來處理 我的習慣是會把要過濾使用者輸入的頁面寫在一起 我可能會用個 action.php 來接所有的表單 <?php $tableName = ''; switch($_POST['type') { case 'student' $tableName = 'stuedneInfo'; break; case 'class' $tableName = 'classInfo'; break; } switch($_POST['actType']) { case 'update': // 把收到的變數經過 html特殊字串、SQL injection 的處理 // 更新到 DB break; case 'delete': // 檢查要刪除的該筆資料 // 從 DB 中刪除 break; case 'create': // 同 update // 新增到 DB break; } ?> 這樣就不用寫三個 php 來接了。 不過這當然是比較大略的架構,實際上用的時候大概會多更多權限判斷或是檢查 referer、session 之類的。 至於顯示的話,我會習慣另外寫成 function 放在另外一個檔案 : 3.報名系統: : <1>學生依科系及座號登入後顯示基本資訊及所有課程 : 並提供學生顯示是否有報名修課 及新增報名修課及退課功能 登入的部份就要知道 session 的用法 如果資料庫設計的好,應該是 join 一下就好了 新增報名與退課,其實就是新增與刪除的動作,可以一併寫到上面的 action.php 只有欄位名稱與變數名稱要修改一下,不然程式的重複度很高 複製貼上就好 : <2>管理員登入查詢 : 提供一管理員帳號(admin/admin)登入後可以選擇觀看: : (1)依課程觀看該課程報名人數 : (2)依各科系觀看該科系所以學生修課狀況 : (3)依學生姓名查詢該學生修課狀況 一樣是登入的時候設定好 session 的變數(來當作權限判斷) 一般來說如果 admin 有審核之類的動作的話, 我會把 admin 專用處理表單的部份另外獨立寫出來,可能類似 adminAction.php 架構就跟上面一樣 : ================================================================ : 我現在已經有大略做出這個報名系統... : 但是所花的時間卻非常非常的久...(已經做了好幾天了) : 想請教版上大家自己是否有哪些地方要再加強或觀念不對的 : 我的做法是這樣子: : 1.先規劃資料庫: : 分成三個資料庫 student , course , sign : student: 學生基本資料 (第一小題使用) : course : 課程資訊 (第二小題使用) : sign : 單純[stu_no][course_no]兩個欄位 : (由student ,course join出給第三題使用) : 2. 做一個簡單html網頁版型的函式 : do_html_header(); : do_html_footer(); : 3. 做存取資料庫的函式庫 : exec_query( $query_string ); : 4. 做一頁面提供選擇班級 : select_class.php : <? : do_html_header(); : display_select_form(); //提供選擇班級的form : do_html_fooer(); : ?> : 5. 做一頁面提供顯示學生基本資料: show_student.php : <? : do_html_header(); : display_student_form(); //顯示學生基本資料 : do_html_footer(); : ?> : 6. 做三個頁面分别作為提供<新增><刪除><更改>學生單筆基本資料 : : new_student.php delete_student_.php update_student.php : 7. 再做三個頁面分別根據 6.所做的三個頁面再做資料庫的變動 : ================================ 第一題大致完成 ===================== : 第一小題的解題流程大致是這個樣子 : 但我光在coding這些程式碼就已經花掉了至少3 5個小時 : 這還不加上看完題目後 想流程及架構的時間... : 想請教版上的大家 我應該要怎麼規劃這個系統 讓整個架構更精簡... : 使其能在短短四小時完成 : 感謝大家看完這長長一串文章... 要讓架構更精簡我覺得不是短時間可以達成的… 程式碼越寫越短,就是因為 coder 越來越懶 XD 重複性高的地方就合在一起,能讓程式動態處理就讓他處理 不過還有一些架構與安全的問題,所以不是所有 case 都可以這樣簡化 呃,我覺得這就是寫久了經驗的累積,與對 php 的熟練度 如果非資訊相關科系且又只是作業的話… 四個小時真的有點強人所難啦… 除非你平常在摸 db 設計、security 或是很閒在研究 wordpress、Discuz! 或其他 php 套裝軟體 不然應該是寫得出來就要偷笑了… 話說,考試考這個,老師認真要殺的話…我覺得在學的學生應該很少有人能倖免吧… 你推文有提到,這只是考試「可能」的題目而已 重點是四個小時, 那我覺得你應該先把 http://www.php5.idv.tw/documents/mou/ (不過我打文章的當下,這主機好像…) http://www.1keydata.com/tw/sql/sql.html 這兩個網站記住 XD 然後,你要大概瞭解一般的會員系統或是公告系統、留言板系統的流程與架構 因為大部分功能都可以從這邊做變化 會員管理不外乎就是,註冊審核登入修改刪除, 資料庫的話可能要考慮 md5 sha1 來存密碼,sql injection 與 xss attack session 的用法也要瞭解 公告系統比較簡單,就是新增修改移除顯示,頂多加上顯示的期間 不過這在 sql 查詢的時候就可以做了 WHERE `date` between '$start' and '$end' 留言板的話似乎也差不多,看要不要加上 captcha 直接 google://captcha php 可以找到不少範例 另外要知道的可能就是檔案上傳的相關處理… 一些安全性設定或放在 web 以外的資料夾等等 我是覺得,如果考試考到 gd 就太超過點了… (這麼多函式鬼才記得起來) 不過無聊的話可以看看… google://gd php 縮圖 也有不少範例… 呃,我回的好像也沒什麼重點= = 都是想到什麼就打什麼@@ 希望能對你有幫助… -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.145.202.66

05/28 10:54, , 1F
寫的很好給個推
05/28 10:54, 1F

05/28 11:04, , 2F
跟我一樣 我都是用engine.php XD
05/28 11:04, 2F

05/28 11:34, , 3F
找對library應該可以省很多事情 adodb, smarty, pear
05/28 11:34, 3F

05/28 11:38, , 4F
推~
05/28 11:38, 4F

05/28 13:22, , 5F
那我先推 pear MVC CodeIgniter
05/28 13:22, 5F

05/28 19:34, , 6F
沒提到 library 的原因是不一定每個 case 都可以用…
05/28 19:34, 6F

05/28 19:34, , 7F
所以我大概都會用自己包的簡易 class 來處理一些常用
05/28 19:34, 7F

05/28 19:35, , 8F
的功能 :p 而且我也不會忽然去做 mssql 或是其他資料
05/28 19:35, 8F

05/28 19:36, , 9F
庫的 case XD 因此自己包的 class 精簡又比較好修改
05/28 19:36, 9F
文章代碼(AID): #1A7VN0Mk (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1A7VN0Mk (PHP)