Zum Inhalt springen


My Personal Site Ver.5

2008 年 12 月 08 日

動態 N 階選單 By Dreamweaver & PHP MySQL 終極版

1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, average: 4.8 out of 5)
Loading ... Loading ...

很久以前曾經做過一篇 動態兩階選單 的文章,但基本上並不算是一個完成體,因為若真的要拿來用會需要再克服一些問題,今天的很不一樣,這個範例將會克服之前做的所有問題,包括:

  • 這次是圖文版,會比單純的只有影像簡單易懂
  • 範例介紹動態3階層選單,只要你看的懂在幹嘛很容易延伸為更多階層
  • 表單內的所有欄位值處理保存值的問題,包括選單預選值、文字欄位值

後面就開始這個「3+2郵遞區號」的範例製作,你可以點選這裡觀看完成的範例。

 環境與需準備的

基本上這邊所需用的就是一般的Dreamweaver, PHP MySQL環境,不過會用到一個擴充元件來輔助。

 

 資料庫

 既然是一個3+2郵遞區號的範例,而且要介紹到3階層,所以在資料庫這邊就是會有3個資料表,分別記錄縣市(county)、鄉鎮(town)與郵遞區號(zip)的資訊。

01.PNG

county資料表:

02.PNG

town資料表:

其中的 tCounty 欄位對應著 county 資料表中的主鍵欄位 cID,以前面兩筆記錄 tCounty=1 為例,所以它們是屬於 county 資料表中 cID 欄位為 1 的記錄、也就是台北縣的鄉鎮。

03.PNG

zip資料表:

同樣的在這邊 zTown 欄位亦對應著 town 資料表中的主鍵欄位 tID。

04.PNG

而這三個資料表中的cName、tName、zName欄位值都會用來作為選單的「標籤」,選單「值」的部分就會用到 county 與 town 的主鍵欄位,好讓它們下一層的選單得以篩選出所需的記錄作為選項。

 

頁面

接著是頁面的部分名稱為 dymenu.php,這邊準備了一個文字欄位、三個選單與一個按鈕,置於表單 form1 中。

範例規劃是,在使用者點選選單時能夠將表單內的資訊 POST 給自己處理,且即使選單以外的表單元件已經填寫了資訊,在動作之後值依然能夠保留,講白話就是假設使用者先填了『姓名』,在他點選選單後文字欄位已經填過的資訊依然會被保留,雖然這對  JavaScript  版本的多階選單來講是非常理所當然的,但在這邊是要靠 POST 送出的資訊來重新篩選各個階層選單所需的選項,所以還是要另做處理。

其中:

  • 姓名文字欄位命名為 name
  • 郵遞區號部分選單依序命名為 county、town、zip

所以你可以預料當按下按鈕或是變更縣市 county、鄉鎮 town 選單後表單內的資訊都會 POST 送出,這時就能以$_POST['name']、$_POST['county']、$_POST['town']、$_POST['zip']取得對應的值。

05.PNG

頁次: 1 2 3 4 5

« 被紙割傷…………………………………….. – 觸感不錯 當兵去 »

作者:
Cttlee
日期:
00:04:40
分類:
Dreamweaver
被檢視了:
44,387 次
Tags:
, ,  
Trackback:
Trackback URI

