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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3963閲覧

google mapにclassを付ける方法

aba623ky

総合スコア63

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/10/14 06:49

編集2016/10/16 03:28
<!DOCTYPE html>
```html <html> <body> <table border="1">
<tr><td> <? h($rest->name) ?> </td></tr> <tr><td> <?= h($rest->genre->catch) ?> </td></tr> </table> </body>
※htmlを表示中!! 要素の詳細を表示でhtmlを出力しました。
<table border="1"><tr><td>くいものや チャカ 津田沼店</td></tr><tr class="map"><td>140.022590803335.6900228211</td></tr><tr><td>千葉県習志野市津田沼1-3-11 昭和第3ビル2F</td></tr></table> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Google Maps V3</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?key=My Key&sensor=false"></script> <script type="text/javascript"> var gmap; google.maps.event.addDomListener(window, 'load', function() { var lat =35.60472; var lng =140.12333 ;
var latlng = new google.maps.LatLng(lat, lng); var mapOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP, scaleControl: true }; var mapObj = new google.maps.Map(document.getElementsByClassName('gmap'), mapOptions); var marker = new google.maps.Marker({ position: {lat:35.60472, lng: 140.12333}, map: mapObj }); }); </script>
</head> <body> <div id="gmap" style="width: 500px; height: 370px; border: 1px solid Gray;"> </div> </body> </html> ```

html

1var gmap; 2 google.maps.event.addDomListener(window, 'load', function() 3 { 4 var lat =35.60472; 5 var lng =140.12333 ; 6 7 8 var latlng = new google.maps.LatLng(lat, lng); 9 var mapOptions = { 10 zoom: 12, 11 center: latlng, 12 mapTypeId: google.maps.MapTypeId.ROADMAP, 13 scaleControl: true 14 }; 15 var mapObj = new google.maps.Map(document.getElementsByClassName('gmap'), mapOptions); 16 17 var marker = new google.maps.Marker({ 18 position: {lat:35.60472, lng: 140.12333}, 19 map: mapObj 20 }); 21 }); 22 23 24

ホットペーパーapiから千葉県にある10件の店舗を取得しました。その10件分の店舗にgoogle map apiの地図を表示するため(つまりマッシュアップです)、色々と調べました。
mapにclassを与え、getElementsByClassNameを使えば複数配置できることを知りました。
一応mapにクラスを与え(mapというクラスを使い複数配置するため)、getElementsByIdからgetElementsByClassName(getElementByIdだと地図が一つしか表示されないため)に変えました。
しかし、地図は表示されません。
ループを使わないと地図を複数表示できないという話を聞きましたが、ループを使わないと表示できないのですか?
一応ループを使いましたが、結果は同じく表示されません。

javascript

1var i = 0; 2 i++ 3///example

何を補足すれば地図が表示されますか?

<?php $key='my key'; $count='10'; $large_area='Z014'; $start =1; $format='xml'; $url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&format='.$format; $xml=simplexml_load_file($url); $total_count=$xml->results_available; if(!$xml->shop){ echo 'We can not find!!'; } else { foreach($xml->shop as $r){ echo '<table border="1">'; echo '<tr>'; echo '<td>'; echo $r->name; echo '</td>'; echo '</tr>'; echo '<tr class="map">'; echo '<td>'; echo $r->lng; echo $r->lat; echo '</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'; echo $r->address; echo '</td>'; echo '</tr>'; echo '</table>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Google Maps V3</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?key=mykey&sensor=false"></script> <script type="text/javascript"> var gmap; google.maps.event.addDomListener(window, 'load', function() { var lat =35.60472; var lng =140.12333 ; var latlng = new google.maps.LatLng(lat, lng); var mapOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP, scaleControl: true }; var mapObj = new google.maps.Map(document.getElementsByClassName('gmap'), mapOptions); var marker = new google.maps.Marker({ position: {lat : 35.60472, lng : 140.12333} , map: mapObj }); }); </script> </head> <body> <div id="gmap" style="width: 500px; height: 370px; border: 1px solid Gray;"> </div> </body> </html> <?php } } ?>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/14 07:20

