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应用程序将非常轻松。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

C++ 类与对象(上)

目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…

Swift 周报 第四十六期

文章目录 前言卖不动了&#xff1f;iPhone 15 系列跌破 5000 元大关StoreKit 和审核指南更新将你的 App 提交到 Apple Vision Pro 的 App Store 提案通过的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第四十六期&#xff0c;每个模块已初步成…

用C语言实现贪吃蛇游戏!!!

前言 大家好呀&#xff0c;我是Humble&#xff0c;不知不觉在CSND分享自己学过的C语言知识已经有三个多月了&#xff0c;从开始的C语言常见语法概念说到C语言的数据结构今天用C语言实现贪吃蛇已经有30余篇博客的内容&#xff0c;也希望这些内容可以帮助到各位正在阅读的小伙伴…

Spark3内核源码与优化

文章目录 一、Spark内核原理1、Spark 内核概述1.1 简介1.2 Spark 核心组件1.3 Spark 通用运行流程概述 2、Spark 部署模式2.1 YARN Cluster 模式(重点)2.2 YARN Client 模式2.3 Standalone Cluster 模式2.4 Standalone Client 模式 3、Spark 通讯架构3.1 Spark 通信架构概述3.2…

Springboot响应数据详解

功能接口 Controller下每一个暴露在外的方法都是一个功能接口 功能接口的请求路径是RequestMapping定义的路径&#xff0c;浏览器需要请求该功能则需要发出该路径下的请求。 RestController RestControllerControllerResponseBody(响应数据的注解) ResponseBody 类型&#…

视频号下载提取器:如何轻松获取视频号的视频

在数字化的世界中&#xff0c;我们每天重复刷着形形色色的短视频&#xff0c;你们知道他们每天接收到的媒体内容就是经过不断的处理和编辑呈现在我们观看的产物。 其中&#xff0c;视频内容由于其生动形象的表现形式&#xff0c;已经成为人们获取信息、娱乐和学习的重要途径。然…

[GXYCTF2019]BabyUpload1

尝试各种文件&#xff0c;黑名单过滤后缀ph&#xff0c;content-type限制image/jpeg 内容过滤<?&#xff0c;木马改用<script languagephp>eval($_POST[cmdjs]);</script> 上传.htaccess将上传的文件当作php解析 蚁剑连接得到flag

城市开发区视频系统建设方案:打造视频基座、加强图像数据治理

一、背景需求 随着城市建设的步伐日益加快&#xff0c;开发区已经成为了我国工业化、城镇化和对外开放的重要载体。自贸区、开发区和产业园的管理工作自然也变得至关重要。在城市经开区的展览展示馆、进出口商品展示交易中心等地&#xff0c;数千路监控摄像头遍布各角落&#…

嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)

1. 指针数组&#xff1a; int *a[5]; char *str[5]; 指针数组主要用来操作字符串数组&#xff0c;通常将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。 二维数组主要用来存储字符串数组&#xff0c;通过每行存储一个字符串&#xff0c;多行存储多个字符串所组…

Phoncent博客GPT写作工具

对于许多人来说&#xff0c;写作并不是一件轻松的事情。有时候&#xff0c;我们可能会遇到写作灵感枯竭、写作思路混乱、语言表达困难等问题。为了解决这些问题&#xff0c;Phoncent博客推出了一款创新的工具——GPT写作工具&#xff0c;它利用了GPT技术&#xff0c;为用户提供…

linux安装docker-compose

前言 如果你的docker版本是23&#xff0c;请移步到linux安装新版docker&#xff08;23&#xff09;和docker-compose这篇博客 查看docker版本命令&#xff1a; docker --version今天安装docker-compose的时候&#xff0c;找了很多教程&#xff0c;但是本地一直报错&#xff0…

掌握使用 React 和 Ant Design 的个人博客艺术之美

文章目录 前言在React的海洋中起航安装 Create React App安装Ant Design 打造个性化的博客风格通过路由实现多页面美化与样式定制部署与分享总结 前言 在当今数字时代&#xff0c;个人博客成为表达观点、分享经验和展示技能的独特平台。在这个互联网浪潮中&#xff0c;选择使用…

每日一道面试题:Java中序列化与反序列化

写在开头 哈喽大家好&#xff0c;在高铁上码字的感觉是真不爽啊&#xff0c;小桌板又拥挤&#xff0c;旁边的小朋友也比较的吵闹&#xff0c;影响思绪&#xff0c;但这丝毫不影响咱学习的劲头&#xff01;哈哈哈&#xff0c;在这喧哗的车厢中&#xff0c;思考着这样的一个问题…

Ubuntu本地部署Nextcloud并结合内网穿透实现远程访问搭建个人云盘

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访…

百度云网盘下载速度如何提升到正常速度

引入问题 我们在下载代码学习资料的时候大多数都是百度云网盘&#xff0c;但是限速&#xff01;下载的十分的慢&#xff0c;有什么办法能让我们不开通会员就能享受正常速度呢&#xff1f; 当然有&#xff01; 解决百度云网盘下载速度过慢&#xff0c;提高到正常速度 点击右…

Python中如何将字符串变成数字?

字符串和数字是Python中常见的数据类型&#xff0c;而且在撰写Python程序的时候&#xff0c;也经常会遇到需要将字符串转换为数字的情况&#xff0c;那么Python中如何将字符串变成数字?有多种方法可以使用&#xff0c;接下来一起来看看具体内容介绍。 1、使用int()函数 int(…

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①

[机器学习]KNN——K邻近算法实现

一.K邻近算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import pandas as pd# 这里直接引入sklearn里的数据集&#xff0c;iris鸢尾花 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 切分数据集为训练集和测试…

代码随想录算法训练营第四十六天|139.单词拆分、多重背包、背包问题总结

题目&#xff1a;139.单词拆分 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:139.单词拆分 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {// 将字符串的列…