今天给网游加上用户登录和注册的数据库验证机制
AS编译的swf是不允许直接访问或修改硬盘文件的(共享对象和上传下载功能例外,编译成AIR RUNTIME可以彻底解决此问题) 因此必须借用外部方法比如js,asp,php,asp.net等。
AS验证数据类: 使用类似amfphp的方式,建立一个控制类Command.php 然后由Command.php判断该调用哪些类(Login.php 或 Register.php)来解析数据
[cc lang=”actionscript3″ nowrap=”false”]
package com.client
{
import com.Config;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class DataBaseCheck extends EventDispatcher
{
public static const SUCCESS=”success”;
public static const FAILURE=”failure”;
private var _userName;
private var _passWord;
private var _login:Boolean;
private var myLoader:URLLoader;
private var myXML:XML;
public function DataBaseCheck(userName:String,passWord:String,Login:Boolean=true)
{
_userName=userName;
_passWord=passWord;
_login=Login;
init();
}
private function init()
{
myLoader=new URLLoader();
myLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
myLoader.load(new URLRequest(Config.WWWROOT+”Command.php?userName=”+_userName+”&passWord=”+_passWord+”&isLogin=”+_login));
myLoader.addEventListener(Event.COMPLETE,onCom);
myLoader.addEventListener(IOErrorEvent.IO_ERROR,onError);
}
private function onError(e:IOErrorEvent)
{
this.dispatchEvent(new Event(FAILURE));
}
private function onCom(e:Event)
{
var data:String=e.target.data[“result”];
myLoader.removeEventListener(Event.COMPLETE,onCom);
myLoader.removeEventListener(IOErrorEvent.IO_ERROR,onError);
myLoader=null;
if(data==”true”)
{
this.dispatchEvent(new Event(SUCCESS));
}else{
this.dispatchEvent(new Event(FAILURE));
}
}
}
}
[/cc]
PHP命令中心
Command.php
[cc lang=”php” nowrap=”false”]
check();
?>
[/cc]
PHP用户登录
Login.php
[cc lang=”php” nowrap=”false”]
_userName = $userName;
$this->_passWord = $passWord;
}
public function check() {
$link = mySql_connect(Config::$hostName, Config::$SqlName, Config::$SqlPassword) or die(“不能连接数据库服务器!可能是数据库服务器没有启动,或者用户名密码有误!” . mysql_error());
mysql_select_db($Config::&dbName, $link);
mysql_query(“set names ‘utf8′”);
$sql = “SELECT * FROM ” . Config::$dbTable . ” WHERE userName='” . $this->_userName . “‘ AND passWord='” . $this->_passWord . “‘”;
$result = mysql_query($sql, $link) or die(‘Cannot Execute:’ . mysql_error());
if (mysql_num_rows($result) >= 1) {
echo “root=0&result=true&end=0”;
} else {
echo “root=0&result=false&end=0″;
}
mysql_close($link);
}
}
?>
[/cc]
PHP用户注册
Register.php
[cc lang=”php” nowrap=”false”]>
_userName = $userName;
$this->_passWord = $passWord;
}
public function check() {
$link = mySql_connect(Config::$hostName, Config::$SqlName, Config::$SqlPassword) or die(“不能连接数据库服务器!可能是数据库服务器没有启动,或者用户名密码有误!” . mysql_error());
mysql_select_db(Config::$dbName, $link);
mysql_query(“set names ‘utf8′”);
$sql = “SELECTa * FROM ” . Config::$dbTable . ” WHERE userName='” . $this->_userName . “‘ AND passWord='” . $this->_passWord . “‘”;
$result = mysql_query($sql, $link) or die(‘Cannot Execute:’ . mysql_error());
if (mysql_num_rows($result) >= 1) {
echo “root=0&result=false&end=0”;
} else {
$result = mysql_query(“INSERT INTO ” . Config::$dbTable . “(userName,passWord) VALUES(‘” . $this->_userName . “‘,'” . $this->_passWord . “‘)”);
if ($result) {
echo “root=0&result=true&end=0”;
} else {
echo “root=0&result=false&end=0″;
}
}
mysql_close($link);
}
}
?>
[/cc]
PHP配置文件
Config.php
[cc lang=”php” nowrap=”false”]
[/cc]
ps:本想使用php 生成 XML 来给as 调用的,但是php生成的xml文件在文件头或者文件尾会出现乱码,导致xml结构被破坏。
原本可以使用 indexOf(“<") 截取到 lastIndexOf(">“) 截取的,想想反正就只回传一个结果,就用 URL变量 来传递好了。以后有大数据的时候再改吧。。啊啊,我果然好懒的说。