14.5 Flash查询和添加数据库数据

14.5 Flash查询和添加数据库数据

在Flash与数据库通讯的实际应用中,如何实现用户的登录与注册是经常遇到的一个问题。登录实际上就是ASP根据Flash提供的数据查询数据库的过程,而注册则是ASP将Flash提供的数据写入数据库的过程。

1.启动Access2003,新建一名为“userInfo.mdb”的数据库,并在该数据库中新建一名为“userInfoTable”的表,该表中含有三个字段:“userName”、“passWord”和“level”,分别表示“用户名”、“密码”和“等级”,字段类型均为“文本”。

2.在“userInfoTable”表中输入数据。如图14-5-1所示。数据输入完毕后,关闭数据库,并将其保存到IIS主目录(D盘下的“wwwroot”文件夹)下的“loginAndRegiste”文件夹内。

图14-5-1 “userInfoTable”表中的数据

3.以独占方式重新打开刚刚建立的数据库“userInfo.mdb”,为该数据库设置密码,如“123”,设置完毕后退出并关闭Access2003。

4.在该文件夹下新建一名为“login.asp”的文件,并输入以下代码后保存:

<%

'获取从Flash提交的数据

tmpUserName=Request("userName")

tmpPassWord=Request("passWord")

'SQL语句中的用户名和密码需要用单引号括起来

tmpUserName="'"&tmpUserName&"'"

tmpPassWord="'"&tmpPassWord&"'"

'创建Connection对象

Set conn =Server.CreateObject("Adodb.Connection")

'设置驱动

tmpPD="Provider=Microsoft.Jet.OLEDB.4.0"

'指定数据库的路径

tmpDS="Data Source="&Server.MapPath("userInfo.mdb")

'指定数据库的密码

tmpPW="Jet OLEDB:Database Password=123"

'构造打开字符串

tmpSTR=tmpPD&";"&tmpDS&";"&tmpPW

'利用Connection对象的Open方法打开数据库

conn.Open tmpSTR

'建立库连接

Set rs = Server.CreateObject("Adodb.Recordset")

'SQL语句,从数据表userInfoTable中查询与Flash提交的用户名和密码一致的记录

sql = "select * from userInfoTable where userName="&tmpUserName&" and passWord="&tmpPassWord

'打开从库中读出的记录集

rs.Open sql, conn, 1, 3

 'While 循环语句,如果有符合条件的记录就输出

While Not rs.EOF

    '从表中读取userName、passWord和level列的值,并将其赋予三个变量

    userName = rs("userName")

    passWord = rs("passWord")

    level = rs("level")

    '将获取的值输出并用"#"隔开

    response.Write userName

    response.Write "#"

    response.Write passWord

    response.Write "#"

    response.Write level

    '转到下一条记录前用"###"隔开,以便在Flash中处理

    response.Write "###"

    '到下一条记录

    rs.MoveNext  

Wend

'利用Connection对象的Close方法关闭连接

rs.Close

'将Connection对象从内存中删除,以释放资源

Set rs = Nothing

Set conn = Nothing

%>

5.在该文件夹下再建一名为“registe.asp”的文件,输入以下代码后保存:

<%

'获取从Flash提交的数据

tmpUserName=Request("userName")

tmpPassWord=Request("passWord")

'SQL语句中的用户名和密码需要用单引号括起来

tmpUserNameStr="'"&tmpUserName&"'"

'创建Connection对象

Set conn =Server.CreateObject("Adodb.Connection")

'设置驱动

tmpPD="Provider=Microsoft.Jet.OLEDB.4.0"

'指定数据库的路径

tmpDS="Data Source="&Server.MapPath("userInfo.mdb")

'指定数据库的密码

tmpPW="Jet OLEDB:Database Password=123"

'构造打开字符串

tmpSTR=tmpPD&";"&tmpDS&";"&tmpPW

'利用Connection对象的Open方法打开数据库

conn.Open tmpSTR

'建立库连接

Set rs = Server.CreateObject("Adodb.Recordset")

'SQL语句,从数据表userInfoTable中查询是否有跟Flash提交的用户名相同的记录,如果有则不允许重复注册

sql = "select * from userInfoTable where userName="&tmpUserNameStr

'打开从库中读出的记录集

rs.Open sql, conn, 1, 3

 'if语句,如果没有该用户名记录,则允许添加数据

if rs.eof and rs.bof then

rs.addnew

rs("userName") =tmpUserName

rs("passWord")=tmpPassWord

rs("level") =1

rs.update

'返回注册成功的信息

response.write "true" 

else

'返回注册失败的信息

