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

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

  • 這次是圖文版,會比單純的只有影像簡單易懂
  • 範例介紹動態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

在〈動態 N 階選單 By Dreamweaver & PHP MySQL 終極版〉中有 48 則留言

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

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

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

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

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

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

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

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

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

  8. 關於第十章認證,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

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

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

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

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

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

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

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

    請老師提示謝謝!

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

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

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

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

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

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

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

  16. 您好,我是直接貼上您公開的PHP程式碼修改的,我現在遇到一個問題是,當按下onchange網頁更新時,我其他兩個從資料庫抓的欄位資料會變成空,請問這個要如何解決呢?非常感謝解答。

  17. 老師首先我要先謝謝你的指導文,
    老師在最後的步驟(除錯步驟),我沒有程式語言底子
    所以我找不到地方除錯呢
    請問老師我該如何找到要除錯的地方呢??

留言