本教學完整記錄從環境搭建、資料庫設計、PHP 後端 API、Flash 前端交互到部署優化的留言本全棧開發流程。雖非生產級完美代碼,但涵蓋 **Flash 與後端通信核心模式**,極適合理解客戶端-伺服器架構基礎。
Apache/ (Web Server)MySQL-5.0.15b/data/ (資料庫文件)MySQL-5.0.15b/bin/ (CLI 工具)php-5.2.6-Win32/ (PHP 解釋器)htdocs/ 或 www/ (網站根目錄,放 SWF/HTML/PHP)phpMyAdmin/ (Web 管理介面)sun),用戶名 root。https://127.0.0.1 驗證環境,開啟 Apache 目錄索引便於測試。
環境套件目錄結構

安裝過程輸入 MySQL 密碼

瀏覽器驗證環境配置


開啟 Apache 目錄索引
// 1. PHP ←→ MySQL
// 寫入:INSERT INTO myguestbook(name, comment) VALUES ("張三", "這是留言");
// 讀取:SELECT * FROM myguestbook;
// 2. SWF ←→ PHP (LoadVars / XML)
// SWF → PHP: sendAndLoad("datatosql.php", data_lv, "POST") 發送 uname、comment 變數
// PHP → SWF: echo XML 字串,SWF 解析 XML 顯示留言列表
<?php
$conn = mysql_connect("localhost", "root", "sun") or die(mysql_error());
mysql_select_db("myguestbook", $conn) or die(mysql_error());
mysql_query("SET NAMES 'utf8'"); // 解決中文亂碼關鍵
?>
<?php
require "connectdb.php";
$name = $_POST['uname'];
$comment = $_POST['comment'];
$time = date("Ymd,l,H:i");
$sql = "INSERT INTO myguestbook (name, comment, time) VALUES ('$name', '$comment', '$time')";
mysql_query($sql) or die(mysql_error());
echo "success=1";
?>
<?php
require "connectdb.php";
mysql_query("SET NAMES 'utf8'");
$result = mysql_query("SELECT * FROM myguestbook ORDER BY id DESC");
header("Content-Type: text/xml");
echo "<messages>";
while ($row = mysql_fetch_assoc($result)) {
echo "<msg><name>{$row['name']}</name><comment>{$row['comment']}</comment><time>{$row['time']}</time></msg>";
}
echo "</messages>";
?>
// 發送留言
var send_lv:LoadVars = new LoadVars();
send_lv.uname = input_name.text;
send_lv.comment = input_comment.text;
send_lv.sendAndLoad("datatosql.php", send_lv, "POST");
send_lv.onLoad = function(success) { if (success) loadMessages(); };
// 讀取留言
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(success) {
if (success) {
var list = this.firstChild.childNodes;
// 解析 XML 填充列表組件...
}
};
xml.load("datatoxml.php?n=" + random(9999)); // 亂數防快取

留言本運行界面
| 問題 | 解決方案 |
|---|---|
| 中文亂碼 (????) | 建庫選 utf8_general_ci;PHP 查詢前 mysql_query("SET NAMES 'utf8'");Flash 確保編碼 UTF-8。 |
| PHP 代碼重複 | 連線邏輯抽離 connectdb.php,require 復用。 |
| MySQL 報錯難查 | 用 mysql_errno()、mysql_error() 輸出錯誤碼/訊息。 |
| SWF 讀取舊快取 | 請求 URL 附加隨機參數 ?n=Math.random()。 |
| 安全性 | **生產環境必須**:SQL 參數化 (PDO/Prepared Statements)、輸入驗證/轉義、HTTPS、CSRF Token、限流。 |
現代化遷移建議:AS2→AS3/JS,LoadVars→URLLoader+JSON,PHP mysql_*→PDO/MySQLi,SWF→HTML5 Canvas/WebGL。但「客戶端狀態管理 + 異步請求 + 伺服器持久化」的核心架構思想永不過時。