出力されたHTMLが文法的に正しく出力されているかどうかを確認してください。
fu_sen

2016/10/14 07:20

過去の質問を見ないと質問の意味が全く分からないです
aba623ky

2016/10/14 07:21

fu_senさん、すみませんでした。
退会済みユーザー

退会済みユーザー

2016/10/14 07:25

出力されたHTMLが文法的に正しく出力されているかどうかを確認してください。
aba623ky

2016/10/14 07:27

正しく出力されています。
退会済みユーザー

退会済みユーザー

2016/10/14 07:29

嘘をついちゃいけません。正しくないから確認を促しているのですから。
aba623ky

2016/10/14 07:35

htmlを表示します。少々お待ち下さい。
fu_sen

2016/10/14 07:44

ちなみにループをどこに入れて失敗したのでしょうか
aba623ky

2016/10/14 07:52

var gmap;の後に入れました。
date

2016/10/14 07:54

htmlの表示はもうさっき追加されたので終わり?
退会済みユーザー

退会済みユーザー

2016/10/14 07:57

まったくこれまでの回答が生かされていませんねぇー
date

2016/10/14 08:12

どのブラウザを使っているかわかりませんが、主要なブラウザはページのソースを表示はあるのになぜ、要素の詳細で出しているのか理解できません。AndroidやiPhoneでやっているとかならわかるけどね
aba623ky

2016/10/14 08:20

htmlの追加はさっきので終わりです。
退会済みユーザー

退会済みユーザー

2016/10/14 08:26

「htmlの追加はさっきので終わりです。 」ということは、質問に出している情報は全てではなさそうですね。提示されたソースではそのような実行結果にはなるはずがありません。あなたの目の前で起こることを、回答者が目の前で同じ現象を確認できない限り、問題を解決することはできません。中途半端に情報を提示せず、すべての情報を晒してください。
aba623ky

2016/10/14 08:29

地図のhtmlはさっきので終わりなんです。
退会済みユーザー

退会済みユーザー

2016/10/14 08:31

htmlじゃなくてPHPのソースも含めいての話。
guest

回答2

0

今の所、ヒントだけにとどめておきます。

サンプル

このプログラムの実行結果、出力されたHTML

html

