《碼上就會:Dreamweaver CS3 PHP、MySQL與AJAX》勘誤表

所有與《碼上就會:Dreamweaver CS3 PHP、MySQL與AJAX》書籍相關的勘誤表將統一放在這一頁。

書籍勘誤

書籍勘誤之「字打反了」篇:

  • 4-6頁elseif誤植為ifelse,4-7頁裡的圖解說明才是正確的。
  • 5-10頁:最後一段粗體字,CHARVAR應該是VARCHAR,內文和表5-3裡的敘述才是正確的。
  • 5-11頁:「註解」內文最後一句:「比起固定欄位的CAHR,VARCHAR耗用較多處理效能」裡的CAHR應改成CHAR

[2007/9/25 更新]

因編排疏忽,書本10-24頁圖片上方,缺少底下文字和圖片:

查詢CD資料

CD唱片專輯資料由底下的三個資料表組成:

資料表結構
(點圖放大)

因此,底下的SQL將能取出結合cd_albums與cd_pubs資料表的資料集:

[2008/1/21 更新]

補充文件: 使用PHP程式一次上傳多個檔案

[2008/3/4 更新]

將書本光碟OK資料夾裡的guestbook/index.htm檔之中的swapImg()切換圖像自訂函數,修改成書本3-46頁所列舉的程式:

<script language="JavaScript" type="text/JavaScript">
<!--
// 切換圖片的程式
function swapImg (linkObj) {
    var fullPath = linkObj.childNodes[0].src;
    var fileName = fullPath.substring(fullPath.lastIndexOf("/") + 1, fullPath.length);
    document.getElementById("myIcon").src = fullPath;
    document.getElementById("icon").src = fileName;
}
//-->
</script>

請按此連結下載更新後的index.php檔

[2008/3/25 更新]「AJAX版本的用戶註冊介面」程式修正

書本9-50頁的用戶註冊介面程式,透過 "userchecker.php" 檢查用戶輸入的帳號是否已經被註冊。光碟裡的範例檔採用 "connUers.php" 資料庫連線設定檔,連結到 "userdata" 資料表。後來筆者整理範例檔時,把 "userdata" 資料表改名成 "users",並放到 "connPHPbook.php" 連線設定檔所指向的 "swf_php" 資料庫,但是我忘了修改 "userchecker.php"範例的連線設定。

底下紅色字體部分是錯誤的:

資料庫連線設定錯誤

要改成這樣:

正確的資料庫連線設定

請按此連結下載修正後的 "userchecker.php" 檔

[2008.5.6補充] 解決FCKeditor 無法上傳檔案的問題

有讀者遇到 FCKeditor 無法上傳的問題。原因出在 WWW 伺服器的系統是 Linux/Unix,會區分大小寫。FCKeditor 在新增資料夾時,全部採用英文小寫命名,例如,存放「影像檔」的資料夾名稱叫做 "image"。然而,使用 FCKeditor 的「上傳」面版上傳檔案之後,它將把上傳的影像檔存入 "Image"(資料夾首字母大寫)的路徑之下。

Windows 作業系統不區分大小寫,所以不會發生問題,但是 Linux/Unix 系統會區分,因而出錯了。

請修改 FCKeditor 安裝路徑裡的 upload.php 檔,預設的安裝路徑如下:

C:\AppServ\www\fckeditor\editor\filemanager\upload\php

開啟之後,在大約第69行的位置可以找到底下這兩行敘述:

$arAllowed	= $Config['AllowedExtensions'][$sType] ;
$arDenied	= $Config['DeniedExtensions'][$sType] ;

請在這兩行的下一行,加入底下的敘述,透過 PHP 的「把英文字母轉換成小寫」strtolower() 函數,將資料夾路徑名稱轉成小寫:

$sType = strtolower($sType);

修改完畢後存檔,就能解決這個問題了。


[2008.5.20補充] 修正身份證號碼尾碼為 0 時的驗證錯誤

依據「使用JavaScript驗證身份證號碼及其原理」這篇文章的網友Gary回應,該驗證程式無法正確盼讀身份證號碼尾碼為 0 的情況,請將書本光碟 "www\bbs" 資料夾裡的 checkID.txt 檔,替換成底下的程式,謝謝!

// 自訂身份證驗證程式
function checkID(idStr){
	// 依照字母的編號排列,存入陣列備用。
	var letters = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 
	    'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 
		'U', 'V', 'X', 'Y', 'W', 'Z', 'I', 'O');
	// 儲存各個乘數
	var multiply = new Array(1, 9, 8, 7, 6, 5, 4, 3, 2, 1);
	var nums = new Array(2);
	var firstChar;
	var firstNum;
	var lastNum;
	var total = 0;
	// 撰寫「正規表達式」。第一個字為英文字母,
	// 第二個字為1或2,後面跟著8個數字,不分大小寫。
	var regExpID=/^[a-z](1|2)\d{8}$/i; 
	// 使用「正規表達式」檢驗格式
	if (idStr.search(regExpID)==-1) {
		// 基本格式錯誤
		return false;
	} else {
		// 取出第一個字元,和最後一個數字。
		firstChar = idStr.charAt(0).toUpperCase();
		lastNum = idStr.charAt(9);
	}
	// 找出第一個字母對應的數字,並轉換成兩位數數字。
	for (var i=0; i< 26; i++) {
		if (firstChar == letters[i]) {
			firstNum = i + 10;
			nums[0] = Math.floor(firstNum / 10);
			nums[1] = firstNum - (nums[0] * 10);
			break;
		} 
	}
	// 執行加總計算
	for(var i=0; i<multiply.length; i++){
		if (i<2) {
			total += nums[i] * multiply[i];
		} else {
			total += parseInt(idStr.charAt(i-1)) * multiply[i];
		}
	}
	// 和最後一個數字比對
	// 規則一:餘數為零,且檢查碼需為零
	if (lastNum == 0 && (total % 10) != lastNum ){
		alert("身份證號碼寫錯了!");
		return false;
	}
	// 規則二:餘數與檢查碼需相符
	if (lastNum != 0 && (10 - (total % 10))!= lastNum) {
		alert("身份證號碼寫錯了!");
		return false;
	}
	return true;
}
Posts created 467

