所有與《碼上就會: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; }
謝謝趙老師的提示,雖然做到現在還沒有成功(看來自己慧根不夠,不適合接觸這個XD),另外,希望老師未來能出版進階實作的書!
別這麼說…我這幾個月正好很忙碌,沒時間更新網站內容,本週之內我會再仔細檢閱你的問題。
回覆趙老師,問題終於解決了!透過網友提供的方法,在SQL查詢下選擇$_SESSION[‘MM_Username’]值,然後還要在頁面使用「限制頁面存取」,就可以把問題決了。
很高興你的問題解決了,也感謝你的回應。
11/1
趙老師,您好!又有問題要請教,共有兩個問題
一、關於部落格的面板(css)切換技術,目前網路上流行的部落格網站,有無名、PIXNET、Blogger…等。
那這些部落格網站的面板(css)切換技術,主要是用cookie或session記錄使用者的面板設定嗎?
二、在下從網路找到不少關於面板(css)切換的東西。但是,它們都是用cookie或session存放在用戶端,這樣有缺點就是使用者瀏覽器未啟用cookie,下次再進去網頁還是一樣沒有變。如果,加上會員系統,要如何把cookie或session存入資料庫中。以下是找到的範例,因為去試Demo,發現瀏覽器firefox有產生cookie(PHPSESSID),也下載它的範例程式有看見session的字眼,但是不知道要如何把cookie取存方式改成session,存入伺服器端的mysql資料庫中,方便記錄使用者面板切換的資訊。雖然,在書上第九章有介紹有關cookie和session,但是實際要應用卻無從下手。
以上兩個問題,麻煩請老師指點。
cookie和session都有容量的限制,而且只會反應在目前用戶正在操作的電腦上。因此,通常都是用來存放跨網頁的臨時資料,或者用戶的登入資訊(如:帳號名稱)。
我看了你提供的範例,它只是用session變數,儲存用在在下拉式選單選用的樣式表連結,例如,底下的敘述代表用戶選取了eins.css檔。
$stylesheet = ‘<link href="eins.css" type="text/css" rel="stylesheet">’;
$_SESSION[‘csschanger’]=$stylesheet;
上面的session和CSS敘述只是一段文字資料,所以你可以把它直接存入text類型的MySQL欄位。
看了老師的解說,感覺實作不難,在下會嘗試玩玩看,也感謝老師指點!
老師你好:
我正在學習第八章~ 目前進度是8-15頁
遇到了瓶頸~
我已經完全按照書本的作法
然後在測試插入資料後~出現了錯誤頁~訊息如下:
Column ‘newsDesc’ cannot be null
問題是我這一欄有填資料.並不是空白!
懇請老師幫我看看是那邊出了問題
謝謝
你好,請檢查網頁表單欄位的名稱是否設定正確。
have fun!
jeffrey
老師你好! 有關chapter 10″新增曲目”問題。書中沒有清楚寫出如何讓資料寫進資料表。因曲目為多重寫入”cd_songs”資料表。
可以補充此部份嗎?
好的,我找時間更新一下內容。
老師您好,
我在第8章使用fckeditor時在該顯示fckeditor的部位
都出現【找不到網頁】,我直接開啟目錄下ok資料夾的來看也是
請問我是哪個地方沒弄好嗎?
謝謝
hi sam:
請問你有把fckeditor資料夾複製到www的根目錄底下嗎?
thanks,
jeffrey
老師您好
有的,不過我已經處理好了,
不號意思再請教您…
我發現如果使用fckeditor的話
在做表單送出前的驗證如果用javasprict的方式好相都抓不到值來驗證
如spry或chack form
我試的結果是這樣
不知老師您的看法…?
如果不能用這2種方式的話
請問老師有沒有適合的建議…
謝謝您
老師您好
不好意思我補充一下
應該說是該欄位透過fckeditor的介面有輸入文字了
但第一次都抓不到 會顯示空值未輸入所以驗證就不會過
但再按一次就有抓到 才能送出表單
也就是說 要按2次才能送出表單
第一次都是抓不到值…被判斷為未輸入
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;
}
cubie您好:
我這學期使用您的大作當上課用書,學生在學習過程中得到許多的成就
在此感謝。只是在第十章的部份,addcd.php中並未提到資料繫結的部份
甚感可惜,可否將此部份的操作過程放到您的網頁中,謝謝。
林老師您好:
關於addCD.php程式的圖解說明,放在這個網頁:
https://swf.com.tw/?p=143
謝謝您!
jeffrey
你好,請問一下
我目前在幫忙架設學校的網站,想跟某些銀行網站一樣,放置股價、匯率
這些即時的訊息,請問要如何呈現,感謝~~
如以下華南銀行的右下角:
http://www.hncb.com.tw/
股價走勢圖通常用Java或Flash製作,再嵌入網頁,以利於呈現生動的互動效果。當然,使用JavaScript配合HTML 5的canvas物件也行,不過考慮到目前瀏覽器的支援性,建議用Java Applet或Flash開發。
請問現在買這本書,勘誤的部份會放進去嗎,謝謝~~
沒有,勘誤仍舊是放在這裡,謝謝!
老師你好:
我在測試第九章的–AJAX版本的用戶註冊介面驗證時
不論怎麼測試,都會顯示『請檢查用戶名稱!』
我用的是ok資料夾裡的檔案,
也將修正後的 “userchecker.php” 檔換過來了
不知是什麼問題??
hi kevin:
我目前在高雄出差,預計星期三晚上回答你的問題,不便之處請見諒!
thanks,
jeffrey
咦?我剛剛測試並沒有發現這個問題,請問你用的是這一個檔案嗎?
thanks,
jeffrey
老師你好:
我是用register_ajax.php這個檔案,也重新下載所附的檔案
結果還是顯示”請檢查用戶名稱!”
瀏灠器的錯誤訊息如下:
行:85
字元:6
錯誤:’Spry.Utils’是 null或不是一個物件
字碼:0
URL:http://localhost/bbs/register_ajax.php
不好意思,麻煩您了!
從你的URL路徑看來,應該是瀏覽器找不到對應的JavaScript (Spry)檔,假設你的Spry程式放在bbs的 ‘SpryAssets’ 路徑,應該是:
../SpryAssets/SpryData.js
而不是原本的:
../../SpryAssets/SpryData.js
其他的.js檔的路徑也要修改。請看看是不是這個問題。
thanks,
jeffrey
老師你好..
問題解決了
原來我的www/SpryAssets資料夾內沒有沒有SpryData.js這個檔
從範例光碟內重新複製整個SpryAssets資料夾後就可以了
謝謝老師的幫忙!
不客氣 😉
老師您好:
不好意思又來麻煩您…
我在實作替換圖像的部份,是可以替換,
但是留完言後,按下確定,圖像還是原來預設的,
不會變成我所選的圖案,
請問是哪裏出了問題?
請參閱7-16頁的「顯示表情圖案」一節,透過PHP動態設定影像的路徑。
thanks,
jeffrey
老師您好:
我有照7-16頁的方式,將預留影像位置的原始檔改成:
「icons/」
但是問題還是一樣
我發現在3-46上方那張圖的右側的隱藏欄位
原始的值是”ico4.png”,
所以我怎麼換圖,都是出現”ico4.png”這張圖。
如果我將值改成”ico2.png”
留言的圖案不管怎麼選也就會是”ico2.png”
麻煩老師幫忙了,謝謝。
上面icons/後面的文字沒有顯示出來?
依照7-17頁的步驟3和4設定之後,圖示影像的原始碼,src屬性值部分應該是:
icons/<?php echo $row_rsGBook[‘icon’]; ?>
如果圖案始終是固定的,最可能的原因就是你沒有按照第3步驟設定PHP程式。
老師您好:
我就是照您書上所寫的修改
不過還是一樣耶??好奇怪
您可以將您改好的檔案放上來
我在下載到我的電腦來試試嗎?謝謝。
hi kevin:
書本光碟,www\ok\guestbook路徑底下的index.php檔,就是完成品,你可以參考裡面原始碼第271行。
thanks,
jeffrey
請問老師:
我做到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敘述輸入,是我打錯字嗎?還是…
hi kevin:
麻煩將你製作的.php檔寄到我的信箱,我檢查看看。
thanks,
jeffrey
Hi~~趙老師您好
是少了這隻程式 SpryData.js ,現在已做好了…非常謝謝.
但我想讓欄位只限輸入英文字元和數字,應該怎麼做呢???謝謝….:wink:
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
請問老師, 我想用74HC595控制7個獨立的LED燈, 但是此IC好像只能控制 “開”跟”關”, 並不能控制亮度, 請問我該如何作呢?
hi jason:
74HC595是邏輯位移IC,主要用於擴充Arduino的數位接腳。控制亮度要用到PWM模擬類比輸出,你需要使用類似PCA9685這種控制板,擴充PWM輸出腳位。
thanks,
jeffrey