46 則回應

  • At 2009.02.05 14:07, Lank said:

    請問可以分享您的程式碼嗎?
    因為我只知道利用HttpRequest來送出資料給PHP,
    但是PHP怎麼回傳我就不知道了

  • At 2009.03.11 10:25, 直角兄 said:

    Dear cttlee 大大:

    在畫面最上方的「HOME」連結似乎還未更新呢!還是舊的網址喔。

    by 直角兄

    • At 2009.03.14 14:21, Cttlee said:

      當兵 很懶XD
      那時候會動就沒理了

    • At 2009.06.20 01:57, bidezgo said:

      不好意思
      請問大大可有辦法改成ASP+ACCESS版本嗎
      小弟對這個功能已經困擾很久了
      但一直都找不到實際看得懂可用的範例
      這個雖然有教學
      可是也是沒有範例檔可下載學習
      怎麼試都不成功
      http://www.pc-net.com.tw/aspro/article/asp0521.asp?articleid=50

      感謝

      • At 2009.06.23 03:48, Cttlee said:

        語法不同、邏輯一樣
        應該是沒什麼問題的
        pc-net的JS版本只要把選項改掉就可以用了

      • At 2009.06.27 02:32, 初學者 said:

        大大你好
        想要請教你有辦法用mssql寫嗎?…
        我有試著改過你的碼
        但有些語法好像不能><
        我是使用php跟mssql連

        我試了好久
        都不能用><….
        可以幫助我一下嗎?謝謝!

        • At 2009.06.27 22:43, Cttlee said:

          資料庫用什麼應該沒什麼差別吧
          你需要處理資料庫連線、建立資訊集的部分
          這邊的程式碼會不一樣

        • At 2009.07.21 15:24, dadayaha said:

          不好意思,請問為何我們第一層選單跑出來會是問號呢?

        • At 2009.08.05 22:27, 林小白 said:

          請問行為的Submit Form是擴充嗎?我的DW沒那個項目吶 :roll:

          • At 2009.08.06 02:02, 林小白 said:

            拍謝~~我看到了~~是擴允元件沒錯 :oops:

          • At 2009.09.21 09:41, wwy360 said:

            林小白兄…我在擴充元件找不到這個 file,可以放上來嗎??

            • At 2009.09.21 09:44, wwy360 said:

              喔~~我在 yahoo 也找到了~~謝謝

              • At 2009.09.21 15:08, @@ said:

                在哪阿~我找不到耶 可以貼出來嗎~

              • At 2010.03.27 09:35, vicky said:

                您好!
                請教一下~因為我下載的是DWCS4破解版~但擴充元件卻無法安裝~必須要MX才能使用ㄟ~~是因為我的是破解版的關係嗎

                • At 2010.03.27 15:58, vicky said:

                  大大~我還是找不到這個元件ㄟ~~sos

                  • At 2010.03.27 16:30, vicky said:

                    謝謝~~我找到了

                    • At 2010.08.23 18:01, 困惑的人 said:

                      您好:
                      可以也給我那個擴充元件下載點嗎?因為我找不到下載點! :???:

                  • At 2010.03.27 16:58, vicky said:

                    老師您好!
                    我照著步驟做~終於完成了!但我出現了問題
                    1.第一階選項不會停留在我所選擇的項目,但第二階會依照我第一階選項所點選的出現該有的選項.例如:第一階順序為NISSAN.FORD.MAZDA.TOYOTA…無論我怎麼選~第一皆都會跳回NISSAN.但我點選NISSAN的話第二階卻不會出現該廠牌的車款
                    麻煩老師幫我解答

                    • At 2010.03.28 23:51, Cttlee said:

                      這是第三頁處理的東西

                      • At 2010.03.30 10:58, vicky said:

                        thanks!我重新檢查了一遍~~解決了!!因為是新手可能會有很多問題

                      • At 2010.04.02 09:53, vicky said:

                        老師您好!想像您請教您幾個問題~因為我要做的是車輛的選單~1.依下拉式條件選單後再另一個視窗開啟顯示我所選的條件資料2.例如我一次有好幾台同款車輛,我的資料庫該怎麼編輯?如果照以上的做法做是否會出現選擇一個廠牌選單上卻顯示多個同款車型?

                        • At 2010.05.21 09:50, jjlin said:

                          老師您好:
                          拜讀您的大作「精通 Dreamweaver CS4 與 PHP & MySQL 實例整合應用經典」,真的獲益良多,尤其是第一個範例﹣訊息發佈系統,解決了我很多問題。這個多階選單也是很實用的功能,我依照您的教程,也成功完成了。
                          不過最近遇到一個問題,想請教您一下。就是在設計一個人事(會員)管理的時候,估計有(新增、修改、刪除)三個表單,在(新增)時,需要輸入的資料有姓名、生日、興趣、地址…等等,而地址就是使用多階選單構成。在(修改)時,載入了URL參數,篩選出選定的會員資料,但是這個時候若想修改地址時,選單按完,所有載入的資料(姓名、生日、興趣、地址…)都變空白了,我知道是表單POST給自己而造成的,但一直想不出方法。請問要如何才能在(修改)表單保留已載入的資料呢?謝謝您!

                          • At 2010.07.27 06:58, Cttlee said:

                            這裡有cookie啊

                          • At 2010.07.27 03:22, red said:

                            不好意思 可以請問 擴充元件如何下載的嗎?
                            我抓不到,那些國外網頁我也看不懂(哭

                            • At 2010.08.05 22:13, saviorchung said:

                              老師你好:
                              我找老師的步驟完成了”一組”動態選單,可是當網頁中有”第兩組”動態選單的時候,第二個選單卻會被第一個選單影響,應該怎麼設定呢??

                              PS.(1)第一組選單跟第二組選單沒有關係~
                              (2)老師網頁裡面的教學,書裡面都有嗎??

                              • At 2010.08.15 11:07, Cttlee said:

                                URL參數要獨立使用 我猜你兩組都用同樣的URL參數
                                這個選單應該會放在CS5裡

                              • At 2010.08.22 11:00, 困惑的人 said:

                                您好:
                                可以提供動態N階選單範例下載嗎?

                              • At 2010.08.23 17:24, 困惑的人 said:

                                請問flevSubmitForm.mxp擴充元件在那裡可以下載,我上網都找不到,可以告訴我下載點嗎?

                                • At 2010.08.29 18:13, floyd said:

                                  你好 這個範例讓我學了很多
                                  我有一個問題: 我可以做單一個多階動態選單 OR 單一個靜態選單+文字欄位 的多條件搜尋
                                  但是動態選單+文字欄位的建搜尋卻沒有辦法 因為在動態選單的表單必需用POST才能做出 但是搜尋條件的表單卻要用 GET才可以
                                  請問要怎麼解決這個問題? 謝謝

                                  • At 2010.09.04 19:46, Cttlee said:

                                    POST or GET都是你自己可以決定的
                                    沒有說搜尋條件部分的程式一定要用GET or POST

                                    • At 2010.09.05 11:01, floyd said:

                                      我可能問錯問題 在搜尋功能上 要在哪邊加入變數 去判斷是按下按鈕才送出表單呢??

                                      因為搜尋並不是伺服器功能

                                      我自己試著去改 都無法正確做出功能 請老師指教 謝謝

                                      • At 2010.09.08 06:30, Cttlee said:

                                        按下按鈕送出表單是依據form的設置
                                        可以轉至其他頁面

                                        選單就是只有將資訊傳遞給自己

                                        • At 2010.10.04 21:36, floyd said:

                                          老師 搜尋的條件 和顯示頁面我是寫在同一個頁面

                                          我看不出哪邊的程式碼是單單送給表單 還是在網頁上+上變數作搜尋

                                          是$currentPage = $_SERVER["PHP_SELF"];有關的程式碼嗎?

                                          請老師提示謝謝!

                                          • At 2010.10.14 21:00, floyd said:

                                            主要是我搜尋的條件和下拉式選單包在同一個form
                                            當form是post的時候二階下拉選單可以單獨運作 但是搜尋功能就不能用了
                                            當form是get的時候 第一階下拉選單一選就會直接搜尋 不能讓使用者輸入其他的搜尋條件
                                            我試著用form包form 或者其他方法 例如老師敎的+變數讓他暫緩送出表單
                                            可是都失敗 困擾我很久~請老師指點迷津

                                          • At 2010.10.14 22:18, floyd said:

                                            如果有伺服器行為 也就有$editFormAction

                                            就可用老師方法 在伺服器行為之前加入自定變數判斷

                                            但搜尋沒有 只有$currentPage 加變數暫緩送出表單的地方 我找不到適當的地方T.T

                                        • At 2010.10.21 21:54, Cttlee said:

                                          表單動作POST, 目標search_result.php
                                          搜尋資料集做在search_result.php變數改由POST取得

                                          選擇選單項目表單會POST給自己
                                          按下按鈕會將資料POST至search_result.php

                                          • At 2010.10.22 11:34, floyd said:

                                            謝謝 解決了^^

                                            m(_ _)m

                                • At 2010.09.05 02:44, i 琳 said:

                                  關於第十章認證,Auth=1時,如未至信箱點選認證仍可登入,
                                  雖有看過相關文章,但 (1.)資料集的篩選器是設為”Account=表單變數username”嗎? (2.)拖曳該欄位值至登入後導向成功頁面前?應該是指login.php?
                                  到底是拖曳到實際程式碼那裏?
                                  ~這二個問題始終無法解決,可否請作者或各位高手解惑..

                                  以下是我依書本做的(CH 10 - login.php)

                                  <?php
                                  if (!function_exists(”GetSQLValueString”)) {
                                  function GetSQLValueString($theValue, $theType, $theDefinedValue = “”, $theNotDefinedValue = “”)
                                  {
                                  if (PHP_VERSION

                                  • At 2010.09.08 06:31, Cttlee said:

                                    設計沒有不允許登入
                                    你可以試著在設置【登入使用者】伺服器行為時,將『層級來源』的欄位更改為Auth,然後看是要搭配【限制存取頁面】或是利用$_SESSION['MM_UserGroup'] 來處理

                                  • At 2010.10.19 17:09, Jenny said:

                                    不好意思~請問flevSubmitForm.mxp擴充元件要在那裡下載? 我找不到下載點~
                                    可否告訴我一下~謝謝!!

                                    • At 2010.10.21 16:52, floyd said:

                                      在這個網站的dreamweaver分類中
                                      站長有一篇文章分享很多extention
                                      去那篇找找看吧

                                    • At 2010.12.28 02:11, gjoscar said:

                                      不好意思,請問一下為什麼我資料庫輸入中文,用上面的方法做出三階選單以後顯示出?????,而不是顯示中文字,而且照上面做完以後,我的選單從第一階開始就沒連動下去第二三階

                                      • At 2011.06.15 17:49, steven said:

                                        :cool: 有問題再問我唄~

                                      (Required)
                                      (Required, will not be published)