92 thoughts on “《碼上就會:Dreamweaver CS3 PHP、MySQL與AJAX》勘誤表

  1. 感激老師的書~讓我受益良多~
    從未接觸過javascript的我在一開始”更換圖像” 03-45 的部分就卡住了!
    我都按照書上的指示建立完程式碼要瀏覽的時候,卻出現錯誤!
    瀏覽器指示”需要物件” 不知道該如何解決,謝謝老師!

  2. :cry:老師您好!您書中提到的FCKeditor有介紹上傳設定,但為什麼總是出現Invalid file,另外新版FCKeditor 2.51的設定是否有點不同呢?以上謝謝

  3. hi arc:

    請問你是在Windows上測試的嗎?

    請檢查fckeditor安裝路徑底下的 \editor\filemanager\upload\php 裡面,config.php 檔案的設定是否如下(請參閱書本8-42頁說明):

    $Config[‘UseFileType’] = true; // 原本是false
    // ‘uploads’是存放上傳檔的資料夾
    $Config[‘UserFilesPath’] = ‘/uploads/’;
    // 允許上傳的圖檔副檔名
    $Config[‘AllowedExtensions’][‘Image’] = array(‘jpg’,’gif’,’jpeg’,’png’) ;

    另外,在uploads資料夾裡面,請再分別建立 Image 和 Flash 資料夾,分別用來存放上傳的影像和Flash (.swf) 檔。

    jeffrey

  4. :cry:老師您好!我是用windows的IE7.0!我是成功了!不過又出現另一個問題了!我的圖片可以上傳成功!但卻只有數據!圖沒有真正傳上去呢(呈現”X”)!是不是我哪裡還需要調整!我都檢查過了跟老師書上寫的一樣阿!檔名也是沒有用中文阿!真的苦惱!另外請問老師您有在哪間大學的研究所授課嗎?

  5. :sad:uploads老師您好!資料夾裡面沒有圖片!(只有在fckeditor上傳介面上面看到數據但圖片是出現”X”沒顯示圖片),我去看過uploads資料夾內的Image也並沒有圖片!苦惱阿!

  6. hi arc:

    如果直接用書本光碟裡面,已完成的程式碼直接覆蓋,仍舊無法正常運作的話,請將fckeditor資料夾壓縮之後e-mail給我看看,謝謝!

    jeffrey

  7. 老師您好!
    我用OK檔案並把資料匯入資料庫…..一切都OK!資料可以正常讀出!
    不過我在用來做OK檔作測試您書中所講的每個章節.在替換圖像的部份.會出現沒法替換的現象.因為你OK檔的替換圖像連結是”換圖”.所以我也照您書中所提改成”#”.結果一樣沒法換圖!
    然後在script language的地方.跟書中的完成說明也不一樣,所以也是著改成一樣.可是一樣不行!
    我想請教CD裡面的OK檔是您的範例完整的完成檔展示?還是需做什麼修改嗎?
    因為那些Spry功能一樣沒效果!!
    我也把書中CSS樣式表匯入連結了….一樣不行咧!

  8. hi gordon您好:

    抱歉造成您的困擾,OK資料夾裡的guestbook/index.htm檔裡的JavaScript程式,使用了一個叫做“Prototype”的JavaScript程式庫的語法,但是後來我沒有用這個程式庫,卻忘了修改程式碼。

    請將swapImg()函數中的這兩行:

    $(“myIcon”).src=fullPath;
    $(“icon”).value=fileName;

    改成3-46頁所列舉的程式:

    document.getElementById(“myIcon”).src = fullPath;
    document.getElementById(“icon”).src = fileName;

    至於Spry程式庫沒有作用,可能是因為您忘了把 “SpryAssets” 資料夾複製到www路徑。

    再次感謝您的指正!

    jeffrey

  9. 老師您好!
    這次OK了!
    不過你這裡打得不對:
    document.getElementById(”myIcon”).src = fullPath;
    document.getElementById(”icon”).src = fileName;

    要這樣子才行:
    document.getElementById(“myIcon”).src = fullPath;
    document.getElementById(“icon”).src = fileName;

    “myIcon”

  10. 這留言板有限字數嗎?
    我發現我上篇打的字少了一半???
    那ㄟ安ㄋㄟ???:???:

  11. 各位大哥
    幫忙一下我也卡在swapImg()函數中,
    到底要怎麼打
    可否幫幫忙

    document.getElementById(”myIcon”).src = fullPath;
    document.getElementById(”icon”).src = fileName;

    是這樣嗎?
    謝謝

  12. hi lai,

    swapImg()函數如下:

    // 切換圖片的程式
    function swapImg (linkObj) {
    var fullPath = linkObj.childNodes[0].src;
    var fileName = fullPath.substring(fullPath.lastIndexOf(“/”) + 1, fullPath.length);
    document.getElementById(“myIcon”).src = fullPath;
    document.getElementById(“icon”).src = fileName;
    }

    請剪貼上面的程式,取代原本的函數,並重新替換其中的雙引號。稍後我將放上更新檔,謝謝!

  13. 老師你好:
    我在測試第九章的註冊頁面驗證時
    不論怎麼測試,都會顯示”名字已註冊”
    而且我用的是ok資料夾裡的檔案!!
    可否幫幫忙

  14. 謝謝老師這麼快就把答案貼上來!!

    這本書讓我獲益良多…

    很期待老師能再針對php寫些新書!!

  15. 我和’are君’一樣無法上傳檔案,
    在書本ajax文中上傳程式也測試過,
    無法上傳
    但用其他電子相薄,是可以上傳的

  16. 咦…?請檢查一下這兩個config.php檔裡的「上傳資料夾」是否設定正確:

    C:\AppServ\www\fckeditor\editor\filemanager\browser\default\connectors\php\config.php
    C:\AppServ\www\fckeditor\editor\filemanager\upload\php\config.php

    然後在www目錄裡面,新增一個存放上傳檔的資料夾,例如:uploads。

  17. hi ken:

    剛剛測試過了,因為你的伺服器是Linux/Unix系統,會區分大小寫。檔案其實有上傳,但是fckeditor把包含上傳檔的 “images” 路徑寫成 “Images”,所以才找不到檔案。請參閱本頁內文底下的補充說明,謝謝!

    jeffrey

  18. 想請教一下,我照書上9-47頁製作的身分證驗證,為何有些正確的身分證字號,會顯示格式錯誤呢?例如S222373260,這是我的身分證字號,確定是正確的,可不可以請問要如何解決呢?

  19. fckeditor2.6上傳圖片後會做一段網域驗證,是那一段有問題,已參考http://www.mynetblog.cn/post/19.html解決,不過那是asp的,若是php在行282到行312暫時註解就可正常。

  20. 老師您在8-40頁提到 啟用fckeditor的上傳圖片與上傳flash影片功能
    那如果要上傳其他類型的檔案又該如何做呢?

  21. hi 小廖:

    FCKEditor僅提供上傳圖片和Flash影片功能,因為這個軟體的定位是「具備上傳圖片功能的文字編輯器」。如果需要增加其他圖像格式,可以修改 config.php 檔的這個設定:

    $Config[‘AllowedExtensions’][‘Image’] = array(‘jpg’,’gif’,’jpeg’,’png’) ;

  22. 趙老師您好:
    在config.php裡有下面一段

    // Allowed Resource Types.
    $Config[‘ConfigAllowedTypes’] = array(‘File’, ‘Image’, ‘Flash’, ‘Media’) ;

    這不是設定可以上傳的資料夾嗎?怎麼每次都只出現image及flash
    而沒有出現file及media呢?

  23. 小廖:

    FCKeditor的對話方塊,包含上傳影像和Flash影片在內的操作介面,都放在這個資料夾:fckeditor\editor\dialog。從這裡可以看到它並沒有 “file” 和 “media” 上傳介面。

    雖然FCKeditor的官方設定檔包含 media 和 file 的設定,但據我瞭解,那沒有太大的用處。FCKeditor的主要功能是線上編輯器,如果你需要上傳一般檔案的功能,可以自行實作一個。

    jeffrey

  24. 趙老師,您好!
    想請教趙老師有關資料庫關和實作的問題,共有二個問題:
    目前自己已做了會員系統,也做商品管理的功能。問題在商品管理部分,只要是會員都可以新增是沒有問題,但是在修改和刪除部分,只要是會員都可以修改和刪除所有商品。
    以下為問題所在:
    一、自己目前的想法,會員進入商品管理後,商品管理只列出該會員所新增過的商品,這樣的會就不有以上的問題。想把會員資料表(member)的會員帳號 (主鍵),加入商品資料表(product)中會員帳號變成書上寫的(外部鍵),以下是參考書上第六章「使用SQL查詢資料」內容整理的SQL資料查詢語法:
    SELECT member.username, COUNT(product.pid) AS PtNo, (product.title) AS PtName, (product.price) AS PtPrice, (product.postdate) AS Ptpost

    FROM member INNER JOIN product

    ON member.username = product.username

    GROUP BY product.pid, product.title, product.price, product.postdate

    ORDER BY product.postdate DESC;
    以上的想法和SQL資料查詢語法會不會有問題?
    二、在Dreamweaver CS3大致做法,是不是要用新增資料集的方法,但是目前的商品管理已有資料集,如果再新增一個資料集會不會有問題,還有要如何去判斷登入的會員,然後只列出該會員的新增過的商品,就不會產生只要是登入的會員都能修改和刪除的問題。

    以上二個問題麻煩懇請老師指教!

  25. 儲存會員資料的資料表,可以加入一個欄位,設定該會員的權限。例如,該欄位的值可以用 “admin”(管理員), “sysop”(系統管理員), “mandator”(版主)以及”user”(一般用戶)等字串值,來代表該用戶的權限。

    編輯或者刪除資料的PHP網頁,可以透過這個欄位值來判斷用戶是否具有操作的權限。

  26. 感謝趙老師抽空回覆!但是老師提出的方法,還是不能解決在下提出的問題。因為老師的方法是解決權限問題,這部分已經實作完成,問題在於商品管理如果「權限同樣都是會員」的情況之下,要如何辦別各個會員自己所新增的商品,而呈現方式是列出該會員自己新增的商品,而且能對商品做修改、刪除的動作。換句話說,每位會員在商品管理中,只會看到自己新增的商品,並且能對商品做修改、刪除的動作,但是不能看到其他會員的商品管理的商品。
    為了怕老師不明白在下描述,例:以 yahoo的拍賣來說,每位會員(同是一樣的權限)可以新增拍賣,在”拍賣管理(商品管理)”中,每位會員只會看見自己新增拍賣的物品有哪(不會看到別人的拍賣管理中新增的商品),並且可以對這些拍賣的物品做更新(修改),或者是取消(刪除)拍賣的物品的動作」。
    對趙老師感到抱歉,在下對問題沒有敘述清楚,麻煩請趙老師再次指教!

  27. 你可以在商品的資料表加入會員編號或者其他唯一識別會員的欄位,讀取或者編輯商品資料時,就能僅讀取屬於該會員的商品了。

  28. 趙老師,在下經過今天的實作還是不行,下面是個人操作:
    會員資料表的會員編號為(m_id)所以在商品的資料表也新一個欄位會員編號(m_id),其操作欄位”m_id”型態”int(11)” Null為”是”預設值”NULL”。
    之後在新增商品頁面,點了繫結->資料集->設定名稱、連線、資料表,欄位全選,篩選器->無,按下確定。
    然後在伺服器行為->插入記錄,欄:m_id顯示沒有取得值。值:無,按下確定
    完成以上步驟後,進行測試,先用甲的帳號登入商品管理新增商品,再用乙帳號登入商品管理結果可以看見甲帳號商品管理的商品,另外在資料庫的商品資料表的會員編號(m_id)欄位是空的。
    以上的登入頁面、商品管理頁面、商品新增頁面,都有設定限制存取頁面。
    請教老師,在下哪邊程序出了問題,懇請老師指點。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top