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

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

ただいまの
回答率

90.52%

  • PHP

    20326questions

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

  • JavaScript

    16389questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    8958questions

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

  • MySQL

    5848questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHPでDBから値を取り出す処理をタイマー処理で練り返ししたときにうまく取り出せてない

受付中

回答 3

投稿 編集

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

URON

score 14

やりたいこと

初心者です。
PHPでDBからiframeに表示させたいURLを5秒刻みに取り出しています。
そして5秒刻みに更新している途中に、DBに格納されてる値(表示させたいページのURL)を書き換えたのですが、次の5秒ごとの値取り出しでうまくiframeに写っているWEBページが変わっていると思いきや、変わっていません・・・

おそらくまずDBから新しい値を取り出せてないのだと思います。

原因がわからないので教えてください。

該当のソースコード

 <script>

function hyoji()
{
      <?php
      try {
      //データベース
        $dbh = new PDO('****','****', '*****');
        foreach($dbh->query('SELECT * from kaigiURL') as $row) {
        $URL=$row['URL'];

      }

      $dbh = null;

      } catch (PDOException $e) {
      print "エラー!: " . $e->getMessage() . "<br/>";
      die();
      } ?>

          document.getElementById('iframe').contentWindow.location.replace("<?php echo $URL ?>");

}
function startfnc()
{

  //関数hyoji()を1000ミリ秒間隔で呼び出す
  setInterval("hyoji()",5000);
}
startfnc();
</script>


取り出した値を$URLに格納してます。
それをiframeに表示させています。

PHPとMySqlのバージョン

PHPバージョン:5.6.22
MySqlバージョン:5.0.95

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+3

PHPとJavaScriptでは実行されるタイミングが違います。 

  1. PHPがブラウザにHTMLを返す
  2. ブラウザがJavaScriptを実行する

の順なので、JavaScript からPHPを動かす場合はAjaxなどを使用することになると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+3

Javascriptは5秒ごとに実行されますが、PHPの処理はページを表示した最初の1回だけしか実行されません。
表示したページのソースコードを見てみてください。phpタグで囲まれた部分は消滅していますよね?なので、一度PHPで出力された部分はそれっきりで、同じものが5秒ごとにiframeに流し込まれるだけです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+3

この手の処理はロングポーリングやピギーバックなど特殊な
対応をしないと、サーバーに負担がかかります。
特に自分自信が自分のためだけに立てているサーバーなら
誰にも文句はいわれないでしょうけど、一般に公開されている
サーバーなどに5秒ごとに要求をおくるとしたら
「攻撃」とみなされる可能性が高いでしょう
それによって先方のサービスに遅延が発生したりした場合は
損害賠償を請求される可能性もあるのでご注意ください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/31 19:16

    いまはわかりやすいように5秒ですが、そのうちは5分に一度にする予定です。

    キャンセル

  • 2017/01/31 19:24 編集

    自分用サーバーへのアクセスを前提だとして補足します

    まず、iframeのsrcを5秒ごとに更新します
    その際キャッシュなどが影響しないよう、適当な文字を毎回getで渡します
    hoge.php?a=1&b=2&dummy=20170131192350
    的な実行日時(秒単位)でつければ5秒ごとに読むならまいかいユニークな処理になるでしょう

    その上でreadystateなどで読み込みが完了していることをチェックする
    必要があるかもしれません。
    ただし5秒ごとに読むと前の読み込みが終わっていないのにどんどん
    読み込みが続いてしまうリスクがあることは考慮してください

    キャンセル

  • 2017/01/31 21:54

    ロングポーリングやピギーバックというのを調べて見たのですが、初心者の自分にはよくわかりませんでした・・・。
    どういうものなのか教えていただけませんか?それか解説してあるサイトのURLを教えていただけると嬉しいです。

    キャンセル

  • 2017/01/31 23:17 編集

    例えばLineのような仕組み(昔はチャットといった方がわかりやすかった)
    をWEB上に作りたいとして自分が書き込んだ内容はすぐに見えますが、
    相手がいつ書き込むか(または書き込まないか)わからないですよね?

    やり方としては質問者さんが当初かいたような数秒に1度更新がないか
    確認にいけばいいですが、そもそも相手の書き込みが頻繁に行われる
    わけでもなく、読みにいってもほとんど空振りです。
    それでも何も書き込んだりしなくても読みに行くとサーバとの間で
    それなりの対話が必要になります

    それを避けるために他のサービスにあいのりしてデータ交換したり
    とりあえずずーっと待っている状態にするような技術が前述の
    キーワードです。

    キャンセル

  • 2017/02/01 19:23

    自分なりに調べてみたのですが、「Socket.io」というのを使えばできそうだなと思いました。
    ちなみにSocket.ioというのも「ロングポーリングやピギーバック」と似たようなものなのですか?

    キャンセル

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

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

関連した質問

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

  • PHP

    20326questions

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

  • JavaScript

    16389questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    8958questions

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

  • MySQL

    5848questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • トップ
  • PHPに関する質問
  • PHPでDBから値を取り出す処理をタイマー処理で練り返ししたときにうまく取り出せてない