response.write "false" 

end if

'利用Connection对象的Close方法关闭连接

rs.Close

'将Connection对象从内存中删除,以释放资源

Set rs = Nothing

Set conn = Nothing

%>

6.打开Flash,新建一名为“loginAndRegiste.fla”的Flash文档,并将其保存到IIS主目录(D盘下的“wwwroot”文件夹)下的“loginAndRegiste”文件夹。

7.新建一名为“loginAndRegiste.as”的Flash脚本文档,同样保存到“D:\wwwroot\ loginAndRegiste”下,使其与上面的“loginAndRegiste.fla”、“login.asp”、“registe.asp”和“userInfo.mdb”在同一文件夹下。

8.切换到“loginAndRegiste.fla”文档,选择【Ctrl+F7】组合键打开【Components】面板,展开【User Interface】树形菜单,分别拖动一个DataGrid组件和一个Button组件到场景中,然后将其删除。按下【Ctrl+L】组合键打开【Library】面板查看,确保DataGrid组件和Button组件已存在于库中。在“loginAndRegiste.fla”的属性面板中设置其【Document class】为“loginAndRegiste”,然后在“loginAndRegiste.as”脚本文档中输入下列代码并保存:

package {

       //导入文件运行所需的类

       import flash.display.*;

       import flash.text.*;

       import flash.net.*;

       import flash.events.*;

       import flash.errors.*;

       import flash.system.*;

       //导入Button组件

       import fl.controls.Button;

       //导入DataGrid组件

       import fl.controls.DataGrid;

       //导入DataGridColumn类

       import fl.controls.dataGridClasses.DataGridColumn;

       //导入DataProvider类

       import fl.data.DataProvider;

       public class loginAndRegiste extends Sprite {

              //定义输入文本框

              private var userNameInputTxtFld:TextField;

              private var passWordInputTxtFld:TextField;

              //定义用户名和密码Label

              private var userNameLabel:TextField;

              private var passWordLabel:TextField;

              //定义两个变量,用以接收用户名和密码

              private var userName:String;

              private var passWord:String;

              //定义显示返回信息的文本框

              private var returnInfoTxt:TextField;

              //定义临时字符串接收返回数据

              private var tmpString:String;

              //定义临时数组接收返回数据

              private var tmpArray:Array;

              //定义临时字符串

              private var tmpName:String;

              private var tmpPassWord:String;

              private var tmpLevel:String;

              //定义登录按钮和注册按钮

              private var loginBtn:Button;

              private var registeBtn:Button;

              //定义DataGrid以显示用户信息

              private var myDataGrid:DataGrid;

              //定义ASP文件路径

              private var aspPath:String;

              //定义URLRequest和URLLoader对象

              private var aspRequest:URLRequest;

              private var loginLoader:URLLoader;

              private var registeLoader:URLLoader;

              //构造函数

              public function loginAndRegiste() {

                     init();

              }

              //在场景中添加文本框

              private function init() {

                     //设置编码,不然会显示乱码

                     System.useCodePage=true;

                     //用户名和密码输入框

                     userNameInputTxtFld= createTextField(200, 140, 100, 20);

                     passWordInputTxtFld= createTextField(200, 160, 100, 20);

                     userNameInputTxtFld.type = TextFieldType.INPUT;

                     passWordInputTxtFld.type = TextFieldType.INPUT;

                     userNameInputTxtFld.border = true;

                     passWordInputTxtFld.border = true;

                     passWordInputTxtFld.displayAsPassword=true;

                     //用户名和密码Label

                     userNameLabel=createTextField(150, 140, 50, 20);

                     passWordLabel=createTextField(150, 160, 50, 20);

                     userNameLabel.text="用户名:";

                     passWordLabel.text="密    码:";

                     //提示信息

                     returnInfoTxt= createTextField(200,190, 150, 20);

                     returnInfoTxt.type = TextFieldType.DYNAMIC;

                     returnInfoTxt.border=false;

                     returnInfoTxt.text="请输入用户名和密码...";

                     //添加登录按钮

                     loginBtn=new Button();

                     loginBtn.move(310,140);

                     loginBtn.setSize(50,20);

                     loginBtn.label="登录";

                     //当单击计算按钮时将数据提交给ASP进行计算

                     loginBtn.addEventListener(MouseEvent.CLICK,login);

                     addChild(loginBtn);

                     //添加注册按钮

                     registeBtn=new Button();

                     registeBtn.move(310,160);

                     registeBtn.setSize(50,20);

                     registeBtn.label="注册";

                     //当单击计算按钮时将数据提交给ASP进行计算

                     registeBtn.addEventListener(MouseEvent.CLICK,registe);

                     addChild(registeBtn);

              }

              //登录模块

              private function login(event:Event):void {

                     userName=userNameInputTxtFld.text;

                     passWord=passWordInputTxtFld.text;

                     if (userName!=""&&passWord!="") {

                            aspPath="http://127.0.0.1/loginAndRegiste/login.asp?userName="+userName+"&passWord="+passWord+"&randomNum="+Math.random();

                            aspRequest=new URLRequest(aspPath);

                            loginLoader=new URLLoader();

                            loginLoader.addEventListener(Event.COMPLETE,loginLoadComplete);

                            loginLoader.addEventListener(IOErrorEvent.IO_ERROR,loginLoadError);

                            try {

                                   loginLoader.load(aspRequest);

                            } catch (error:Error) {

                                   returnInfoTxt.text="加载ASP文件失败...";

                            }

                     } else {

                            returnInfoTxt.text="请检查您的用户名和密码...";

                     }

              }

              //注册模块

              private function registe(event:Event):void {

                     userName=userNameInputTxtFld.text;

                     passWord=passWordInputTxtFld.text;

                     if (userName!=""&&passWord!="") {

                            aspPath="http://127.0.0.1/loginAndRegiste/registe.asp?userName="+userName+"&passWord="+passWord+"&randomNum="+Math.random();

                            aspRequest=new URLRequest(aspPath);

                            registeLoader=new URLLoader();

                            registeLoader.addEventListener(Event.COMPLETE,registeLoadComplete);

                            registeLoader.addEventListener(IOErrorEvent.IO_ERROR,registeLoadError);

                            try {

                                   registeLoader.load(aspRequest);

                            } catch (error:Error) {

                                   returnInfoTxt.text="加载ASP文件失败...";

                            }

                     } else {

                            returnInfoTxt.text="请检查您的用户名和密码...";

                     }

              }

              //登录结束时的处理

              private function loginLoadComplete(event:Event):void {

                     tmpString=event.target.data;

                     if (tmpString!="") {

                            returnInfoTxt.text = "登录成功...";

                            tmpArray=new Array();

                            tmpArray=tmpString.split("###");

                            tmpArray.pop();

                            //添加DataProvider

                            var tmpDP:DataProvider = new DataProvider();

                            for (var i=0; i<tmpArray.length; i++) {

                                   tmpName=tmpArray[i].split("#")[0];

                                   tmpPassWord=tmpArray[i].split("#")[1];

                                   tmpLevel=tmpArray[i].split("#")[2];

                                   tmpDP.addItem({姓名:tmpName,密码:tmpPassWord,等级:tmpLevel});

                            }

                            var nameColumn:DataGridColumn = new DataGridColumn("姓名");

                            var passWordColumn:DataGridColumn = new DataGridColumn("密码");

                            var levelColumn:DataGridColumn = new DataGridColumn("等级");

                            //添加DataGrid组件

                            myDataGrid=new DataGrid();

                            myDataGrid.addColumn(nameColumn);

                            myDataGrid.addColumn(passWordColumn);

                            myDataGrid.addColumn(levelColumn);

                            myDataGrid.move(150, 220);

                            myDataGrid.setSize(210, 45);

                            myDataGrid.dataProvider=tmpDP;

                            addChild(myDataGrid);

                     } else {

                            returnInfoTxt.text = "登录失败...";

                     }

              }

              //无法登录时的处理

              private function loginLoadError(event:IOErrorEvent):void {

                     returnInfoTxt.text="加载ASP文件失败...";

              }

              //注册结束时的处理

              private function registeLoadComplete(event:Event):void {

                     tmpString=event.target.data;

                     if (tmpString=="true") {

                            returnInfoTxt.text = "注册成功...";

                     } else {

                            returnInfoTxt.text = "注册失败...";

                     }

              }

              //无法注册时的处理

              private function registeLoadError(event:IOErrorEvent):void {

                     returnInfoTxt.text="加载ASP文件失败...";

              }

              //生成文本框函数

              private function createTextField(x:Number, y:Number, width:Number, height:Number):TextField {

                     var tmpTxtFld:TextField = new TextField();

                     tmpTxtFld.x = x;

                     tmpTxtFld.y = y;

                     tmpTxtFld.width = width;

                     tmpTxtFld.height = height;

                     addChild(tmpTxtFld);

                     return tmpTxtFld;

              }

       }

}