1<!DOCTYPE HTML> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>ホットペッパーAPIテスト(アホでも設置するだけで動く)</title> 6 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> 7 </head> 8 <body> 9 <div class="container"> 10 <h1>ホットペッパーAPIサンプル</h1> 11 <form method="get"> 12 <div class="row"> 13 <div class="col-md-4"> 14 <div class="form-group"> 15 <label for="food_category">料理カテゴリ</label> 16 <select class="form-control" name="food" id="food_category"> 17 <option value="">料理カテゴリ</option> 18 <option value="FK01">和食</option> 19 <option value="FK02">洋食</option> 20 <option value="FK03">中華・アジアン</option> 21 <option value="FK04">軽食</option> 22 </select> 23 </div> 24 <div class="form-group"> 25 <label for="budget">予算</label> 26 <select class="form-control" name="budget" id="service_area"> 27 <option value="">予算</option> 28 <option value="B001">~2000円</option> 29 <option value="B002">2001~3000円</option> 30 <option value="B003">3001~4000円</option> 31 <option value="B008">4001~5000円</option> 32 <option value="B004">5001~7000円</option> 33 <option value="B005">7001~10000円</option> 34 <option value="B006">10001円~</option> 35 </select> 36 </div> 37 <div class="form-group"> 38 <label for="credit_card">クレジットカード</label> 39 <select class="form-control" name="credit_card" id="credit_card"> 40 <option value="">クレジットカード</option> 41 <option value="c01">VISA</option> 42 <option value="c02">マスター</option> 43 <option value="c03">UC</option> 44 <option value="c04">アメックス</option> 45 <option value="c05">DC</option> 46 <option value="c06">DINERS</option> 47 <option value="c07">JCB</option> 48 <option value="c08">NC</option> 49 <option value="c09">UFJ</option> 50 <option value="c10">iD</option> 51 <option value="c11">銀聯</option> 52 </select> 53 </div> 54 </div> 55 <div class="col-md-4"> 56 <div class="form-group"> 57 <label for="name_kana">店名 or ふりがな</label> 58 <input class="form-control" type="text" name="name_kana" id="name_kana" value="" /> 59 </div> <div class="form-group"> 60 <label for="keyword">フリーワード</label> 61 <input class="form-control" type="text" name="keyword" id="keyword" value="東京都" /> 62 </div> 63 </div> 64 </div> 65 <div class="row"> 66 <div class="col-md-12"> 67 <div class="form-group"> 68 <button type="submit" class="btn btn-primary">検索</button> 69 </div> 70 </div> 71 </div> 72 </form> <p>検索結果 28,398 件</p> 73 <div class="row"> 74 <div class="col-md-6 shop"> 75 <div> 76 <dl> 77 <dt>ID</dt> 78 <dd>J001134550</dd> 79 <dt>店名</dt> 80 <dd>創作和食 銀座 KUSHIMA くしま</dd> 81 <dt>ジャンル</dt> 82 <dd>和食</dd> 83 <dt>所在地</dt> 84 <dd>東京都中央区銀座5-7-10 EXIT MELSA 8F</dd> 85 </dl> 86 <div class="map" data-lat="35.6706088980" data-lng="139.7639976825"> 87 </div> 88 </div> 89 </div> 90 <div class="col-md-6 shop"> 91 <div> 92 <dl> 93 <dt>ID</dt> 94 <dd>J000770561</dd> 95 <dt>店名</dt> 96 <dd>Party Space nom3 ノモスリー 新宿総本店</dd> 97 <dt>ジャンル</dt> 98 <dd>カラオケ・パーティ</dd> 99 <dt>所在地</dt> 100 <dd>東京都新宿区歌舞伎町2-45-4 与三郎ビル</dd> 101 </dl> 102 <div class="map" data-lat="35.6965428912" data-lng="139.7004764829"> 103 </div> 104 </div> 105 </div> 106 </div> 107 <div class="row"> 108 <div class="col-md-6 shop"> 109 <div> 110 <dl> 111 <dt>ID</dt> 112 <dd>J000839221</dd> 113 <dt>店名</dt> 114 <dd>地鶏坊主 渋谷本店</dd> 115 <dt>ジャンル</dt> 116 <dd>居酒屋</dd> 117 <dt>所在地</dt> 118 <dd>東京都渋谷区神南1-11-5 ダイネス壱番館B1F</dd> 119 </dl> 120 <div class="map" data-lat="35.6628769778" data-lng="139.7011311109"> 121 </div> 122 </div> 123 </div> 124 <div class="col-md-6 shop"> 125 <div> 126 <dl> 127 <dt>ID</dt> 128 <dd>J001134679</dd> 129 <dt>店名</dt> 130 <dd>塚田農場 池袋メトロポリタン口店 北海道シントク町</dd> 131 <dt>ジャンル</dt> 132 <dd>居酒屋</dd> 133 <dt>所在地</dt> 134 <dd>東京都豊島区西池袋1-10-1 ISOビル6F</dd> 135 </dl> 136 <div class="map" data-lat="35.7291952691" data-lng="139.7088302940"> 137 </div> 138 </div> 139 </div> 140 </div> 141 <div class="row"> 142 <div class="col-md-6 shop"> 143 <div> 144 <dl> 145 <dt>ID</dt> 146 <dd>J001144703</dd> 147 <dt>店名</dt> 148 <dd>瓦 ダイニング kawara DINING 新宿靖国通り</dd> 149 <dt>ジャンル</dt> 150 <dd>ダイニングバー</dd> 151 <dt>所在地</dt> 152 <dd>東京都新宿区歌舞伎町1-23-15 SUZUYAビルディング9F</dd> 153 </dl> 154 <div class="map" data-lat="35.6940015248" data-lng="139.7010020958"> 155 </div> 156 </div> 157 </div> 158 <div class="col-md-6 shop"> 159 <div> 160 <dl> 161 <dt>ID</dt> 162 <dd>J000980798</dd> 163 <dt>店名</dt> 164 <dd>タパスブランコ アキバトリム店 秋葉原</dd> 165 <dt>ジャンル</dt> 166 <dd>ダイニングバー</dd> 167 <dt>所在地</dt> 168 <dd>東京都千代田区神田佐久間町1-6-5 アキバトリム 5F</dd> 169 </dl> 170 <div class="map" data-lat="35.6978771997" data-lng="139.7737315932"> 171 </div> 172 </div> 173 </div> 174 </div> 175 <div class="row"> 176 <div class="col-md-6 shop"> 177 <div> 178 <dl> 179 <dt>ID</dt> 180 <dd>J000001774</dd> 181 <dt>店名</dt> 182 <dd>北海道 新宿アイランドタワー店</dd> 183 <dt>ジャンル</dt> 184 <dd>和食</dd> 185 <dt>所在地</dt> 186 <dd>東京都新宿区西新宿6-5-1 新宿アイランドタワー44F</dd> 187 </dl> 188 <div class="map" data-lat="35.6933319355" data-lng="139.6927550460"> 189 </div> 190 </div> 191 </div> 192 <div class="col-md-6 shop"> 193 <div> 194 <dl> 195 <dt>ID</dt> 196 <dd>J000015767</dd> 197 <dt>店名</dt> 198 <dd>ビー Bee 町田店</dd> 199 <dt>ジャンル</dt> 200 <dd>居酒屋</dd> 201 <dt>所在地</dt> 202 <dd>東京都町田市原町田6-10-7 オカダヤ町田5F</dd> 203 </dl> 204 <div class="map" data-lat="35.5438952767" data-lng="139.4465236114"> 205 </div> 206 </div> 207 </div> 208 </div> 209 <div class="row"> 210 <div class="col-md-6 shop"> 211 <div> 212 <dl> 213 <dt>ID</dt> 214 <dd>J001153223</dd> 215 <dt>店名</dt> 216 <dd>EAST BLUE イーストブルー 池袋駅東口店</dd> 217 <dt>ジャンル</dt> 218 <dd>イタリアン・フレンチ</dd> 219 <dt>所在地</dt> 220 <dd>東京都豊島区東池袋1-9-10 ユタカビル6F</dd> 221 </dl> 222 <div class="map" data-lat="35.7311932488" data-lng="139.7144139055"> 223 </div> 224 </div> 225 </div> 226 <div class="col-md-6 shop"> 227 <div> 228 <dl> 229 <dt>ID</dt> 230 <dd>J001000599</dd> 231 <dt>店名</dt> 232 <dd>Color 渋谷本店</dd> 233 <dt>ジャンル</dt> 234 <dd>イタリアン・フレンチ</dd> 235 <dt>所在地</dt> 236 <dd>東京都渋谷区神南1-22-10 皆川ビル3F</dd> 237 </dl> 238 <div class="map" data-lat="35.6614357501" data-lng="139.7010917276"> 239 </div> 240 </div> 241 </div> 242 </div> 243 <div class="row"> 244 <div class="col-md-12"> 245 <ul class="pagination pagination-sm no-margin"> 246 <li class="active"><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=1">1</a></li> 247 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=11">2</a></li> 248 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=21">3</a></li> 249 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=31">4</a></li> 250 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=41">5</a></li> 251 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=51">6</a></li> 252 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=61">7</a></li> 253 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=11">次へ</a></li> 254 <li><a href="?food=&amp;budget=&amp;credit_card=&amp;large_service_area=&amp;service_area=&amp;name_kana=&amp;keyword=%E6%9D%B1%E4%BA%AC%E9%83%BD&amp;start=28391">最終</a></li> 255 </ul> 256 </div> 257 </div> 258 </div> 259 <script type="text/javascript" src="//www.google.com/jsapi"></script> 260 <script type="text/javascript"> 261 var map; 262 function initMap() { 263 var maps = document.getElementsByClassName('map'); 264 for (var i = 0; i < maps.length; i++) { 265 var latlng = { 266 lat: parseFloat(maps[i].getAttribute('data-lat')) 267 , lng: parseFloat(maps[i].getAttribute('data-lng')) 268 }; 269 map = new google.maps.Map(maps[i], { 270 center: latlng, 271 scrollwheel: false, 272 zoom: 16 273 }); 274 new google.maps.Marker({ 275 position: latlng, 276 map: map 277 }); 278 } 279 } 280 </script> 281 <script src="//maps.googleapis.com/maps/api/js?key=AIzaSyDyCBb_QDbedUEbak9SQUedh1cwxek7G08&callback=initMap&language=ja"></script> 282 </body> 283</html> 284

