2014-12-16 20:47:29 qq_23348443 阅读数 340
MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

欢迎来到unity学习unity培训

这里有很多U3D资源U3D培训视频U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌


运算符


逻辑表达式

说明

示例

AND

逻辑与

1 AND 1 = 1; 1 AND 0 = 0; 0 AND 0 = 0;

OR

逻辑或

1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0;

NOT

逻辑非

NOT 1 = 0; NOT 0 = 1;


1.创建数据库:


    create database third    可以只写这句话,就是没有办法控制数据库具体大小位置和自增等信息,系统默认

    on primary

    (

    name='third_mdf',   ---文件名字,要和log on 的一样

    filename='e:\data\third.mdf',   ---存放的位置

    size=10mb,    ---初始数据库的大小

    maxsize=50mb,   ---数据库大小的最大值

    filegrowth=2mb    --自动增增长的大小

    )

    log on

    (

    name='third_ldf',

    filename='e:\data\third.ldf',

    size=5mb,

    maxsize=25mb,

    filegrowth=10%

    )

    上下两个是同一一句语言,不能分来


2.利用数据库:


    Use 数据库名

    use second


3.删除数据库


    drop database third    --third为数据库名


4.创建表:


    create table users    --表名

    (

    id int identity(101,1) primary key,   --identifytity(101,1)自动增长,从101开始,每次增长1,    primary key  :主键    注意主键不能为空

    name varchar(50) not null,    ---id 、name、password表的属性   int和varchar为类型,其括号里面的是限制的字节长度,not Null是不允许为空

    password varchar(10)

    )


5.删除表:


    drop table student   ---student为表名


6.查询表中所有信息:


    select * from users   ---users为表名


7.插入一条数据:


    insert into users(name,password) values('张三','123') 前面写出了两个属性,所以后面也要写几个值

    insert into users values('李四','456')没有明确有几个属性,所以后面要写出所有值

    insert into users(name) values('张三') 只写了一个name属性,所以之能有一个值


8.批量插入数据:


    insert into users(name,password)   ----设置属性

    select '王五','789' union     ----格式:select  属性值(有几个属性写几个值) union  

    select '六六','987' union    ---注意最后一个数据的结尾union不用写

    select '齐齐','654'


9.更新一条数据:


    update users set name='王五' where id=103

    --更新 users数据库里id是103那条数据的name属性为‘王五’


10.删除一条数据:


    delete from users where name='王五'

    --删除users表里名字为‘王五’的那条数据


11.三种把数据的导入:


    复制表(不存在的表):


     select users.name,users.password into student from users

    --把users表里的name、password两个属性赋值给一个student的新表


    向已经存在的表中批量插入数据:


    insert into student select users.name,users.password from users

    INSERT INTO <新表名>(列名)

    SELECT <源列名>

    FROM <源表名>


    插入多行数据的时候,如何插入新的标识列:


    select users.name,users.password,identity(int,101,1) as id into stu from users

    --SELECT identity(数据类型,标识种子,标识增长量) AS 列名

    INTO 新表 FROM 原始表

    

删除数据:


    1、TRUNCATE TABLE:删除内容、释放空间但不删除定义。

    2、DELETE TABLE:删除内容不删除定义,不释放空间。

    3、DROP TABLE:删除内容和定义,释放空间。

2015-01-23 10:20:32 book_longssl 阅读数 2218

1,创建一个数据库表,我们就以 test数据库为例,数据库里建一个tb_User表, tb_User里有User_Name , User_Pass 字段.

2,创建一个验证用户基本信息的asp.net页面,页面名字是:Default.aspx

