《碼上就會: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. 謝謝趙老師的提示,雖然做到現在還沒有成功(看來自己慧根不夠,不適合接觸這個XD),另外,希望老師未來能出版進階實作的書!

  2. 別這麼說…我這幾個月正好很忙碌,沒時間更新網站內容,本週之內我會再仔細檢閱你的問題。

  3. 回覆趙老師,問題終於解決了!透過網友提供的方法,在SQL查詢下選擇$_SESSION[‘MM_Username’]值,然後還要在頁面使用「限制頁面存取」,就可以把問題決了。

  4. 11/1
    趙老師,您好!又有問題要請教,共有兩個問題
    一、關於部落格的面板(css)切換技術,目前網路上流行的部落格網站,有無名、PIXNET、Blogger…等。
    那這些部落格網站的面板(css)切換技術,主要是用cookie或session記錄使用者的面板設定嗎?

    二、在下從網路找到不少關於面板(css)切換的東西。但是,它們都是用cookie或session存放在用戶端,這樣有缺點就是使用者瀏覽器未啟用cookie,下次再進去網頁還是一樣沒有變。如果,加上會員系統,要如何把cookie或session存入資料庫中。以下是找到的範例,因為去試Demo,發現瀏覽器firefox有產生cookie(PHPSESSID),也下載它的範例程式有看見session的字眼,但是不知道要如何把cookie取存方式改成session,存入伺服器端的mysql資料庫中,方便記錄使用者面板切換的資訊。雖然,在書上第九章有介紹有關cookie和session,但是實際要應用卻無從下手。

    以上兩個問題,麻煩請老師指點。

  5. cookie和session都有容量的限制,而且只會反應在目前用戶正在操作的電腦上。因此,通常都是用來存放跨網頁的臨時資料,或者用戶的登入資訊(如:帳號名稱)。

    我看了你提供的範例,它只是用session變數,儲存用在在下拉式選單選用的樣式表連結,例如,底下的敘述代表用戶選取了eins.css檔。

    $stylesheet = ‘<link href="eins.css" type="text/css" rel="stylesheet">’;
    $_SESSION[‘csschanger’]=$stylesheet;

    上面的session和CSS敘述只是一段文字資料,所以你可以把它直接存入text類型的MySQL欄位。

  6. 看了老師的解說,感覺實作不難,在下會嘗試玩玩看,也感謝老師指點!

  7. 老師你好:

    我正在學習第八章~ 目前進度是8-15頁
    遇到了瓶頸~
    我已經完全按照書本的作法
    然後在測試插入資料後~出現了錯誤頁~訊息如下:
    Column ‘newsDesc’ cannot be null

    問題是我這一欄有填資料.並不是空白!
    懇請老師幫我看看是那邊出了問題

    謝謝

  8. 老師你好! 有關chapter 10″新增曲目”問題。書中沒有清楚寫出如何讓資料寫進資料表。因曲目為多重寫入”cd_songs”資料表。

    可以補充此部份嗎?

  9. 老師您好,
    我在第8章使用fckeditor時在該顯示fckeditor的部位
    都出現【找不到網頁】,我直接開啟目錄下ok資料夾的來看也是
    請問我是哪個地方沒弄好嗎?
    謝謝

  10. 老師您好

    有的,不過我已經處理好了,
    不號意思再請教您…
    我發現如果使用fckeditor的話
    在做表單送出前的驗證如果用javasprict的方式好相都抓不到值來驗證
    如spry或chack form
    我試的結果是這樣
    不知老師您的看法…?
    如果不能用這2種方式的話
    請問老師有沒有適合的建議…

    謝謝您

  11. 老師您好

    不好意思我補充一下
    應該說是該欄位透過fckeditor的介面有輸入文字了
    但第一次都抓不到 會顯示空值未輸入所以驗證就不會過
    但再按一次就有抓到 才能送出表單
    也就是說 要按2次才能送出表單
    第一次都是抓不到值…被判斷為未輸入

  12. hi sam:

    根據FCKeditor的JavaScript API文件說明,我們可以透過底下的敘述取得頁面上的FCKeditor欄位的實體:

    var myFCKeditor = FCKeditorAPI.GetInstance(“欄位的名稱”) ;

    底下的敘述可以取得該欄位的內容,並判斷文字長度是否為0,如果是的話,就顯示錯誤訊息:

    if (myFCKeditor.EditorDocument.body.innerText.length<=0) {
    alert(“欄位內容不可以空白”);
    myFCKeditor.EditorDocument.body.focus();
    return false;
    }

  13. cubie您好:
    我這學期使用您的大作當上課用書,學生在學習過程中得到許多的成就
    在此感謝。只是在第十章的部份,addcd.php中並未提到資料繫結的部份
    甚感可惜,可否將此部份的操作過程放到您的網頁中,謝謝。

  14. 你好,請問一下

    我目前在幫忙架設學校的網站,想跟某些銀行網站一樣,放置股價、匯率

    這些即時的訊息,請問要如何呈現,感謝~~

    如以下華南銀行的右下角:
    http://www.hncb.com.tw/

  15. 股價走勢圖通常用Java或Flash製作,再嵌入網頁,以利於呈現生動的互動效果。當然,使用JavaScript配合HTML 5的canvas物件也行,不過考慮到目前瀏覽器的支援性,建議用Java Applet或Flash開發。

  16. 老師你好:
    我在測試第九章的–AJAX版本的用戶註冊介面驗證時
    不論怎麼測試,都會顯示『請檢查用戶名稱!』
    我用的是ok資料夾裡的檔案,
    也將修正後的 “userchecker.php” 檔換過來了
    不知是什麼問題??

  17. 老師你好:
    我是用register_ajax.php這個檔案,也重新下載所附的檔案
    結果還是顯示”請檢查用戶名稱!”
    瀏灠器的錯誤訊息如下:

    行:85
    字元:6
    錯誤:’Spry.Utils’是 null或不是一個物件
    字碼:0
    URL:http://localhost/bbs/register_ajax.php

    不好意思,麻煩您了!

  18. 從你的URL路徑看來,應該是瀏覽器找不到對應的JavaScript (Spry)檔,假設你的Spry程式放在bbs的 ‘SpryAssets’ 路徑,應該是:

    ../SpryAssets/SpryData.js

    而不是原本的:

    ../../SpryAssets/SpryData.js

    其他的.js檔的路徑也要修改。請看看是不是這個問題。

    thanks,
    jeffrey

  19. 老師你好..

    問題解決了
    原來我的www/SpryAssets資料夾內沒有沒有SpryData.js這個檔
    從範例光碟內重新複製整個SpryAssets資料夾後就可以了

    謝謝老師的幫忙!

  20. 老師您好:
    不好意思又來麻煩您…
    我在實作替換圖像的部份,是可以替換,
    但是留完言後,按下確定,圖像還是原來預設的,
    不會變成我所選的圖案,
    請問是哪裏出了問題?

  21. 老師您好:
    我有照7-16頁的方式,將預留影像位置的原始檔改成:
    「icons/」
    但是問題還是一樣
    我發現在3-46上方那張圖的右側的隱藏欄位
    原始的值是”ico4.png”,
    所以我怎麼換圖,都是出現”ico4.png”這張圖。
    如果我將值改成”ico2.png”
    留言的圖案不管怎麼選也就會是”ico2.png”
    麻煩老師幫忙了,謝謝。

  22. 依照7-17頁的步驟3和4設定之後,圖示影像的原始碼,src屬性值部分應該是:

    icons/<?php echo $row_rsGBook[‘icon’]; ?>

    如果圖案始終是固定的,最可能的原因就是你沒有按照第3步驟設定PHP程式。

  23. 老師您好:
    我就是照您書上所寫的修改
    不過還是一樣耶??好奇怪
    您可以將您改好的檔案放上來
    我在下載到我的電腦來試試嗎?謝謝。

  24. hi kevin:

    書本光碟,www\ok\guestbook路徑底下的index.php檔,就是完成品,你可以參考裡面原始碼第271行。

    thanks,
    jeffrey

  25. 請問老師:
    我做到10-27頁的第六個步驟,按下F12預覽,出現「You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 1」的錯誤,我是照您書上所寫的SQL敘述輸入,是我打錯字嗎?還是…

  26. Hi~~趙老師您好

    是少了這隻程式 SpryData.js ,現在已做好了…非常謝謝.

    但我想讓欄位只限輸入英文字元和數字,應該怎麼做呢???謝謝….:wink:

  27. hi steven:

    替欄位加上「Spry驗證文字欄位」功能後,Dreamweaver會自動產生SpryValidationTextfiled.js程式檔,請搜尋一下這個敘述:

    Spry.Widget.ValidationTextField.ValidationDescriptors = {

    其中有個空白的,代表自訂程式的片段:

    ‘custom’: {
    },

    將它改成:

    ‘custom’: {
    characterMasking: /[^\s]/,
    validation: function(value, options) {
    var rx = /^[0-9a-zA-Z]*$/i;
    return rx.test(value);
    }
    },

    最後再替該文字欄位的Spry驗證機制選擇成「自訂(Custom)」即可。

    thanks,
    jeffrey

  28. 請問老師, 我想用74HC595控制7個獨立的LED燈, 但是此IC好像只能控制 “開”跟”關”, 並不能控制亮度, 請問我該如何作呢?

    1. hi jason:

      74HC595是邏輯位移IC,主要用於擴充Arduino的數位接腳。控制亮度要用到PWM模擬類比輸出,你需要使用類似PCA9685這種控制板,擴充PWM輸出腳位。

      thanks,
      jeffrey

發佈留言

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

Related Posts

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

Back To Top