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

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

AS编译的swf是不允许直接访问或修改硬盘文件的(共享对象和上传下载功能例外,编译成AIR RUNTIME可以彻底解决此问题) 因此必须借用外部方法比如js,asp,php,asp.net等。

AS验证数据类: 使用类似amfphp的方式,建立一个控制类Command.php 然后由Command.php判断该调用哪些类(Login.php 或 Register.php)来解析数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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));
            }
        }
    }
}

PHP命令中心
Command.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include ("Login.php");
include ("Register.php");

$userName = $_GET["userName"];
$passWord = $_GET["passWord"];
$isLogin = $_GET["isLogin"];

if ($isLogin == "true") {
    $command = new Login($userName, $passWord);
} else {
    $command = new Register($userName, $passWord);
}
$command->check();
?>


PHP用户登录
Login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
include ("Config.php");

class Login {
    private $_userName;
    private $_passWord;

    public function __construct($userName, $passWord) {
        $this->_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);
    }
}
?>

PHP用户注册
Register.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
>
<?php
include_once ("Config.php");

class Register {
    private $_userName;
    private $_passWord;

    public function __construct($userName, $passWord) {
        $this->_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);
    }
}
?>

PHP配置文件
Config.php

1
2
3
4
5
6
7
8
9
<?php
class Config {
    static public $hostName = "localhost";
    static public $SqlName = "root";
    static public $SqlPassword = "root";
    static public $dbName = "myworld";
    static public $dbTable = "userinfo";
}
?>

ps:本想使用php 生成 XML 来给as 调用的,但是php生成的xml文件在文件头或者文件尾会出现乱码,导致xml结构被破坏。
原本可以使用 indexOf(“<") 截取到 lastIndexOf(">“) 截取的,想想反正就只回传一个结果,就用 URL变量 来传递好了。以后有大数据的时候再改吧。。啊啊,我果然好懒的说。

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.