后台代码如下:
  1. using System;
  2. using System.Configuration;
  3. using System.Data;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.HtmlControls;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Data.SqlClient;

  11. public partial class _Default : System.Web.UI.Page
  12. {

  13. SqlConnection conn = new SqlConnection("Data Source=.sqlexpress2008;Initial Catalog=test;Integrated Security=True");

  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. string name = Request.Form["name2";
  17. string pwd=Request.Form["pwd";

  18. conn.Open();

  19. string sql = "select User_Name from tb_User where User_Name='" + name + "' and User_Pass='"+pwd+"'";
  20. SqlCommand cmd = new SqlCommand(sql, conn);
  21. if (cmd.ExecuteScalar() != null)
  22. Response.Write("success");
  23. else
  24. Response.Write("faield");
  25. conn.Close();
  26. }
  27. }
复制代码



前台代码不用管.

3,新建一个Unity 3D项目,新建一个Javascript文件, 在Javascript文件上编写如下代码:

  1. var URL = "http://devmac.net/domino/rui/Default.aspx"; //提交的URL地址
  2. static var return_data:String;
  3. var strname:String;
  4. var strpwd:String;
  5. var cls:boolean=false;
  6. var xx:Rect = Rect (20, 10, 150, 100);
  7. function OnGUI() {
  8. if(cls)
  9. xx = GUI.Window(1, xx, windowjj, "Window");
  10. GUI.Label(Rect(10,10,80,20),"UserName:");
  11. GUI.Label(Rect(10,30,80,20),"Userpass:");
  12. strname=GUI.TextField(Rect(90,10,100,20),strname);
  13. strpwd=GUI.PasswordField(Rect(90,30,100,20),strpwd,"*"[0],25);
  14. //same as above, but for password
  15. if ( GUI.Button ( Rect (60, 60, 100, 20) , "Login" ) ){ //just a button
  16. Login();
  17. }
  18. }
  19. function windowjj(windowID : int){
  20. GUI.Label(Rect(55,25,50,20),return_data);
  21. if(GUI.Button(Rect(50,55,50,20),"Close")) cls=false;//
  22. }
  23. function Login() {
  24. var form = new WWWForm(); //创建一个WWWForm对象。
  25. form.AddField( "name2", strname );
  26. form.AddField("pwd",strpwd);
  27. var w:WWW=new WWW(URL,form);
  28. yield w; //we wait for the form to check the PHP file, so our game dont just hang
  29. cls=true;
  30. if (w.error != null) {
  31. //if there is an error, tell us
  32. return_data=w.error;
  33. } else {
  34. return_data=w.text;
  35. w.Dispose(); //clear our form in game
  36. }
  37. }
复制代码


4. 此代码放在主相机上。

5.最后在网上搜一个crossdomain.xml文件,自己写也行,把它放在挂有Asp.net网站的根目录下,这样就大功告成了.



6,导入到IPhone手机里也成功访问到数据库.

2013-08-26 11:31:38 Ralfkaka 阅读数 528

第二节:Unity 3D同PHP数据交互案例

1,创建一个数据库表,使用MySql数据库.创建代码如下:

CREATE TABLE `scores` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`name` VARCHAR( 30 ) NOT NULL , 
`password` VARCHAR( 50 ) NOT NULL 
) ENGINE = innodb;

2,向数据库表中插入内容:

INSERT INTO `scores` ( `id` , `name` , `password` ) 
VALUES ( 
NULL , 'haiweisky', MD5( 'aaaaaa' ) 
);

3,创建一个验证用户基本信息的PHP页面,页面名字是:check_scores.php

       <?

// 联接数据库

$host = "localhost"; //主机名

$user = "root"; //用户名

$password = ""; //密码

$dbname = "unity3dTest"; //数据库名称

mysql_connect($host, $user, $password) or die("Cant connect into database");

mysql_select_db($dbname)or die("Cant connect into database");

// =============================================================================

// PROTECT AGAINST SQL INJECTION and CONVERT PASSWORD INTO MD5 formats

function anti_injection_login_senha($sql, $formUse = true)

{

$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);

$sql = trim($sql);

$sql = strip_tags($sql);

if(!$formUse || !get_magic_quotes_gpc())

$sql = addslashes($sql);

$sql = md5(trim($sql));

return $sql;

}

// THIS ONE IS JUST FOR THE NICKNAME PROTECTION AGAINST SQL INJECTION

function anti_injection_login($sql, $formUse = true)

{

$sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|,|'|#|\*|--|\\\\)/i","",$sql);

$sql = trim($sql);

$sql = strip_tags($sql);

if(!$formUse || !get_magic_quotes_gpc())

$sql = addslashes($sql);

return $sql;

}

// =============================================================================

$unityHash = anti_injection_login($_POST["myform_hash"]);

$phpHash = "hashcode"; // same code in here as in your Unity game

$nick = anti_injection_login($_POST["myform_nick"]); //I use that function to protect against SQL injection

$pass = anti_injection_login_senha($_POST["myform_pass"]);

/*

you can also use this

$nick = $_POST["myform:_nick"];

$pass = $_POST["myform_pass"];

*/

if(!$nick || !$pass) {

    echo "npe";//昵称或密码不能为空。

} else {

    if ($unityHash != $phpHash){

        echo "HASH code is diferent from your game, you infidel.";

    } else {

        $SQL = "SELECT * FROM scores WHERE name = '" . $nick . "'";

        $result_id = @mysql_query($SQL) or die("DATABASE ERROR!");

        $total = mysql_num_rows($result_id);

        if($total) {

            $datas = @mysql_fetch_array($result_id);

            if(!strcmp($pass, $datas["password"])) {

                //echo "LOGADO - PASSWORD CORRECT";

                echo "success";

            } else {

                echo "npw"; //昵称或密码错误

            }

        } else {

            echo "nfn";//没此用户

        }

    }

}

// Close mySQL Connection

mysql_close();

?>

4,新建一个Unity 3D项目,命名为myGame;新建一个Javascript文件,命名为phpUnity(点击Project面板上的Create按钮,点击Javascript,产生一个新的javascript,按F2为其命名为phpUnity).

       在phpUnity文件上编写如下代码:

 

private var formNick = ""; //登录名

private var formPassword = ""; //密码

var formText = ""; //根据判断显示信息

var yyyskin:GUISkin;

var URL = "http://localhost/unity_test/check_scores.php"; //提交的URL地址

var hash = "hashcode"; //change your secret code, and remember to change into the PHP file too

 

private var textrect = Rect (10, 150, 500, 100); //just make a GUI object rectangle

 

function OnGUI() {

       if(yyyskin){

              GUI.skin = yyyskin;

          GUI.Label( Rect (10, 10, 80, 20), "姓名:"); //text with your nick

          GUI.Label ( Rect (10, 30, 80, 20), "密码:" );

          formNick = GUI.TextField ( Rect (90, 10, 100, 20), formNick ); //here you will insert the new value to variable formNick

          formPassword = GUI.PasswordField ( Rect (90, 30, 100, 20), formPassword ,"*"[0], 25);

//same as above, but for password

          if ( GUI.Button ( Rect (10, 60, 100, 20) , "登录" ) ){ //just a button

              Login();

          }

          GUI.TextArea( textrect, formText );

   }

}

function Login() {

   var form = new WWWForm(); //创建一个WWWForm对象。

   form.AddField( "myform_hash", hash ); //add your hash code to the field myform_hash, check that this variable name is the same as in PHP file

   form.AddField( "myform_nick", formNick );

   form.AddField( "myform_pass", formPassword );

   var w = WWW(URL, form); //here we create a var called 'w' and we sync with our URL and the form

   yield w; //we wait for the form to check the PHP file, so our game dont just hang

   if (w.error != null) {

      print(w.error); //if there is an error, tell us

   } else {

              var return_data=w.data;

              if(return_data=="success"){

                     Application.ExternalEval("window.location.href='game.php?username="+formNick+"'");

              }else if(return_data=="npe"){

                     print("Test ok");

                     formText = "用户名或密码不能为空!"; //here we return the data our PHP told us

                           

              }else if(return_data=="nfn"){

                     formText="用户名不存在!";

              }else if(return_data=="npw"){

                     formText="用户名或密码不正确!";

              }

              w.Dispose(); //clear our form in game

   }

   formNick = ""; //just clean our variables

   formPassword = "";

  

   }

5. 此代码放在主相机内的游戏对象上。 

2018-03-16 15:58:00 MadBam_boo 阅读数 871