9.按下【Ctrl+Enter】组合键,在“loginAndRegiste.swf”窗口中的用户名和密码输入框中输入用户名密码,单击【登录】按钮,如果用户名和密码正确,则给出该用户的其它信息,并提示“登录成功…”,如果用户名或密码错误,则提示“登录失败…”。如图14-5-2所示是登录成功时的状态。

图14-5-2登录成功

10.在“loginAndRegiste.swf”窗口中的用户名和密码输入框中输入用户名密码,单击【注册】按钮,如果数据库中没有该用户信息,则将该用户信息添加到数据,并给出“注册成功…”的提示,否则,将给出“注册失败…”的提示。如图14-5-3所示是注册成功时的状态。

图14-5-3注册成功

以上给出的注册和登录例子只是为了说明Flash如何查询和添加数据库中的数据,在实际应用中,用户注册成功后,可以跳到登录页提示用户登录,用户登录成功后,可以根据从数据库中获取的数据分配给用户相应的权限,用户根据相应的权限进行相关的操作,如:进入聊天室聊天、发帖回帖等。

Flash通过ASP对数据库进行的操作除了以上介绍的读取、修改、查询和添加以外,还有删除、批更新等其它操作,其原理大同小异,其中的关键之处就在于如何构造SQL语句,把符合条件的语句检索出来。当然,也可以在检索所有数据库记录的过程中直接使用条件语句进行判断,但效率会比直接使用SQL语句低许多。