投稿2016/10/14 07:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/14 08:03

すみません。 maps[i]がヒントになりそうなきがするのですが・・・ 自信がないので
退会済みユーザー

退会済みユーザー

2016/10/14 08:06

出力されたHTMLを確認しましょう。
退会済みユーザー

退会済みユーザー

2016/10/14 08:10 編集

あなたのコードを実行すると、<html>よりも前で<table>が出力されているはずです。それではHTMLの文法に違反するんだということを目視で確認んしてください。 いつまでもそこに気づいていないから、皆さんHTMLの基礎から勉強しましょうというのです。
aba623ky

2016/10/14 08:24

それが地図を表示できない原因なのですか?
退会済みユーザー

退会済みユーザー

2016/10/14 08:28

問題点は複数箇所あります。まず最初に訂正すべき箇所です。訂正の順番を間違ってもいけないし、最初が間違っては、他が正しくても問題は解決しない。
aba623ky

2016/10/14 12:58

では、tableの中にgoole map apiのhtmlを入れれば問題がないんですね。 htmlを調べるとエラーが出てました。
退会済みユーザー

退会済みユーザー

2016/10/14 13:01

そうですか。
退会済みユーザー

退会済みユーザー

2016/10/14 13:03

> では、tableの中にgoole map apiのhtmlを入れれば問題がないんですね。 何の根拠があってそう判断できるのですか?
aba623ky