Unity3d实战之Unity3d网络游戏实战篇(7):数据管理类DataMgr

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍,如有侵权请联系,必删。

 DataMgr是封装数据库操作的类,它实现了用户名密码验证、注册、创建角色、获取角色数据、保存角色数据。
 
 Register:向user表插入user_name 和 password;
 CreatePlayer:创建默认PlayerData并存入player中;
 CheckPassWord:检查user_name 和 password对能否在user表中找到对应数据;
 GetPlayerData:根据user_name在player找出对应的data;
 SavePlayer:根据user_name更新player中的data;

 辅助用的方法:
 private bool IsSafeStr(string str);
 通常,我们注册一个账号、创建一个新角色并给他输入昵称时会看到有一些字符是不允许输入的,这是为了防止sql注入,所谓sql注入就是用户在用户名栏或者密码栏中恶意输入sql命令,由于程序是通过用户输入来进行数据库查询的,因此很有可能会发生数据库被破坏的情况。例如:
 用户注册了用户名为”xiaoming; delete * from player;”的名字,该字符串传到程序中会执行如下数据库操作命令:
 select * from player where id=xiaoming; delete * from player;
 瞬间爆炸!所以一定要对用户的输入进行特殊字符的排除!

/// <summary>
/// Check the string , if it has illegal characters.
/// </summary>
/// <returns><c>true</c> if this instance is safe string the specified str; otherwise, <c>false</c>.</returns>
/// <param name="str">string</param>
bool IsSafeStr(string str)
{
    return !Regex.IsMatch (str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}

 private bool canRegister(string id, string pw);
 用于检测用户输入的用户名和密码是否已注册,实现方法如下:

/// <summary>
        /// Check the password.
        /// </summary>
        /// <returns><c>true</c>, if password was checked, <c>false</c> otherwise.</returns>
        /// <param name="id">user_name</param>
        /// <param name="pw">password</param>
        public bool CheckPassword(string id, string pw)
        {
            if (!IsSafeStr (id) || !IsSafeStr (pw)) {
                Console.WriteLine ("[DataMgr.CheckPassword] Illegal characters.");
                return false;
            }

            string formatStr = "select * from user where id='{0}' and pw='{1}';";
            string cmdStr = string.Format (formatStr, id, pw);
            MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);

            try {
                MySqlDataReader dataReader = cmd.ExecuteReader();
                bool hasRow = dataReader.HasRows;
                dataReader.Close();
                return hasRow;
            } catch (Exception ex) {
                Console.WriteLine ("[DataMgr.CheckPassword] Read data fail. " + ex.Message);
                return false;
            }
        }

 余下的Register、CreatePlayer等方法的实现都是使用不同的SQL语句来实现查询、插入、读取数据等操作。编写代码的过程中要注意代码风格的一致性以及异常捕获后输出的提示信息要清晰明了,防止后面Debug的时候找不着北…血与泪的教训。
 给出两个Sample:
 

/// <summary>
/// Check the password.
/// </summary>
/// <returns><c>true</c>, if password was checked, <c>false</c> otherwise.</returns>
/// <param name="id">user_name</param>
/// <param name="pw">password</param>
public bool CheckPassword(string id, string pw)
{
    if (!IsSafeStr (id) || !IsSafeStr (pw)) {
        Console.WriteLine ("[DataMgr.CheckPassword] Illegal characters.");
        return false;
    }

    string formatStr = "select * from user where id='{0}' and pw='{1}';";
    string cmdStr = string.Format (formatStr, id, pw);
    MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);

    try {
        MySqlDataReader dataReader = cmd.ExecuteReader();
        bool hasRow = dataReader.HasRows;
        dataReader.Close();
        return hasRow;
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CheckPassword] Read data fail. " + ex.Message);
        return false;
    }
}
/// <summary>
/// Create a playerData for player whose id is args' id.
/// </summary>
/// <returns><c>true</c>create player success, <c>false</c>can't create player</returns>
/// <param name="id">user_name</param>
public bool CreatePlayer(string id)
{
    if (!IsSafeStr (id)) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Illegal characters.");
        return false;
    }

    PlayerData playerData = new PlayerData ();
    MemoryStream stream = new MemoryStream ();
    BinaryFormatter formatter = new BinaryFormatter ();

    try {
        formatter.Serialize(stream, playerData);
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Serialize data fail. " + ex.Message);
        return false;
    }

    byte[] dataBytes = stream.ToArray ();

    string formatStr = "insert into player set id='{0}', data=@data;";
    string cmdStr = string.Format (formatStr, id);
    MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);
    cmd.Parameters.Add ("@data", MySqlDbType.Blob);
    cmd.Parameters [0].Value = dataBytes;

    try {
        cmd.ExecuteNonQuery();
        return true;
    } catch (Exception ex) {
        Console.WriteLine ("[DataMgr.CreatePlayer] Execute command fail. " + ex.Message);
        return false;
    }
}
2013-12-18 14:50:32 s10141303 阅读数 4031
点击查看原图
1,创建一个数据库表,我们就以 test数据库为例,数据库里建一个tb_User表, tb_User里有User_Name , User_Pass 字段.

