3 mysqli_report(MYSQLI_REPORT_ERROR);
\r
5 require("header.php");
\r
6 //将来的にURLのname属性は、sqlに渡すため、エスケープして安全を確保しなければいけない。
\r
8 //->escapeMySQLArgumentString
\r
9 // http://blog.image-lab.net/2012/07/phpmysql.html
\r
12 //create table AuthUserTable ( id int auto_increment, name char(32), index(id));
\r
13 //insert into AuthUserTable (name) values ('hikarupsp');
\r
15 //$query = "SELECT * FROM AuthUserTable";
\r
16 //$stmt = $db->prepare($query);
\r
19 //$stmt->bind_result($name,$id);
\r
20 //while ($stmt->fetch()) {
\r
25 $db = new mysqli('localhost', DATABASE_USER, DATABASE_PWD, DATABASE_NAME);
\r
26 if (mysqli_connect_error()) {
\r
30 $db->set_charset("utf8");
\r
32 if(isset($_GET['action'])){
\r
33 $action = $_GET['action'];
\r
34 if(isset($_GET['name'])){
\r
35 $name = urldecode($_GET['name']);
\r
36 escapeMySQLArgumentString($name);
\r
38 if(strcmp($action, 'join') == 0){
\r
40 $stmt = $db->prepare(QUERY_SELECT_USER_ID);
\r
41 $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
\r
43 if($stmt->errno == 0){
\r
45 $stmt->store_result();
\r
47 if($stmt->num_rows == 0){
\r
48 //ユーザー名はリストになかった=はじめてのひと
\r
49 $stmt = $db->prepare(QUERY_ADD_USER);
\r
50 $stgName = DEFAULT_START_STAGE;
\r
51 $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
\r
53 if($stmt->errno == 0){
\r
55 $stmt = $db->prepare(QUERY_SELECT_USER_ID);
\r
56 $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
\r
58 if($stmt->errno == 0){
\r
60 $stmt->store_result();
\r
61 if($stmt->num_rows == 0){
\r
62 //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
\r
66 $stmt->bind_result($id);
\r
68 responseNewUser($db, $id);
\r
79 //すでにユーザー名がリストにある=続きからプレイ
\r
80 $stmt->bind_result($id);
\r
82 $stgName = getUserStage($db, $id);
\r
83 responseExistUser($db, $id, $stgName);
\r
89 } else if(strcmp($action, 'devjoin') == 0){
\r
91 if(!isset($_GET['stage'])){
\r
94 $stgName = urldecode($_GET['stage']);
\r
95 $stmt = $db->prepare(QUERY_SELECT_USER_ID);
\r
96 $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
\r
98 if($stmt->errno == 0){
\r
100 $stmt->store_result();
\r
102 if($stmt->num_rows == 0){
\r
103 //ユーザー名はリストになかった=はじめてのひと
\r
104 $stmt = $db->prepare(QUERY_ADD_USER);
\r
105 //$stgName = DEFAULT_START_STAGE;
\r
106 $stmt->bind_param(QUERY_ADD_USER_TYPES, $name, $stgName);
\r
108 if($stmt->errno == 0){
\r
110 $stmt = $db->prepare(QUERY_SELECT_USER_ID);
\r
111 $stmt->bind_param(QUERY_SELECT_USER_ID_TYPES, $name);
\r
113 if($stmt->errno == 0){
\r
115 $stmt->store_result();
\r
116 if($stmt->num_rows == 0){
\r
117 //ユーザー名はリストになかった=そんな…登録したのに。あきらめてエラーを返す
\r
120 //ユーザー名がリストにある=予想通り
\r
121 $stmt->bind_result($id);
\r
123 responseExistUser($db, $id, getUserStage($db, $id));
\r
134 //すでにユーザー名がリストにある=続きからプレイ
\r
135 $stmt->bind_result($id);
\r
137 //未実装(本当はデータベースから続きのステージ名を取得するべき)
\r
138 updateUserStage($db, $id, $stgName);
\r
139 responseExistUser($db, $id, $stgName);
\r
142 } else if(strcmp($action, 'chstg') == 0){
\r
144 if(!isset($_GET['id'])){
\r
148 //deleteUserStageObjectAll($db, $id);
\r
149 updateUserStage($db, $id, $name);
\r
151 } else if(strcmp($action, 'chcharacter') == 0){
\r
152 if(!isset($_GET['id'])){
\r
156 updateUserCharacterClass($db,$id,$name);
\r
161 //正しいリクエストであればここに来るはずはない
\r
168 // [[userID], [timestamp], [stageName], [info]];
\r
169 // info == 10: エラーなし。ログインできる。
\r
170 // info == 0:データベース通信エラー。ログインできない。
\r
171 // info == 11: すでにユーザーがログインしている。ログインできない。
\r
173 function responseError()
\r
175 exit("[0, 0, \"\", 0];");
\r
178 function responseNewUser($db, $userID)
\r
180 updateUserTimestamp($db, $userID);
\r
181 updateUserStage($db, $userID, DEFAULT_START_STAGE);
\r
182 exit("[" . $userID . "," . getTimeStampMs() . ",\"" . DEFAULT_START_STAGE . "\", 10, null]");
\r
185 function responseExistUser($db, $userID, $stageName)
\r
187 $ts = getUserLastResponseTimestamp($db, $userID);
\r
188 $ts -= getTimeStampMs();
\r
189 if(-$ts < USER_ALIVE_TIME_MS){
\r
190 // info == 11: すでにユーザーがログインしている。ログインできない。
\r
191 exit("[" . $userID . "," . getTimeStampMs() . ",\"" . $stageName . "\", 11, \"" . getUserCharacterClass($db, $userID) . "\"];");
\r
193 deleteUserStageObjectAll($db, $userID);
\r
194 updateUserTimestamp($db, $userID);
\r
195 exit("[" . $userID . "," . getTimeStampMs() . ",\"" . $stageName . "\", 10, \"" . getUserCharacterClass($db, $userID) . "\"]");
\r
202 function updateUserStage($db, $userID, $stageName)
\r
204 $stmt = $db->prepare(QUERY_UPDATE_USER_STAGE);
\r
205 $stmt->bind_param(QUERY_UPDATE_USER_STAGE_TYPES, $stageName, $userID);
\r
208 if($stmt->errno != 0){
\r
214 function getUserStage($db, $userID)
\r
216 $stgName = "unknown";
\r
217 $stmt = $db->prepare(QUERY_SELECT_USER_STAGE);
\r
218 $stmt->bind_param(QUERY_SELECT_USER_STAGE_TYPES, $userID);
\r
220 if($stmt->errno == 0){
\r
222 $stmt->store_result();
\r
224 if($stmt->num_rows != 0){
\r
226 $stmt->bind_result($stgName);
\r
234 function updateUserCharacterClass($db, $userID, $className)
\r
236 $stmt = $db->prepare(QUERY_UPDATE_USER_CCLASS);
\r
237 $stmt->bind_param(QUERY_UPDATE_USER_CCLASS_TYPES, $className, $userID);
\r
240 if($stmt->errno != 0){
\r
246 function getUserCharacterClass($db, $userID)
\r
248 $className = "unknown";
\r
249 $stmt = $db->prepare(QUERY_SELECT_USER_CCLASS);
\r
250 $stmt->bind_param(QUERY_SELECT_USER_CCLASS_TYPES, $userID);
\r
252 if($stmt->errno == 0){
\r
254 $stmt->store_result();
\r
256 if($stmt->num_rows != 0){
\r
258 $stmt->bind_result($className);
\r
266 function deleteUserStageObjectAll($db, $userID)
\r
268 $stmt = $db->prepare(QUERY_DELETE_USER_OBJECT_ALL);
\r
269 $stmt->bind_param(QUERY_DELETE_USER_OBJECT_ALL_TYPES, $userID);
\r