投稿確認フォームの実装
前項で取得した住所、端末IDの名前でファイルに書き出したhashの値を取得してDBより投稿情報を取得して投稿確認フォームを出力します。
DBから投稿情報を取得する方法は前回と同様にPDOを利用します。DBサーバへの接続情報はconfig.phpに記述しています。
$MYSQL_HOST = 'MySQLサーバーのアドレス'; $MYSQL_USER = 'MySQLユーザー名'; $MYSQL_PASSWORD = 'MySQLユーザーのパスワード'; $MYSQL_DATABASE = 'データベース名'; $dbType = "mysql";
$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での投稿データ閲覧部分でも使用するのでファイル名、幅サイズを指定することでサイズに応じた画像を表示するようにしています。
<img src="image.php?file=<?php echo $row['image_name']; ?>&width=<?php echo $width; ?>" />
// ファイル名取得
$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(投稿済み)」にしてレコードを更新します。
$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文を発行しておきます。
ここで携帯からの投稿は終わりになります。
