androidの情報をデータベースへ送るまでの過程で

Writer: admin Type: このテヒョンのiPhone Date: 2018-12-15 00:00
androidの情報をデータベースへ送るまでの過程です。 カテゴリ全然違うところにおいていたので新しく作成しました。:::::::: ::android:: ::::::::@Override public void onLocationChanged(Location location){ String url = server + path + "?username=" + username + "&latitude=" + location.getLatitude() + "&longitude=" + location.getLongitude() + "timestamp=" + System.currentTimeMillis(); try{ HttpClient httpClient = new DefaultHttpClient(); httpClient.execute(new HttpGet(url)); Toast.makeText(getApplicationContext(),"位置を送信しました",Toast.LENGTH_LONG).show(); }catch (IOException e){ Toast.makeText(getApplicationContext(),"Error:" + e.getMessage(),Toast.LENGTH_LONG).show(); } }::::::: :: php :: :::::::function saveLocation() { try { global $db_username; global $db_password; $db = 'mysql:dbname=LocationLog;host=localhost'; $pdo = new PDO($db, $db_username, $db_password); $sql_command = 'INSERT INTO LocationLog (username, latitude, longitude, timestamp) VALUES(`username`,`latitude`,`longitude`,`timestamp`)'; $smtp = $pdo->prepare($sql_command); $args[] = $_GET['username']; $args[] = $_GET['latitude']; $args[] = $_GET['longitude']; $args[] = $_GET['timestamp']; $smtp->execute($args); $pdo = null; } catch (Exception $e) { } }これでphpに情報は送れているのでしょうか。androidでは現在だと非同期通信で送るのがあたりまえ?っぽいですがこれはhttpclientだかで送ってphpでは$_GETで受け取っています。AsnycTaskの使用はありません。 情報としては足りないかと思いますがこのコードから多少改良してでも情報を受け渡し可能になるのかが知りたいです。できるできない程度の回答でよろしいのでどうかお願いいたします。共感した0###>phpに情報は送れているのでしょうか。phpに送れているかどうかは、phpスクリプトの先頭で受け取ったデータをログに書き出すようにしてみればいいと思います。ただし、受け取ったあとの処理はちょっと如何なものかと(汗$_GETの内容の妥当性はfunction saveLocationを呼び出す前にチェック済と仮定しても、>$sql_command = 'INSERT INTO LocationLog (username, latitude, longitude, timestamp) VALUES(`username`,`latitude`,`longitude`,`timestamp`)';名前付きパラメターは :name という形式ですし、パラメータをバッククオートする必要はありません。また(疑問符パラメータでなく)名前付きパラメータを使うのであれば、executeで渡す配列の添え字も指定しないといけません。http://php.net/manual/ja/pdo.prepare.php$sql_command = 'INSERT INTO LocationLog (username, latitude, longitude, timestamp) VALUES(:username, :latitude, :longitude, timestamp)';$smtp = $pdo->prepare($sql_command);$args = [];$args[':username'] = $_GET['username'];$args[':latitude'] = $_GET['latitude'];$args[':longitude'] = $_GET['longitude'];$args[':timestamp'] = $_GET['timestamp'];$smtp->execute($args);もしくは$sql_command = 'INSERT INTO LocationLog (username, latitude, longitude, timestamp) VALUES(?, ?, ?, ?)';$smtp = $pdo->prepare($sql_command);$args = [];$args[] = $_GET['username'];$args[] = $_GET['latitude'];$args[] = $_GET['longitude'];$args[] = $_GET['timestamp'];$smtp->execute($args);ナイス0
###蛇足ですが・・>$db = 'mysql:dbname=LocationLog;host=localhost';DSNでcharset指定するように習慣付けましょう。今回はマルチバイト文字がないので大丈夫でしょうけど、流用するときにうっかり忘れることも多々ありますのでhttp://php.net/manual/ja/ref.pdo-mysql.connection.phpあと・・・。PDOStatementオブジェクトの変数名が $smtp というのはちょっと気分的にアレです。まぁ変数名なんて何だっていいっちゃいいのですが(汗
###ご回答ありがとうございました。細かいところまで教えていたのでそれをもとに自分で調べていきます。

 

TAG