SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

GPS携帯を使った口コミサイト構築 - Google Map上に投稿データを展開する -

目的に応じて適材適所で使うPHPライブラリ(4)


  • X ポスト
  • このエントリーをはてなブックマークに追加

投稿確認フォームの実装

 前項で取得した住所、端末IDの名前でファイルに書き出したhashの値を取得してDBより投稿情報を取得して投稿確認フォームを出力します。

 DBから投稿情報を取得する方法は前回と同様にPDOを利用します。DBサーバへの接続情報はconfig.phpに記述しています。

[リスト11]config.php(抜粋)
$MYSQL_HOST = 'MySQLサーバーのアドレス';
$MYSQL_USER = 'MySQLユーザー名';
$MYSQL_PASSWORD = 'MySQLユーザーのパスワード';
$MYSQL_DATABASE = 'データベース名';
$dbType = "mysql";
[リスト12]confirm.php(抜粋)
$g = Net_UserAgent_Mobile_GPS::factory();
// GPS位置情報を取得
$res = $g->getGPSResponse();

$util = new Util();
// 緯度、経度は世界測地系(10進法)へ変換
$lat_world = $util->convert($res['lat']);
$lon_world = $util->convert($res['lon']);
// 逆ジオコーディングで住所情報を取得
$address = $util->getGoogleMapAddress($lat_world, $lon_world);
// 携帯向けに出力できるようにSJISへ文字コードを変換
mb_convert_variables("SJIS", "auto", $address);

// 端末IDを取得してhashの値を取得
$agent = Net_UserAgent_Mobile::singleton();
$hash = $util->getHash($agent->getUID());

#略
$pdo = new PDO("{$dbType}:host={$MYSQL_HOST}; dbname={$MYSQL_DATABASE}","{$MYSQL_USER}", "{$MYSQL_PASSWORD}");
// 投稿情報を取得する
$stmt = $pdo->prepare("SELECT * FROM mail where hash = ? AND status = ?");
$stmt->execute(array($hash,0));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

#略
<form action="post.php" method="post">
<input type="hidden" name="lon" value="<?php echo $lon_world; ?>" />
<input type="hidden" name="lat" value="<?php echo $lat_world; ?>" />
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="address" value="<?php echo $address['pref'].$address['city'].$address['town'].$address['detail']; ?>" />

 投稿完了画面へ引き継ぐパラメーターは緯度、経度、mailテーブルのプライマリキー、逆ジオコーディングで取得した住所情報になります。

 画像表示部分についてはimagickを利用しています。imagickについては、PHPライブラリ「Imagick」で携帯の機種に応じた画像を表示するを参照ください。

 後述のPCでの投稿データ閲覧部分でも使用するのでファイル名、幅サイズを指定することでサイズに応じた画像を表示するようにしています。

[リスト13]confirm.php(抜粋)
<img src="image.php?file=<?php echo $row['image_name']; ?>&width=<?php echo $width; ?>" />
[リスト14]image.php(抜粋)
// ファイル名取得
$image_file = 'image/' . $_GET['file'];
// 幅サイズ取得
$width = $_GET['width'];

#略
// 縦を0にして縦横比同じ割合でサイズ変換
$height = 0;
// Imagickを利用
$image = new Imagick();
// サイズ変換前の画像ファイルを読込
$image->readImageBlob(file_get_contents($image_file));
// 画像種別を指定
$image->setImageFormat($ext);
// サイズを変換
$image->thumbnailImage($width,$height);

#略
header('Content-type: '.$file_mime);
echo $image;

投稿完了

 前画面から受け取った緯度、経度、逆ジオコーディングで取得した住所情報とステータスを「1(投稿済み)」にしてレコードを更新します。

[リスト15]post.php(抜粋)
$pdo = new PDO("{$dbType}:host={$MYSQL_HOST}; dbname={$MYSQL_DATABASE}","{$MYSQL_USER}", "{$MYSQL_PASSWORD}");
// 投稿情報を更新
$pdo->query("SET CHARACTER SET sjis");
$stmt = $pdo->prepare("UPDATE mail SET lat = ?, lon = ?, address = ?, status = ?, updated_date = ? WHERE id = ?");
$stmt->execute(array($lat, $lon, $address, 1, date('Y-m-d H:i:s'), $id));

 携帯ブラウザのため文字コードをSJISにしているので、UPDATE文の前に「SET CHARACTER SET sjis」のSQL文を発行しておきます。

 ここで携帯からの投稿は終わりになります。

次のページ
Google Maps上に投稿データを展開:PCからの閲覧

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4833 2010/03/03 11:53

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング