AS通过PHP后台调用用户[登录]和[注册]功能

今天给网游加上用户登录和注册的数据库验证机制

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变量 来传递好了。以后有大数据的时候再改吧。。啊啊,我果然好懒的说。

发表评论

电子邮件地址不会被公开。 必填项已用*标注