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

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

ただいまの
回答率

89.22%

現在地の経度、緯度の値を取得し利用する方法について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,423

i_ok

score 7

私は、TwitterAPIを用いたシステムの開発を行っています。

<?php
$s_width = '<script type="text/javascript">document.write(latitude);</script>';
if(isset($_POST['search']) && $_POST['search']!==""){
header("Location:123.php?search=".$_POST['search']."?".$s_width);
}else{
$flag=1;
}
?>

<html>
<head>
<script type="text/javascript">
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
function successCallback(position) { /* 成功時の処理 */
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
}
</script>
<mata charset="UTF-8"/>


<title>入力画面</title>

</head>
<CENTER>
<div class="top">
<font size = 10><h1>入力画面</h1></font>
</div>

<div>
<form method="POST" action="index.php">
<input type="text" id="search" name="search">
<input type="submit" value="検索">
</form>
</div>

<div class="bottom">
</div>
</CENTER>
</body>
</html>


以上のソースコードで検索フォームを作ったのですが、検索(search) はPOSTとして受け取ったのですが、経度、緯度をPOSTとして検索POSTと一緒に送ることができません。
仮に送ることができたとしてもsearch結果に結合してしまいます。

<?php
require 'XXX';

$consumer_key = 'XXX';
$consumer_secret = 'XXX';
$access_token = 'XXX';
$access_token_secret = 'XXX';

$connection = new TwistOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

// キーワードによるツイート検索
0. $tweets_params = ['q' => '花火' ,'geocode' => '経度,緯度,範囲','count' => '10'];
$tweets = $connection->get('search/tweets', $tweets_params)->statuses;

foreach ($tweets as $value) {
// 検索キーワードをマーキング
$text = htmlspecialchars($value->text, ENT_QUOTES, 'UTF-8', false);

$keywords = preg_split('/,|\sOR\s/', $tweets_params['q']); //配列化
foreach ($keywords as $key) {
$text = str_ireplace($key, '<span class="keywords">'.$key.'</span>', $text);
}
// ツイート表示のHTML生成
disp_tweet($value, $text);
}

function disp_tweet($value, $text){
$icon_url = $value->user->profile_image_url;
$screen_name = $value->user->screen_name;

$date = date('Y/m/d H:i', strtotime($value->created_at));

$tweet_id = $value->id_str;
$url = 'https://twitter.com/' . $screen_name . '/status/' . $tweet_id;

echo '<div class="tweetbox">' . PHP_EOL;
echo '<div class="thumb">' . '<img alt="" src="' . $icon_url . '">' . '</div>' . PHP_EOL;
echo '<div class="meta"><a target="_blank" href="' . $url. '">' . $date . '</a>' . '<br>@' . $screen_name .'</div>' . PHP_EOL;
echo '<div class="tweet">' . $text . '</div>' . PHP_EOL;
echo '</div>' . PHP_EOL;
}
?>


以上のソースコードで現在地の緯度、経度を取得した値を0番の行のgeocodeの緯度、経度に値を移す方法に苦戦しています。
サーバはMARPです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/08/02 00:34

    コメント欄に書かれているコードについて、質問文の最後に追記されてはいかがでしょうか。(コメント欄は編集できますので、質問文に追加した後、最低限の文言まで編集されることをお勧めします)

    キャンセル

  • i_ok

    2016/08/02 00:53

    質問するソースコードを変更致しました。
    javascriptからPHPへのデータ渡しについてですが、POSTでの可能なのでしょうか?

    キャンセル

  • kei344

    2016/08/02 01:15

    回答が付いた質問の編集は慎重に行ってください。質問文のコードについて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。

    キャンセル

回答 1

checkベストアンサー

+1

PHPとJavaScriptの処理の順番について理解が必要です。
サンプルで書かれた内容だと、リクエストに対してサーバーサイドでPHPを処理し、その結果をブラウザにレスポンスし、そこで初めてJavaScriptが実行されます。
このままではPHPに値を渡すことはできません。

JavaScriptで取得した値をPHPで使いたいなら、同期または非同期でもう一度サーバーにリクエストを送る必要があります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/01 23:20

    """
    <?php
    $s_width = '<script type="text/javascript">document.write(latitude);</script>';
    if(isset($_POST['search']) && $_POST['search']!==""){
    header("Location:123.php?search=".$_POST['search']."?".$s_width);
    }else{
    $flag=1;
    }
    ?>

    <html>
    <head>
    <script type="text/javascript">
    navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
    function successCallback(position) { /* 成功時の処理 */
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    }
    </script>
    <mata charset="UTF-8"/>


    <title>入力画面</title>

    </head>
    <CENTER>
    <div class="top">
    <font size = 10><h1>入力画面</h1></font>
    </div>

    <div>
    <form method="POST" action="index.php">
    <input type="text" id="search" name="search">
    <input type="submit" value="検索">
    </form>
    </div>

    <div class="bottom">
    </div>
    </CENTER>
    </body>
    </html>
    """
    以上のソースコードで検索フォームを作ったのですが、検索(search) はPOSTとして受け取ったのですが、経度、緯度をPOSTとして検索POSTと一緒に送ることができません。
    aaa.phpは
    ”””
    <?php
    require 'XXX';

    $consumer_key = 'XXX';
    $consumer_secret = 'XXX';
    $access_token = 'XXX';
    $access_token_secret = 'XXX';

    $connection = new TwistOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);

    // キーワードによるツイート検索
    0. $tweets_params = ['q' => '花火' ,'geocode' => '経度,緯度,範囲','count' => '10'];
    $tweets = $connection->get('search/tweets', $tweets_params)->statuses;

    foreach ($tweets as $value) {
    // 検索キーワードをマーキング
    $text = htmlspecialchars($value->text, ENT_QUOTES, 'UTF-8', false);

    $keywords = preg_split('/,|\sOR\s/', $tweets_params['q']); //配列化
    foreach ($keywords as $key) {
    $text = str_ireplace($key, '<span class="keywords">'.$key.'</span>', $text);
    }
    // ツイート表示のHTML生成
    disp_tweet($value, $text);
    }

    function disp_tweet($value, $text){
    $icon_url = $value->user->profile_image_url;
    $screen_name = $value->user->screen_name;

    $date = date('Y/m/d H:i', strtotime($value->created_at));

    $tweet_id = $value->id_str;
    $url = 'https://twitter.com/&#039; . $screen_name . '/status/' . $tweet_id;

    echo '<div class="tweetbox">' . PHP_EOL;
    echo '<div class="thumb">' . '<img alt="" src="' . $icon_url . '">' . '</div>' . PHP_EOL;
    echo '<div class="meta"><a target="_blank" href="' . $url. '">' . $date . '</a>' . '<br>@' . $screen_name .'</div>' . PHP_EOL;
    echo '<div class="tweet">' . $text . '</div>' . PHP_EOL;
    echo '</div>' . PHP_EOL;
    }
    ?>
    ”””

    キャンセル

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

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