2,创建一个验证用户基本信息的asp.net页面,页面名字是:Default.aspx

后台代码如下:
普通浏览复制代码
  1. using System;
  2. using System.Configuration;
  3. using System.Data;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.HtmlControls;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Data.SqlClient;
  11. public partial class _Default : System.Web.UI.Page 
  12. {
  13.         
  14.         SqlConnection conn = new SqlConnection("Data Source=.\sqlexpress2008;Initial Catalog=test;Integrated Security=True");
  15.     
  16.     protected void Page_Load(object sender, EventArgs e)
  17.     {
  18.         string name = Request.Form["name2"];
  19.         string pwd=Request.Form["pwd"];
  20.         
  21.         conn.Open();
  22.         string sql = "select User_Name from tb_User where User_Name='" + name + "' and User_Pass='"+pwd+"'";
  23.         SqlCommand cmd = new SqlCommand(sql, conn);
  24.         if (cmd.ExecuteScalar() != null)
  25.             Response.Write("success");
  26.         else
  27.             Response.Write("faield");
  28.         conn.Close();
  29.     }
  30. }
前台代码不用管.

3,新建一个Unity 3D项目,新建一个Javascript文件, 在Javascript文件上编写如下代码:
  1. var URL = "http://devmac.net/domino/rui/Default.aspx"; //提交的URL地址
  2. static var return_data:String;
  3. var strname:String;
  4. var strpwd:String;

  5. var cls:boolean=false;
  6. var xx:Rect = Rect (20, 10, 150, 100);

  7. function OnGUI() {
  8.         if(cls)
  9.             xx = GUI.Window(1, xx, windowjj, "Window");
  10.         GUI.Label(Rect(10,10,80,20),"UserName:");
  11.         GUI.Label(Rect(10,30,80,20),"Userpass:");
  12.         strname=GUI.TextField(Rect(90,10,100,20),strname);
  13.         strpwd=GUI.PasswordField(Rect(90,30,100,20),strpwd,"*"[0],25);
  14.         
  15.         //same as above, but for password
  16.           if ( GUI.Button ( Rect (60, 60, 100, 20) , "Login" ) ){ //just a button
  17.                 
  18.               Login();
  19.               
  20.           }
  21.         
  22. }

  23. function windowjj(windowID : int){
  24.     
  25.     GUI.Label(Rect(55,25,50,20),return_data);
  26.     if(GUI.Button(Rect(50,55,50,20),"Close")) cls=false;//
  27.     
  28. }

  29. function Login() {

  30.     var form = new WWWForm(); //创建一个WWWForm对象。

  31.    form.AddField( "name2", strname );
  32.    form.AddField("pwd",strpwd);
  33.    
  34.     var w:WWW=new WWW(URL,form);
  35.     
  36.    yield w; //we wait for the form to check the PHP file, so our game dont just hang
  37.    cls=true;
  38.    if (w.error != null) {

  39.          //if there is an error, tell us
  40.       return_data=w.error;
  41.      

  42.    } else {

  43.            return_data=w.text;
  44.               w.Dispose(); //clear our form in game

  45.    }
  46. }
复制代码
4. 此代码放在主相机上。
没有更多推荐了,返回首页