SlideShare a Scribd company logo
1 of 7
Download to read offline
1 
独立行政法人 国立高等専門学校機構 
米子工業高等専門学校 様 
位置共有アプリ用サーバログラム 
作成者:株式会社SIエー 
ジェンシ作成日:2014年 9月 4日 
send.php 
2P – 4P 
get_locations.php 
5P – 7P
2 
send.php 
@param name 名前 
@param lat 緯度 
@param lng 経度 
@return json 
1 
<?php 
2 
// 米子高専様 位置共有アプリ用サーバプログラム 
3 
// 
4 
// Name: APIデータ登録 
5 
// 
6 
/*** 共通インクルード宣言 ***/ 
7 
require_once ("lib/modules.inc"); 
8 
require_once ("lib/api_database.php"); 
9 
10 
/*** 初期化 ***/ 
11 
$json_object = array(); 
12 
$bind_array = array(); 
13 
$message = ""; 
14 
15 
/*** DB宣言 ***/ 
16 
$dbcon = new APIDatabase(); 
17 
18 
try { 
19 
// パラメータチェック 
20 
if (!isset($_GET["name"]) || $_GET["name"] === "") { 
21 
$message = "parameter name error."; 
22 
} elseif (!isset($_GET["lat"]) || $_GET["lat"] === "") { 
23 
$message = "parameter lat error."; 
24 
} elseif (!isset($_GET["lng"]) || $_GET["lng"] === "") { 
25 
$message = "parameter lng error."; 
26 
} 
27 
28 
// パラメータが全て入力されていたらINSERTを行う 
29 
if ($message === "") { 
30 
// DBオープン 
31 
$dbcon -> openDB(); 
32 
33 
// トランザクション処理 
34 
$dbcon -> begintrans(); 
35
3 
36 
// 過去の位置情報は削除する 
37 
// 自分のデータのみ削除するので、nameで絞り込む 
38 
$sql = "DELETE FROM t_locations_data "; 
39 
$sql .= "WHERE name = :name "; 
40 
41 
$bind_array[":name"] = $_GET["name"]; 
42 
43 
// DELETE実行 
44 
$result = $dbcon -> execute_quote($sql, $bind_array); 
45 
46 
if(!$result){ 
47 
// DELETEが失敗したらロールバック 
48 
$dbcon -> rollback(); 
49 
// DBクローズ 
50 
$dbcon -> closeDB(); 
51 
52 
// 「ng」を返して終了 
53 
$json_object["result"] = "ng"; 
54 
$json_object["message"] = "database error."; 
55 
56 
header("Content-Type: application/json; charset=utf-8"); 
57 
echo json_encode($json_object); 
58 
exit; 
59 
} 
60 
61 
// 初期化 
62 
$bind_array = array(); 
63 
64 
// INSERT文作成 
65 
$sql = "INSERT INTO t_locations_data "; 
66 
$sql .= "("; 
67 
$sql .= "name, "; 
68 
$sql .= "latitude, "; 
69 
$sql .= "longitude, "; 
70 
$sql .= "reg_date "; 
71 
$sql .= ")values("; 
72 
$sql .= ":name,"; 
73 
$sql .= ":latitude,"; 
74 
$sql .= ":longitude,"; 
75 
$sql .= "CURRENT_TIMESTAMP) "; 
76 
77 
$bind_array[":name"] = $_GET["name"]; 
78 
$bind_array[":latitude"] = $_GET["lat"]; 
79 
$bind_array[":longitude"] = $_GET["lng"]; 
80
4 
81 
// INSERT実行 
82 
$result = $dbcon -> execute_quote($sql, $bind_array); 
83 
84 
if(!$result){ 
85 
// INSERTが失敗したらロールバックして「ng」を返す 
86 
$dbcon -> rollback(); 
87 
88 
$json_object["result"] = "ng"; 
89 
$json_object["message"] = "database error."; 
90 
} else { 
91 
// INSERTが成功したらコミットして「ok」を返す 
92 
$dbcon -> commit(); 
93 
94 
$json_object["result"] = "ok"; 
95 
} 
96 
} else { 
97 
// パラメータに不備があったら「ng」を返す 
98 
$json_object["result"] = "ng"; 
99 
$json_object["message"] = $message; 
100 
} 
101 
} catch (Exception $e){ 
102 
// 例外エラー時には「ng」を返す 
103 
$json_object["result"] = "ng"; 
104 
$json_object["message"] = $e->getMessage(); 
105 
} 
106 
107 
//DBクローズ 
108 
$dbcon -> closeDB(); 
109 
110 
header("Content-Type: application/json; charset=utf-8"); 
111 
echo json_encode($json_object); 
112 
113 
exit;
5 
get_locations.php 
@return json 
1 
<?php 
2 
// 米子高専様 位置共有アプリ用サーバプログラム 
3 
// 
4 
// Name: APIデータ取得 
5 
// 
6 
/*** 共通インクルード宣言 ***/ 
7 
require_once ("lib/modules.inc"); 
8 
require_once ("lib/api_database.php"); 
9 
10 
/*** 初期化 ***/ 
11 
$json_object = array(); 
12 
$message = ""; 
13 
14 
/*** DB宣言 ***/ 
15 
$dbcon = new APIDatabase(); 
16 
17 
try { 
18 
// DBオープン 
19 
$dbcon -> openDB(); 
20 
21 
// getLocationsDateより緯度経度の情報を取得 
22 
$locations = getLocationsDate($dbcon); 
23 
// DBエラー時には「ng」を返す 
24 
if ($locations === false) { 
25 
$json_object["result"] = "ng"; 
26 
$json_object["message"] = "db error."; 
27 
} else { 
28 
$json_object["locations"] = $locations; 
29 
$json_object["result"] = "ok"; 
30 
} 
31 
} catch (Exception $e){ 
32 
// 例外エラー時には「ng」を返す 
33 
$json_object["result"] = "ng"; 
34 
$json_object["message"] = $e->getMessage(); 
35 
} 
36 
37 
// DBクローズ 
38 
$dbcon -> closeDB(); 
39
6 
40 
// 取得した情報をjsonで返す 
41 
header("Content-Type: application/json; charset=utf-8"); 
42 
echo json_encode($json_object); 
43 
44 
exit; 
45 
46 
// ========================================================= 
47 
// ===== 緯度経度取得 
48 
// ========================================================= 
49 
function getLocationsDate($dbcon){ 
50 
51 
// 初期化 
52 
$return_object = array(); 
53 
$bind_array = array(); 
54 
55 
// SELECT文作成 
56 
$sql = ""; 
57 
$sql = "SELECT "; 
58 
$sql .= " name, "; 
59 
$sql .= " latitude, "; 
60 
$sql .= " longitude, "; 
61 
$sql .= " MAX(reg_date) "; 
62 
$sql .= "FROM t_locations_data "; 
63 
$sql .= "WHERE reg_date >= CURRENT_TIMESTAMP + INTERVAL - 1 MINUTE "; 
64 
$sql .= "GROUP BY name "; 
65 
$sql .= "ORDER BY reg_date "; 
66 
67 
// SELECT文実行 
68 
$rec = $dbcon -> query_bind($sql, $bind_array); 
69 
70 
// 戻り値があったら 
71 
if($rec){ 
72 
// foreachで回しながら戻り値を配列に代入 
73 
foreach($rec as $key => $data){ 
74 
$return_object[$key]["lat"] = doubleval($data["latitude"]); 
75 
$return_object[$key]["lng"] = doubleval($data["longitude"]); 
76 
$return_object[$key]["name"] = $data["name"]; 
77 
} 
78 
79 
} 
80
7 
81 
// 初期化 
82 
$bind_array = array(); 
83 
84 
// 3分より前のデータは削除 
85 
// トランザクション処理 
86 
$dbcon -> begintrans(); 
87 
88 
// DELETE文作成 
89 
$sql = "DELETE FROM t_locations_data "; 
90 
$sql .= "WHERE reg_date < CURRENT_TIMESTAMP + INTERVAL - 3 MINUTE "; 
91 
92 
// DELETE実行 
93 
$result = $dbcon -> execute_quote($sql, $bind_array); 
94 
95 
if(!$result){ 
96 
// DELETEが失敗したらロールバック 
97 
$dbcon -> rollback(); 
98 
return false; 
99 
} 
100 
101 
// コミット 
102 
$dbcon -> commit(); 
103 
104 
return $return_object; 
105 
}

