From c4906d60bb35113e9e8ee1cad579fec1814db95a Mon Sep 17 00:00:00 2001 From: hikarupsp Date: Mon, 22 Jul 2013 13:19:39 +0900 Subject: [PATCH] =?utf8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E8=AA=8D?= =?utf8?q?=E8=A8=BC=E3=81=AEMySQL=E5=AF=BE=E5=BF=9C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- auth.php | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- corelib/core.js | 4 ++- stage/login.js | 24 ++++++++-------- stage/main.js | 2 +- 4 files changed, 97 insertions(+), 19 deletions(-) diff --git a/auth.php b/auth.php index 23987b1..3289575 100644 --- a/auth.php +++ b/auth.php @@ -1,14 +1,90 @@ すでにやった + // http://blog.image-lab.net/2012/07/phpmysql.html + // 接続(DB選択含む) + //DB: + //create table AuthUserTable ( id int auto_increment, name char(32), index(id)); + //insert into AuthUserTable (name) values ('hikarupsp'); + // 実行 + //$query = "SELECT * FROM AuthUserTable"; + //$stmt = $db->prepare($query); + //$stmt->execute(); + // 変数のバインド + //$stmt->bind_result($name,$id); + //while ($stmt->fetch()) { + // echo $name; + // echo $id; + //} + + define("DATABASE_USER", "pcd2013devUser"); + define("DATABASE_PWD", "MoonStone"); + define("DATABASE_NAME", "pcd2013dev"); + define("REGEX_SQL_QUERY_ESCAPE", "\\|\"|\'"); + define("QUERY_SELECT_USER_ID", "SELECT id from AuthUserTable where name = ?;"); + define("QUERY_SELECT_USER_ID_TYPES", "s"); + define("QUERY_ADD_USER", "insert into AuthUserTable (name) values (?)"); + define("QUERY_ADD_USER_TYPES", "s"); + + $db = new mysqli('localhost', DATABASE_USER, DATABASE_PWD, DATABASE_NAME); + if (mysqli_connect_error()) { + die('接続に失敗しました。'); + } + // 文字化け防止 + $db->set_charset("utf8"); + if(isset($_GET['action']) && isset($_GET['name'])){ $action = $_GET['action']; - $name = $_GET['name']; + $name = urldecode($_GET['name']); if(strcmp($action, 'join') == 0){ echo("new Array("); - if(strcmp($name, "user1") == 0){ - echo("1234,"); - } elseif(strcmp($name, "user2") == 0){ - echo("5678,"); + $stmt = $db->prepare(QUERY_SELECT_USER_ID); + $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name); + $stmt->execute(); + // 結果の個数を確認 + if($stmt->errno == 0){ + //クエリ成功 + $stmt->store_result(); + if($stmt->num_rows == 0){ + //ユーザー名はリストになかった=はじめてのひと + $stmt = $db->prepare(QUERY_ADD_USER); + $stmt->bind_param(QUERY_ADD_USER_TYPES, $name); + $stmt->execute(); + if($stmt->errno == 0){ + //クエリ成功 + $stmt = $db->prepare(QUERY_SELECT_USER_ID); + $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name); + $stmt->execute(); + if($stmt->errno == 0){ + //クエリ成功 + $stmt->store_result(); + if($stmt->num_rows == 0){ + //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す + echo("0,"); + } else{ + //ユーザー名がリストにある=予想通り + $stmt->bind_result($id); + $stmt->fetch(); + echo($id); + echo(","); + } + } else{ + //クエリ失敗 + echo("0,"); + } + } else{ + //クエリ失敗 + echo("0,"); + } + } else{ + //すでにユーザー名がリストにある=続きからプレイ + $stmt->bind_result($id); + $stmt->fetch(); + echo($id); + echo(","); + } } else{ + //クエリ失敗 echo("0,"); } echo(ceil(microtime(true)*1000)); diff --git a/corelib/core.js b/corelib/core.js index 27a1dee..0b9a30e 100755 --- a/corelib/core.js +++ b/corelib/core.js @@ -37,7 +37,7 @@ MicrosoftInternetExplorerでは、ローカル変数でparentを使うとappendC // //定数 // -var URL_PCD_Root = "http://192.168.0.8/PCD2013GSCL/"; +var URL_PCD_Root = "http://192.168.6.242/"; var URL_PCD_Auth = URL_PCD_Root + "auth.php"; var URL_PCD_Stage = URL_PCD_Root + "stage/"; @@ -48,6 +48,8 @@ var URL_PCD_Stage = URL_PCD_Root + "stage/"; function GameManager(){ //****コンストラクタ**** //**インスタンス変数宣言・初期化** + //ユーザーID + this.userID = 0; //ネットワークマネージャーの設定 this.networkManager = new NetworkManager(); //必要最低限のCanvasとコンテキストの設定 diff --git a/stage/login.js b/stage/login.js index 3319f72..2fe878d 100644 --- a/stage/login.js +++ b/stage/login.js @@ -1,8 +1,6 @@ //ステージの設定 // グローバル名前空間にmainManager, // ローカルに stageがすでに存在する状況下で呼ばれる。 -//ステージのインスタンス変数 -stage.moveForce = 50; //関数のオーバーライド stage.runStage = function(){ @@ -23,13 +21,14 @@ stage.runStage = function(){ this.authform.innerHTML += ""; this.authSubmitButton = document.getElementById("authSubmitButton"); this.authSubmitButton.onclick = this.submitAuth; +console.log("init"); }; stage.submitAuth = function(){ request = mainManager.networkManager.CreateRequestObject(); request.onreadystatechange = mainManager.runningStage.HTTPStateChange; request.open('GET', URL_PCD_Auth + "?action=join&name=" + encodeURIComponent(mainManager.runningStage.authform.userName.value)); request.send(null); - +console.log("submit"); return false; //常に送信しない。 }; stage.HTTPStateChange = function() @@ -37,29 +36,30 @@ stage.HTTPStateChange = function() //requestコールバックなのでthisはrequest! switch(this.readyState){ case 0: - //console.log("XMLHttpRequest created."); + console.log("XMLHttpRequest created."); break; case 1: - //console.log("open() called."); + console.log("open() called."); break; case 2: - //console.log("Response header received."); + console.log("Response header received."); break; case 3: - //console.log("Response body receiving."); + console.log("Response body receiving."); break; case 4: - //console.log("send() compleated."); - //console.log("status:" + this.status + ":" + this.statusText); + console.log("send() compleated."); + console.log("status:" + this.status + ":" + this.statusText); if(this.status == 0){ alert("ネットワークへのアクセスに失敗しました。"); }else if((200 <= this.status && this.status < 300) || (this.status == 304)){ - //alert(this.responseText); + alert(this.responseText); result = eval(this.responseText); if(result[0] == 0){ - alert("ごめんなさい。そのユーザー名は既に使われています。\n他のユーザー名を選んでください。"); + alert("サーバーがエラーを返しました。"); } else{ - alert("ログインしました。"); + alert("ID:" + result[0] + " でログインしました。"); + mainManager.userID = result[0]; mainManager.timeStamp = result[1]; mainManager.loadStageFromNetwork(result[2], null); } diff --git a/stage/main.js b/stage/main.js index 0cffc9c..88a0cfb 100644 --- a/stage/main.js +++ b/stage/main.js @@ -8,7 +8,7 @@ stage.moveForce = 50; stage.runStage = function(){ //元々定義されていた、疑似スーパークラス(prototype)の関数を呼び出す。 this.super_runStage(); - for(i = 0; i < 25; i++){ + for(i = 0; i < 2; i++){ aCircle = new StageObject(this); aCircle.origin.x = 16 + 16 * i; aCircle.origin.y = 16 + 16 * i; -- 2.11.0