在搞清楚Flash与数据库之间的基本通讯原理之后,学习的重点就可以转移到ASP与数据库的通讯及如何在Flash中灵活处理返回的数据上,处理好这两点,开发实用的RIA应用程序将非常轻松。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/349976.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课 (opens new window)&#xff1a;贪心算法理论基础&#xff01; (opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家…

【构造方法】这或许是讲的最好的关于Java构造方法的文章!!

致读者 对于看到这篇博客的你们&#xff0c;其实不需要刻意的去记这些知识&#xff0c;可以收藏起来&#xff0c;有事没事翻开看看&#xff0c;这些其实看得多了&#xff0c;自然就烂熟于心了&#xff0c;如果你只是刻意的记忆了一遍&#xff0c;那其实你很快就会忘记&#xf…

仰暮计划|“以前老一辈农村人真的是穷极了……苦极了……”

仰暮计划|“以前老一辈农村人真的是穷极了……苦极了……” 回首往事&#xff0c;几十年的坎坷经历难以件件叙述&#xff0c;却又历历在目。以前老一辈农村人真的是穷极了……苦极了……我奶奶是1941年生人&#xff0c;用她的话说就是“命很硬”。我爷爷1940年生人&#xff0c;…

[TII 2023] 基于压缩感知的多级隐私保护方案

Multilevel Privacy Preservation Scheme Based on Compressed Sensing | IEEE Journals & Magazine | IEEE Xplore 摘要 物联网的广泛应用在给人们带来便利的同时&#xff0c;也引发了人们对数据采集、分析和共享过程中隐私泄露的担忧。本文提出了一种基于压缩感知的多级…

电商系统设计到开发03 引入Kafka异步削峰

一、前言 系统设计&#xff1a;电商系统设计到开发01 第一版设计到编码-CSDN博客 接着上篇文章&#xff1a;电商系统设计到开发02 单机性能压测-CSDN博客 本篇为大制作&#xff0c;内容有点多&#xff0c;也比较干货&#xff0c;希望可以耐心看看 已经开发的代码&#xff0…

【行业应用-智慧零售】东胜物联餐饮门店智能叫号解决方案,为企业智能化升级管理服务

随着科技的不断进步&#xff0c;物联网设备已经广泛应用于各行各业&#xff0c;包括餐饮业。在餐饮门店的线下运营过程中&#xff0c;叫号系统是一项重要的设备需求。传统的叫号方式往往会消耗大量的人力和时间&#xff0c;而物联网技术为餐饮行业提供了一种更高效、智能化的解…

幻兽帕鲁服务器数据备份

搭建幻兽帕鲁个人服务器&#xff0c;最近不少用户碰到内存不足、游戏坏档之类的问题。做好定时备份&#xff0c;才能轻松快速恢复游戏进度 这里讲一下如何定时将服务器数据备份到腾讯云轻量对象存储服务&#xff0c;以及如何在有需要的时候进行数据恢复。服务器中间的数据迁移…

【论文阅读】GraspNeRF: Multiview-based 6-DoF Grasp Detection

文章目录 GraspNeRF: Multiview-based 6-DoF Grasp Detection for Transparent and Specular Objects Using Generalizable NeRF针对痛点和贡献摘要和结论引言模型框架实验不足之处 GraspNeRF: Multiview-based 6-DoF Grasp Detection for Transparent and Specular Objects Us…