More Related Content

What's hot

もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104Satoshi Suzuki
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Satoshi Suzuki
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
CakeRequest::onlyAllow() について
CakeRequest::onlyAllow() についてCakeRequest::onlyAllow() について
CakeRequest::onlyAllow() についてYuya Takahashi
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。Takatsugu Ishikawa
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
New Generation Build System "Fly"
New Generation Build System "Fly"New Generation Build System "Fly"
New Generation Build System "Fly"deepblue will
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_hJun Chiba
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
System4 comment h
System4 comment hSystem4 comment h
System4 comment hJun Chiba
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構katanyan
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 

What's hot (20)

もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
0x300
0x3000x300
0x300
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
CakeRequest::onlyAllow() について
CakeRequest::onlyAllow() についてCakeRequest::onlyAllow() について
CakeRequest::onlyAllow() について
 
CodeIgniterのページングに関して。
CodeIgniterのページングに関して。CodeIgniterのページングに関して。
CodeIgniterのページングに関して。
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
New Generation Build System "Fly"
New Generation Build System "Fly"New Generation Build System "Fly"
New Generation Build System "Fly"
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_h
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
System4 comment h
System4 comment hSystem4 comment h
System4 comment h
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 

Viewers also liked

Preparándome para una entrevista
Preparándome para una entrevistaPreparándome para una entrevista
Preparándome para una entrevistainnovadordocente
 
