どなたか助けて下さい。
プログラミングは現在勉強中なので、超初心者です。。。
行いたい事
- sortable内にSQL内からPHPで読みだしたデータを表示(店舗情報)
- リストをドラッグ&ドロップで並び替え
- 表示された上下店舗の距離情報(SQL内にあり)をPHPで計算して特定の場所に表示
現在1.2.については皆様にお助け頂き、概ね完成しております。
又、3,の計算式についてもネットで検索した情報で完成しています。
この計算式の変数に代入する為に、2,のD&Dで移動後にリストのIDを取得して、どの様な並びになっているか特定しようと考えました。
そこで、コールバックイベントを利用して、"toArray"にsortableのliのIDを取得する事もできました。
困っているのは、このjsで取得したtoArray内のID情報からどの様にPHPの計算式に利用する変数に代入するのか?です。
※すいません…説明が下手で分かりにくいと思います。
距離計算については既にPHPで完成しているので、何とか最下部の計算式の変数に代入したいのですが、
いくら考えても最善の方法がわかりません。
【例】
js側⇒ Ver log = 2,1,3,5,6,4,9,7,8,10(D&D後はこの様な形で各liのidが保存されています)
このidを元にそのli内の$row['KEIDO']と$row['IDO']の情報をPHPの計算式の変数に代入したい
以下が現状のコードになります。
php
1 <ul id="datas"> 2 <li id="1"><?php 3 $sql = "SELECT * FROM shop LIMIT 0,1"; 4 $stmt = $dbh->query($sql); 5 foreach ($stmt as $row) { 6 echo $row['SHOP_NAME'].':'.$row['ADDRESS']; 7 $aa =$row['KEIDO']; 8 $ab =$row['IDO']; 9 10 }?> </li> 11 12 <li id="2"><?php 13 $sql = "SELECT * FROM shop LIMIT 1,1"; 14 $stmt = $dbh->query($sql); 15 foreach ($stmt as $row) { 16 echo $row['SHOP_NAME'].':'.$row['ADDRESS']; 17 $aa =$row['KEIDO']; 18 $ab =$row['IDO']; 19 20 }?> 21 </li> 22 //*このテーブルが10個ほど並びます 23 </ui> 24 <p id="log"></p> //ここに下記jsのidは正常に表示されます。 25 26
JavaScript
1$('#datas').sortable({ 2 update: function(){ 3 var log = $(this).sortable("toArray"); 4 $("#log").text(log); 5 } 6});
↓距離計算用のPHP
PHP
1<?php 2 $lat1 = 緯度; **//ここに$row['KEIDO']; を入れたい**(jsの変数(id1つ目の)) 3 $lon1 = 経度; **//ここに$row['IDO'];を入れたい** (jsの変数(id1つ目の)) 4 $lat2 = 緯度; **//ここに$row['KEIDO']; を入れたい** (jsの変数(id2つ目の)) 5 $lon2 = 経度; **//ここに$row['IDO'];を入れたい** (jsの変数(id2つ目の)) 6 $hoge=location_distance($lat1, $lon1, $lat2, $lon2); 7 $hoge["distance"];//が小数点付きの直線距離を返します(メートル単位)。 8 $hoge["distance_unit"];//が整形された直線距離を返す(1000m以下ならメートルで記述 例:836m | 1000m以上は小数点第一位以上の数をkmで記述 例:2.8km) 9 function location_distance($lat1, $lon1, $lat2, $lon2){ 10 $lat_average = deg2rad( $lat1 + (($lat2 - $lat1) / 2) );//2点の緯度の平均 11 $lat_difference = deg2rad( $lat1 - $lat2 );//2点の緯度差 12 $lon_difference = deg2rad( $lon1 - $lon2 );//2点の経度差 13 $curvature_radius_tmp = 1 - 0.00669438 * pow(sin($lat_average), 2); 14 $meridian_curvature_radius = 6335439.327 / sqrt(pow($curvature_radius_tmp, 3));//子午線曲率半径 15 $prime_vertical_circle_curvature_radius = 6378137 / sqrt($curvature_radius_tmp);//卯酉線曲率半径 16 17 //2点間の距離 18 $distance = pow($meridian_curvature_radius * $lat_difference, 2) + pow($prime_vertical_circle_curvature_radius * cos($lat_average) * $lon_difference, 2); 19 $distance = sqrt($distance); 20 21 $distance_unit = round($distance); 22 if($distance_unit < 1000){//1000m以下ならメートル表記 23 $distance_unit = $distance_unit."m"; 24 }else{//1000m以上ならkm表記 25 $distance_unit = round($distance_unit / 100); 26 $distance_unit = ($distance_unit / 10)."km"; 27 } 28 29 //$hoge['distance']で小数点付きの直線距離を返す(メートル) 30 //$hoge['distance_unit']で整形された直線距離を返す(1000m以下ならメートルで記述 例:836m | 1000m以下は小数点第一位以上の数をkmで記述 例:2.8km) 31 return array("distance" => $distance, "distance_unit" => $distance_unit); 32 } 33 34 35 ?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/04 15:59