質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

【NO.2】PHPでMySQLからデータ取得してXMLで書きだす方法に不明な所あります。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 808

dreamers

score 35

PHP MySQL XML

質問

1.下記ソースコード中、「あ」「い」と同じコードが記載されているので「あ」は不要ではないでしょうか。

2.下記ソースコード中、「う」の目的は何でしょうか。
下記phpをブラウザからコールしたとき、saveXML()の内容をブラウザに表示するたものものでしょうか。

3.下記ソースコード中、「え」のsaveXML()の内容をブラウザに表示するにはどうすればいいのでしょうか。
(該当ページにある下記説明とおり実施したつもりですが、ブラウザに

<?xml version="1.0"?>
<markers/>


と表示され、明細は表示されませんでした。)

Checking That the XML Output Works

Call this PHP script from the browser to make sure it's producing valid XML. If you suspect there's a problem with connecting to your database, you may find it easier to debug if you remove the line in the file that sets the header to the text/xml content type, as that usually causes your browser to try to parse XML and may make it difficult to see your debugging messages.

以上、よろしくお願い致します。

該当のソースコード

目的は、PHPでmySQLからデータ取得してXMLで書きだすことです。

【書き出した結果例】

<?xml version="1.0"?>
<markers>
<marker name="Round Table Pizza: Mountain View" address="570 N Shoreline Blvd, Mountain View, CA" lat="37.402653" lng="-122.079353" distance="0.38091455044131"/>
<marker name="Kapp's Pizza Bar & Grill" address="191 Castro St, MountainView, CA" lat="37.393887" lng="-122.078918" distance="0.5596115438175"/>
...
</markers>

上記書き出しのためのソースコードは下記のとおりです。
(https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=ja#createmap の説明文のソースコードです。)

<?php
require("phpsqlsearch_dbinfo.php");

// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];

// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");  
$parnode = $dom->appendChild($node);    

// Opens a connection to a mySQL server
$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {
  die("Not connected : " . mysql_error());
}

// Set the active mySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ("Can\'t use db : " . mysql_error());
}

// Search the rows in the markers table
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius));
$result = mysql_query($query);    //・・・あ

$result = mysql_query($query);    //・・・い
if (!$result) {
  die("Invalid query: " . mysql_error());
}

header("Content-type: text/xml");  //・・・う

// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("marker");              
  $newnode = $parnode->appendChild($node);     
  $newnode->setAttribute("name", $row['name']);
  $newnode->setAttribute("address", $row['address']);
  $newnode->setAttribute("lat", $row['lat']);
  $newnode->setAttribute("lng", $row['lng']);
  $newnode->setAttribute("distance", $row['distance']);
}

echo $dom->saveXML();       //・・・え
?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

どこから持ってきたソースかわかりませんが、もう少しまともなものを
参考にされたほうがよろしいかと。
少なくともこれから学習するのにmysql_関数はありえません。
(新しいPHPではすでに廃止されている関数)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/11 22:30

    ご回答ありがとうございます。
    mysql_関数はPHPではすでに廃止されている関数なのですね。

    実は、下記グーグルdevelopersサイトのコードを理解しようとしています。
    https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=ja#findnearsql

    表題:Creating a Store Locator with PHP, MySQL & Google Maps
    作者:Google Geo APIs Team
    作成日:August 2009

    6年前のコードなのでmysql_関数を使っていると思われます。
    map上のある地点からの半径内にあるマーカーを選択する説明は、このソースコードしか見当たらないので、とりあえず、このソースコードを読み解きながら、考え方を理解していきたいと思っています。しかるのちにmysql_関数はじめ、おかしい箇所は修正していきたいと思っています。
    おいしそがしいところ誠に恐縮ですが、お時間のあるときなど、今後とも、ご教示のほど宜しくお願い致します。

    キャンセル

  • 2016/10/12 10:14

    余計なお世話だと思われるかもしれませんが、古い環境でしか動かないソースを直してまで最新の環境に持ってくることが、本来の学習にかけるべきパワーを削いでいることに気づいてほしいです。
    ネットの検索では、更新されてから1年以内のコンテンツに絞って検索する機能があったりしますので、新しい情報を探してからチャレンジしたほうが学習が捗るものと察します。

    キャンセル

  • 2016/10/12 19:47

    m6uさん、コメントありがとうございます。

    下記のようなmapを作成しようとしています。
    http://waox.main.jp/news/php/storelocator_select.html
    このための総体的なソースプログラムは下記以外に見つかりませんでした。
    https://developers.google.com/maps/articles/phpsqlsearch_v3

    m6uさんのおっしゃることは分かるのですが、新しい記述のものが見つからず、致し方なく上記のソースを追っかけるしかないと思っているところです。
    今しばらく、精進してみます。



    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る