Indicazioni all'impianto cocleare - parte 2
Indicazioni all'impianto cocleare - parte 2Indicazioni all'impianto cocleare - parte 2
Indicazioni all'impianto cocleare - parte 2Domenico Di Maria
 
Indicazioni all'impianto cocleare - parte 1
Indicazioni all'impianto cocleare - parte 1Indicazioni all'impianto cocleare - parte 1
Indicazioni all'impianto cocleare - parte 1Domenico Di Maria
 
5 5a Slope Intercept from Point & Slope
5 5a Slope Intercept from Point & Slope5 5a Slope Intercept from Point & Slope
5 5a Slope Intercept from Point & SlopeBitsy Griffin
 

Viewers also liked (8)

Caia 3
Caia 3Caia 3
Caia 3
 
Preparándome para una entrevista
Preparándome para una entrevistaPreparándome para una entrevista
Preparándome para una entrevista
 
Fossils fieldtrip
Fossils fieldtripFossils fieldtrip
Fossils fieldtrip
 
Presentazione del Servizio
Presentazione del ServizioPresentazione del Servizio
Presentazione del Servizio
 
Indicazioni all'impianto cocleare - parte 2
Indicazioni all'impianto cocleare - parte 2Indicazioni all'impianto cocleare - parte 2
Indicazioni all'impianto cocleare - parte 2
 
Pearl harbro
Pearl harbroPearl harbro
Pearl harbro
 
Indicazioni all'impianto cocleare - parte 1
Indicazioni all'impianto cocleare - parte 1Indicazioni all'impianto cocleare - parte 1
Indicazioni all'impianto cocleare - parte 1
 
5 5a Slope Intercept from Point & Slope
5 5a Slope Intercept from Point & Slope5 5a Slope Intercept from Point & Slope
5 5a Slope Intercept from Point & Slope
 