2016/10/14 13:09

htmlよりも前でtableを出力しているため
退会済みユーザー

退会済みユーザー

2016/10/14 13:10

それがなぜ、「あっている」という根拠なの?
aba623ky

2016/10/14 13:18

それは分かりません。
aba623ky

2016/10/14 13:19

勘でいったまでです。
退会済みユーザー

退会済みユーザー

2016/10/14 13:21

わからないことはわからないままにして、下手に判断しないこと。推測や憶測は問題解決の邪魔になります。 これはデバッグの基本的な心構えなので、今はまず、文法的に正しいHTMLを出力することに注力しましょう。
退会済みユーザー

退会済みユーザー

2016/10/14 13:23

勘が当たるのは経験を積んだ人でなければ当たりません。経験に基づかない感は役に立ちません。
aba623ky

2016/10/14 13:24

分かりました。すみません。
aba623ky

2016/10/14 13:37

文法的に正しいhtmlと言っていますが、javascriptとphpって違うコードですから、一緒にする方法が分からず僕はphpのtableの次にjavascriptのhtmlを書いてしまいます。
退会済みユーザー

退会済みユーザー

2016/10/14 13:46

<table> タグを <body> と </body> の間に出力するということです。
退会済みユーザー

退会済みユーザー

2016/10/14 13:51 編集

あと、複数のことを一度にやろうとすると問題を無駄にこじらせるだけですから、JavaScriptの部分は、消してしまってもいい。
aba623ky

2016/10/15 02:24

kosuke_shibuyaさん、少し分かってきました笑 もう一度tryしてみます!
退会済みユーザー

退会済みユーザー

2016/10/15 15:34

まだできないのか?
toutou

2016/10/15 16:08

