用于SLA研究的富互联网应用/基本数据库交互
如概述中所述,AMFPHP 脚本允许 Flash 动画和 Flash Communication Server 应用程序与 PHP 脚本通信。这些脚本可以接收、处理并返回数据到请求的动画或应用程序。在 SLA 研究的背景下,也许这类脚本最有用的功能是涉及插入、更新和检索信息的数据库交互。
从http://www.amfphp.org下载 AMFPHP 脚本并解压缩后,应将gateway.php文件放置在 Web 服务器的目录中;确保它是一个 Web 服务器允许执行脚本的目录。在许多服务器上,这在cgi-bin目录或其子目录中。AMFPHP 的flashservices文件夹通常安装在cgi-bin目录中。然后,应为单个 Flash 动画(或 FlashComm 应用程序)创建用于访问的子文件夹。应将gateway.php放置到此子文件夹中;通常,此文件不需要任何编辑。对于本教程,子文件夹将命名为mysql_amfphp。
最后,应在mysql_amfphp文件夹中创建名为services的子文件夹。services文件夹将包含访问数据库的 PHP 文件。对于此示例应用程序,应创建一个名为MySQLQuery.php的文件,并将以下代码放置在其中,使用基本的文本编辑器(例如,Windows 上的记事本,UNIX/LINUX 上的 vi 或 emacs)。
<?php class MySQLQuery{ function MySQLQuery(){ $this->methodTable = array( "inRecord" => array( "description" => "Inserts the passed argument into the database", "access" => "remote", // available values are private, public, remote "arguments" => array ("arg1", "arg2") ), "outRecord" => array( "description" => "Echos the passed argument back to Flash (no need to set the return type)", "access" => "remote", // available values are private, public, remote "arguments" => array ("arg1") ) ); } function inRecord($fName, $lName){ $dbc = mysql_connect("DBNAME", "USERID", "PASSWORD"); mysql_select_db("amfphp_test"); $sql = "INSERT INTO people ( UID , firstName , lastName ) " . "VALUES ( , '$fName', '$lName' )"; $result = @mysql_query ($sql); // run the query return " *-* " . $lName . ", " . $fName . " *-* (" . $result . ")"; } function outRecord($message){ $dbc = mysql_connect("DBNAME", "USERID", "PASSWORD"); mysql_select_db("amfphp_test"); $result = mysql_query('SELECT * FROM people'); while ($row = mysql_fetch_array($result)) { $nameList .= $row['lastName'] . ", " . $row['firstName'] . "; "; } return $message . " ^**mysql_amfphp**^ " . "\n" . $nameList . "\n"; } } ?>
在示例代码中,DBNAME、USERID和PASSWORD的值应更改为反映要访问的特定数据库服务器。此外,数据库应包含名为amfphp_test的数据库,该数据库包含名为people的表。表people又应包含两列:firstName和lastName。
使用 Flash MX 2004 中的组件窗口,创建具有图像中所示元素的用户界面。
以上 UI 元素应使用以下名称:
- 顶部文本区域:'show_txt'
- 列出记录按钮:callButton
- 清除文本字段按钮:clearButton
- firstName文本行:inFirstName
- lastName文本行:inLastName
- 插入记录按钮:insertButton
这些名称将与以下 ActionScript 代码匹配,这些代码应放置在 Flash 动画主时间轴的第一帧中
// Necessary class (needed for AMFPHP) #include "NetServices.as" // just for debugging purposes #include "NetDebug.as" // Create the AMFPHP gateway and connect to the server. // The gateway.php file points to the services folder (see below, // where the service is actually called with getService("MySQLQuery") NetServices.setDefaultGatewayUrl("http://www.MYSERVERNAME.com/cgi-bin/mysql_amfphp/gateway.php"); conn = NetServices.createGatewayConnection(); //Result handler request = new Object(); request.onResult = function(result) { show_txt.text = result; } // Call the service; name of service (MySQLQuery) must be the same // as the pre-extension name of the file in the "services" folder: "MySQLQuery.php" service = conn.getService("MySQLQuery"); // Buttons callButton.onPress = function(){ service.outRecord(request, show_txt.text); show_txt.text = ""; } clearButton.onPress = function(){ show_txt.text = ""; } insertButton.onPress = function () { service.inRecord(request, inFirstName.text, inLastName.text); }; stop();
导出动画后,用户应该能够将第一姓名和最后姓名对插入数据库。PHP 代码在插入和检索数据库信息时都会返回确认消息。插入信息时,将返回第一姓名和最后姓名;检索时,将发送上窗口中的任何文本并将其添加到返回信息的开头,然后是数据库中姓名的列表(以姓氏,名字的顺序)。
以上示例应用程序说明了 Flash 动画如何访问数据库。这种访问可能用于登录身份验证、创建新用户帐户或保存文本信息以备将来检索和研究。
值得注意的是,数据库中的信息不必专门由创建它的 AMFPHP 代码或 Flash 动画访问。例如,如果文本聊天的记录被保存为数据库条目,则另一个 Flash 动画可以用于检索它以供研究人员查看。同样,PHP 脚本可以检索记录并对其执行文本操作(例如,在不在英语中最常见的 1000 个单词/词族中的单词周围放置粗体文本的 HTML 标签,<b> & </b>)。
在下一节中,将使用示例应用程序来演示如何保存来自聊天应用程序的文本以供以后检索。