Similar to test

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかHiroshi Tokumaru
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter IntegrationKazuki Nakajima
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携Hidekazu Ishikawa
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormationKazuyuki Honda
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravelRisa Ohnishi
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみてSotaro Omura
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 

Similar to test (20)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのかSecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Nginx
NginxNginx
Nginx
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Silex入門
Silex入門Silex入門
Silex入門
 
Cakephp api
Cakephp apiCakephp api
Cakephp api
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 

test

  • 1. 1 独立行政法人 国立高等専門学校機構 米子工業高等専門学校 様 位置共有アプリ用サーバログラム 作成者:株式会社SIエー ジェンシ作成日:2014年 9月 4日 send.php 2P – 4P get_locations.php 5P – 7P
  • 2. 2 send.php @param name 名前 @param lat 緯度 @param lng 経度 @return json 1 <?php 2 // 米子高専様 位置共有アプリ用サーバプログラム 3 // 4 // Name: APIデータ登録 5 // 6 /*** 共通インクルード宣言 ***/ 7 require_once ("lib/modules.inc"); 8 require_once ("lib/api_database.php"); 9 10 /*** 初期化 ***/ 11 $json_object = array(); 12 $bind_array = array(); 13 $message = ""; 14 15 /*** DB宣言 ***/ 16 $dbcon = new APIDatabase(); 17 18 try { 19 // パラメータチェック 20 if (!isset($_GET["name"]) || $_GET["name"] === "") { 21 $message = "parameter name error."; 22 } elseif (!isset($_GET["lat"]) || $_GET["lat"] === "") { 23 $message = "parameter lat error."; 24 } elseif (!isset($_GET["lng"]) || $_GET["lng"] === "") { 25 $message = "parameter lng error."; 26 } 27 28 // パラメータが全て入力されていたらINSERTを行う 29 if ($message === "") { 30 // DBオープン 31 $dbcon -> openDB(); 32 33 // トランザクション処理 34 $dbcon -> begintrans(); 35
  • 3. 3 36 // 過去の位置情報は削除する 37 // 自分のデータのみ削除するので、nameで絞り込む 38 $sql = "DELETE FROM t_locations_data "; 39 $sql .= "WHERE name = :name "; 40 41 $bind_array[":name"] = $_GET["name"]; 42 43 // DELETE実行 44 $result = $dbcon -> execute_quote($sql, $bind_array); 45 46 if(!$result){ 47 // DELETEが失敗したらロールバック 48 $dbcon -> rollback(); 49 // DBクローズ 50 $dbcon -> closeDB(); 51 52 // 「ng」を返して終了 53 $json_object["result"] = "ng"; 54 $json_object["message"] = "database error."; 55 56 header("Content-Type: application/json; charset=utf-8"); 57 echo json_encode($json_object); 58 exit; 59 } 60 61 // 初期化 62 $bind_array = array(); 63 64 // INSERT文作成 65 $sql = "INSERT INTO t_locations_data "; 66 $sql .= "("; 67 $sql .= "name, "; 68 $sql .= "latitude, "; 69 $sql .= "longitude, "; 70 $sql .= "reg_date "; 71 $sql .= ")values("; 72 $sql .= ":name,"; 73 $sql .= ":latitude,"; 74 $sql .= ":longitude,"; 75 $sql .= "CURRENT_TIMESTAMP) "; 76 77 $bind_array[":name"] = $_GET["name"]; 78 $bind_array[":latitude"] = $_GET["lat"]; 79 $bind_array[":longitude"] = $_GET["lng"]; 80
  • 4. 4 81 // INSERT実行 82 $result = $dbcon -> execute_quote($sql, $bind_array); 83 84 if(!$result){ 85 // INSERTが失敗したらロールバックして「ng」を返す 86 $dbcon -> rollback(); 87 88 $json_object["result"] = "ng"; 89 $json_object["message"] = "database error."; 90 } else { 91 // INSERTが成功したらコミットして「ok」を返す 92 $dbcon -> commit(); 93 94 $json_object["result"] = "ok"; 95 } 96 } else { 97 // パラメータに不備があったら「ng」を返す 98 $json_object["result"] = "ng"; 99 $json_object["message"] = $message; 100 } 101 } catch (Exception $e){ 102 // 例外エラー時には「ng」を返す 103 $json_object["result"] = "ng"; 104 $json_object["message"] = $e->getMessage(); 105 } 106 107 //DBクローズ 108 $dbcon -> closeDB(); 109 110 header("Content-Type: application/json; charset=utf-8"); 111 echo json_encode($json_object); 112 113 exit;
  • 5. 5 get_locations.php @return json 1 <?php 2 // 米子高専様 位置共有アプリ用サーバプログラム 3 // 4 // Name: APIデータ取得 5 // 6 /*** 共通インクルード宣言 ***/ 7 require_once ("lib/modules.inc"); 8 require_once ("lib/api_database.php"); 9 10 /*** 初期化 ***/ 11 $json_object = array(); 12 $message = ""; 13 14 /*** DB宣言 ***/ 15 $dbcon = new APIDatabase(); 16 17 try { 18 // DBオープン 19 $dbcon -> openDB(); 20 21 // getLocationsDateより緯度経度の情報を取得 22 $locations = getLocationsDate($dbcon); 23 // DBエラー時には「ng」を返す 24 if ($locations === false) { 25 $json_object["result"] = "ng"; 26 $json_object["message"] = "db error."; 27 } else { 28 $json_object["locations"] = $locations; 29 $json_object["result"] = "ok"; 30 } 31 } catch (Exception $e){ 32 // 例外エラー時には「ng」を返す 33 $json_object["result"] = "ng"; 34 $json_object["message"] = $e->getMessage(); 35 } 36 37 // DBクローズ 38 $dbcon -> closeDB(); 39
  • 6. 6 40 // 取得した情報をjsonで返す 41 header("Content-Type: application/json; charset=utf-8"); 42 echo json_encode($json_object); 43 44 exit; 45 46 // ========================================================= 47 // ===== 緯度経度取得 48 // ========================================================= 49 function getLocationsDate($dbcon){ 50 51 // 初期化 52 $return_object = array(); 53 $bind_array = array(); 54 55 // SELECT文作成 56 $sql = ""; 57 $sql = "SELECT "; 58 $sql .= " name, "; 59 $sql .= " latitude, "; 60 $sql .= " longitude, "; 61 $sql .= " MAX(reg_date) "; 62 $sql .= "FROM t_locations_data "; 63 $sql .= "WHERE reg_date >= CURRENT_TIMESTAMP + INTERVAL - 1 MINUTE "; 64 $sql .= "GROUP BY name "; 65 $sql .= "ORDER BY reg_date "; 66 67 // SELECT文実行 68 $rec = $dbcon -> query_bind($sql, $bind_array); 69 70 // 戻り値があったら 71 if($rec){ 72 // foreachで回しながら戻り値を配列に代入 73 foreach($rec as $key => $data){ 74 $return_object[$key]["lat"] = doubleval($data["latitude"]); 75 $return_object[$key]["lng"] = doubleval($data["longitude"]); 76 $return_object[$key]["name"] = $data["name"]; 77 } 78 79 } 80
  • 7. 7 81 // 初期化 82 $bind_array = array(); 83 84 // 3分より前のデータは削除 85 // トランザクション処理 86 $dbcon -> begintrans(); 87 88 // DELETE文作成 89 $sql = "DELETE FROM t_locations_data "; 90 $sql .= "WHERE reg_date < CURRENT_TIMESTAMP + INTERVAL - 3 MINUTE "; 91 92 // DELETE実行 93 $result = $dbcon -> execute_quote($sql, $bind_array); 94 95 if(!$result){ 96 // DELETEが失敗したらロールバック 97 $dbcon -> rollback(); 98 return false; 99 } 100 101 // コミット 102 $dbcon -> commit(); 103 104 return $return_object; 105 }