他人の質問にありがとうっていってるくらい余裕があるからできてるはず
退会済みユーザー

退会済みユーザー

2016/10/15 16:19 編集

今回は根気強く教えて見たけど、本人の根気が持たんかったということかw。 多少、進歩があったように見えたのにねぇ‥
toutou

2016/10/15 16:39

見放してもいい時期はとっくに越えてるのに教えてたのはすごいと思います。教えるだけ無駄だと思います。進歩はない。
退会済みユーザー

退会済みユーザー

2016/10/15 18:39 編集

彼が進歩したとしたら、まあ、」それはそれで面白いかなとは思ったんですけどねw 多分小学生に教える方がもっと楽だとは思うけど。 まあ、本人が思っているより「自分がアホなんだ」と自覚することが第一だとは思います。 トライ&エラーができない時点で、アウトなんですけどね。 何より、「ブラックリスト機能」を実装して欲しいですわ。
aba623ky

2016/10/16 03:19

例を提示します。
退会済みユーザー

退会済みユーザー

2016/10/16 03:33 編集

例を提示したところで、あくまで例でしょ?それに対して回答をつけたところであなたは理解できるのですか? まあ、それならそれで構いませんが、では、次に、ホットペッパーAPIから帰ってきた検索結果をその table内に出力してください。
guest

0

ベストアンサー

すでにいくつか指摘されていますが順を追って話を進めていきます。質問を拝見したところ今回の案件はまだ難しいように思うので、この回答でわからない所があればコメントにてお聞きください。

概要

HTML や PHP の文法は必ず確認しておきましょう。ブラウザーは比較的寛容なので HTML のマークアップが崩れていてもある程度表示できることが多いですが、予期せぬ動作を引き起こすことがあります。今回の場合では DOCTYPE 宣言の前にページの要素が出力されてしまっているので <?php ?> の位置を移動します。

PHP に関して

PHP は必要に応じてページの任意の位置でタグを開くまたは閉じることであらゆる場所で出力を行うことができます。つまり echo でタグを出力する必要はなく PHP を閉じて HTML として記述すればよいということです。

各関数の役割を調べてみましょう。PHP を開発している団体が公開しているドキュメントが 公式サイト に掲載されています。関数名を打ち込んで検索してみてください。

URL のクエリを組み立てる際は http_build_query 関数に配列を渡しましょう。必要なエンコードが自動的に行われることに加え、何より & で繋がずに済みます。

文字などを PHP から出力する際はエスケープを行ってください。XSS 脆弱性の原因になります。echo 短縮構文(<?= '出力する文字列' ?>)と組み合わせて記述すると簡潔です。

またエラー処理を必ず行ってください。外部の URL からファイルを取得する操作は失敗する可能性があります。simplexml_load_file は失敗すると false を返します。

JavaScript に関して

各関数の役割を調べてみましょう。Firefox というブラウザを開発している Mozilla が公開しているドキュメントが MDN に掲載されています。関数名を打ち込んで検索してみてください。

ループの仕方も Web 検索すれば載っています。

コード

動くかは確認していませんが以上の点を反映したコードです。

lang