为什么TestNg会成为Java测试框架的首选?还犹豫什么,看它!

上一篇自动化测试我们大概了解了测试的目标、测试的技术选型以及搭建平台的目标及需求&#xff0c;也确定了自动化测试方案以testNg作为整个测试流程贯穿的基础支持框架&#xff0c;那么testNg究竟有什么特点&#xff1f;本篇开始我们来详细的学习testNg这个测试框架。 为什么要…

qwt直角坐标 画sing(x)/x

cmath的常见函数&#xff1a;qPow()求平方&#xff0c;log(&#xff09;对数10为底 角度转弧度&#xff1a;x(angel/180)*M_PI 图示&#xff1a; 头文件&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <qwt_plot.h> #in…

使用 CDC MinIO 汇入端为 CockroachDB 保持持久数据

CockroachDB 数据库迅速崭露头角&#xff0c;作为一个坚韧且可扩展的分布式 SQL 数据库。它从其昆虫名字的坚持不懈中汲取灵感&#xff0c;即使面对硬件故障&#xff0c;CockroachDB 也能保证高可用性。其分布式架构横跨多个节点&#xff0c;类似于其昆虫原型的适应性。 凭借强…

SpringCloud Aliba-Seata【下】-从入门到学废【8】

目录 1.数据库创建 1.seata_account库下建表 2.seata_order库下建表 3.seata_storage库下建表 4.在每个库下创建回滚日志 2.创建订单模块 2.1建工程 2.2加pom 2.3改yml 2.4file.conf 2.5registry.conf 2.6domain 2.7Dao 2.8Service 2.9controller 2.10confi…

阅读go语言工具源码系列之gopacket(谷歌出品)----第一集 DLL的go封装

gopacket项目是google出品的golang第三方库&#xff0c;项目源码地址google/gopacket: Provides packet processing capabilities for Go (github.com) gopacket核心是对经典的抓包工具libpcap(linux平台)和npcap(windows平台)的go封装&#xff0c;提供了更方便的go语言操作接…

36、WEB攻防——通用漏洞XSS跨站MXSSUXSSFlashXSSPDFXSS

文章目录 MXSSUXSSFlashXSSPDF XSS 跨站的艺术-XSS入门与介绍 UTF-7 XSS、MHTML XSS、CSS XSS、VBScript XSS已经过时&#xff0c;基本上不会出现。 MXSS 简单来说&#xff0c;就是你往前端页面插入payload&#xff0c;但是前端有些防御策略会将payload编码&#xff0c;导致…

防火墙综合实验

实验需求&#xff1a; 1、生产区在工作时间内可以访问服务器区&#xff0c;仅可以访问http服务器。 2、办公区全天可以访问服务器区&#xff0c;其中&#xff0c;10.0.2.20可以访问FTP服务器和HTTP服务器&#xff0c;10.0.2.10仅可以ping通10.0.3.10。 3、办公区在访问服务器…

【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式

【VBA解决方案】全自动将Word中的文本公式转换为标准公式 写在最前面VBA代码全自动方法将md文档导出为word代码如何运行VBA代码注意事项 一些如何实现的回忆记录步骤解析手动将文本转换为Word公式代码逻辑步骤设想代码解析代码解释总结 其他背景介绍应用场景VBA脚本介绍如何使用…

信息安全认证首选CISP-PTE

&#x1f525;在信息安全领域&#xff0c;CISP-PTE认证正逐渐成为行业的新星。作为中国信息安全测评中心推出的专业认证&#xff0c;CISP-PTE为信息安全从业者提供了国内Z高标准的资质培训。 &#x1f3af;为什么选择CISP-PTE&#xff1f; 1️⃣业界认可&#xff1a;CISP-PTE是…

JAVA_EE_api_中英文对照版

点击即可下载&#xff1a; JAVA_EE_api_中英文对照版

STM32标准库——(3)GPIO输入

1.按键简介 按键&#xff1a;常见的输入设备&#xff0c;按下导通&#xff0c;松手断开 按键抖动&#xff1a;由于按键内部使用的是机械式弹簧片来进行通断的&#xff0c;所以在按下和松手的瞬间会伴随有一连串的抖动 1.1 硬件电路图 上面两个是外加上拉电阻&#xff08;常用…

Python学习从0到1 day9 Python函数

苦难是花开的伏笔 ——24.1.25 函数 1.定义 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段 2.案例 在pycharm中完成一个案例需求&#xff1a;不使用内置函数len&#xff08;&#xff09;&#xff0c;完成字符串长度的计算 #统计字…