1<?php 2// エスケープ 3function h($str) { 4 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 5} 6 7// ロジック(出力の絡まない処理)はページ先頭で処理 8$url = 'https://webservice.recruit.co.jp/hotpepper/gourmet/v1/?'; 9$xml = simplexml_load_file($url . http_build_query(array( 10 'key' => 'my key', 11 'count' => 10, 12 'large_area' => 'Z014', 13 'start' => '1', 14 'format' => 'xml', 15))); 16 17if ($xml === false) { 18?> 19<h1>XML が取得できません</h1> 20<?php 21 exit; 22} 23?> 24<!DOCTYPE html> 25<html> 26<head> 27 <title>Google Maps V3</title> 28</head> 29<body> 30<?php 31// ここから PHP の出力を開始 32foreach ($xml->shop as $r) { 33?> 34 <table border="1"> 35 <tr> 36 <td><?= h($r->name) ?></td> 37 </tr> 38 <tr> 39 <td> 40 <!-- data-lat と data-lng に緯度経度情報を保存 --> 41 <div id="shop-<?= $r->id ?>" class="map" data-lat="<?= h($r->lat) ?>" data-lng="<?= h($r->lng) ?>" style="width: 500px; height: 370px; border: 1px solid gray;"></div> 42 </td> 43 </tr> 44 <tr> 45 <td><?= h($r->address) ?></td> 46 </tr> 47 </table> 48<?php 49} 50?> 51 <script src="https://maps.google.com/maps/api/js?key=My Key&sensor=false"></script> 52 <script> 53 // ID に shop- がついている要素をすべて取得 54 var elements = document.querySelectorAll("[id^='shop-']"); 55 56 // 各要素(map)に対して関数を一回ずつ実行 57 Array.prototype.forEach.call(elements, function (map) { 58 // 緯度経度を取得 59 // + をつけて数値へ変換 60 var lat = +map.dataset.lat; 61 var lng = +map.dataset.lng; 62 63 // 地図とマーカーの初期化 64 var marker = new google.maps.Marker({ 65 position: { lat: lat, lng: lng }, 66 map: new google.maps.Map(map, { 67 zoom: 12, 68 center: new google.maps.LatLng(lat, lng), 69 mapTypeId: google.maps.MapTypeId.ROADMAP, 70 scaleControl: true, 71 }), 72 }); 73 }); 74 </script> 75</body> 76</html>

投稿2016/10/14 19:22

編集2016/10/16 16:04
chitoku

総合スコア1610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aba623ky

2016/10/15 02:25

ヒント、ありがとうございます????
aba623ky

2016/10/15 02:28

google map apiについて一つ疑問があります。 ループは使う必要はないのですか?
aba623ky

2016/10/15 02:34

あと、tableにdivを使えるんですか⁉︎ divとtableって違うでしょう?
chitoku

2016/10/15 04:25

ループはこのコードでも使用しています。Array.prototype.forEach.call に続く部分です。ループには様々な書き方があり、for 文や while 文などもあります。 table 要素の使い方については紹介した MDN を読んで下さい。table ではなく td 要素の内側に div を使用していることに注目してください。 HTML の仕様では td 要素の「許可された内容」には「フローコンテンツ」と書かれています。div 要素のページを見ると「コンテンツカテゴリ」に「フローコンテンツ」と書かれているので td 要素内で使用することが許可されていることがわかります。 https://developer.mozilla.org/ja/docs/Web/HTML/Element/td https://developer.mozilla.org/ja/docs/Web/HTML/Element/div
aba623ky

2016/10/15 08:03

forEachの部分ですね?
aba623ky

2016/10/15 08:04

あと話が逸れますが、こういうコードじゃないとダメって事はないですよね?つまり、間違いのコードじゃない限り、ちゃんと出力される限りコードはどんな風のコードでも大丈夫ですよね?
aba623ky

2016/10/15 14:34

つまり、bodyの中にjavascriptやphpタグを全て打っ込むんですね?
chitoku

2016/10/15 14:45

あなたが別のコードを書くことができるなら teratail で質問する必要はないはずです。いずれかの回答で質問を解決済みに設定して質問を終了してください。
aba623ky

2016/10/15 14:59

質問を終了にしますが、さいごに質問させてください。 bodyの中にjavascriptやphpタグを全て打っ込むんですね
chitoku

2016/10/15 15:01

質問の意図を理解しかねます。私の提示した例ではそうなっていません。
aba623ky

2016/10/15 15:22

phpタグと言っても、ホットペーパーapiのレスポンスフィールドのことです。
chitoku

2016/10/15 16:42

出力が必要なので body 要素の内側に記述されているのであって PHP だから body の内側に記述されているわけではありません。回答の [PHP に関して] の箇所を読み直してください。
aba623ky

2016/10/16 02:52

すみません、色々と有難うございました。
chitoku

2016/10/16 07:23

質問が以上であればスレッドを終了してください。
aba623ky

2016/10/17 02:50

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問