- ベストアンサー
データベースにアクセスするWebページ
- 既存のWebページの変更において、データベースにアクセスして情報を表示する方法について悩んでいます。
- 既に試した方法として、別HTMLで作成したページをIFRAMEで埋め込む方法や、オリジナルのスクリプトをHTMLに埋め込む方法を試してみましたが、それぞれに問題点があります。
- 効率的な方法でデータベースの内容を反映させる方法や、データベースの内容を変更するたびにHTMLを書き換える必要がない方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
※ 最近PHPを触ってないので、文法は若干怪しいです。 #1です。 まず、index.html自体をindex.phpにリネームします。 その上でindex.phpを以下の様にします。 index.php <?php ヘッダー処理; $url = $_GET['url']; $file = file_get_contents($url); データベースオープン; $htm = ""; スクリプト解析 { switch (スクリプト) { case 'todays_title' : $htm .= get_todays_title(); break; } $htm .= スクリプトじゃない文字列; } echo $htm; return; function get_todays_title() { return データベースに接続して「今日のお題」を取得; } ?> <html> 例: 今日のお題は<?php print get_todays_title(); ?>です。 </html> 尚、この場合はDBアクセスを減らす為、「get_todays_title」といったGet関数毎にDBからデータを引っ張らず、 一度に全て取得し、適当なクラスを作ってデータを放り込んでから再利用した方が効率的です。 また、せっかくPHPを使うのであれば、以下の様な構成に書きなおすことをお勧めします。 <html> <body> <div id='hogehogeheader'><?php print $ヘッダー内容 ?></div> <div id='hogehogesidebar'><?php print $サイドバー内容 ?></div> <div id='hogehogemain'><?php print $メイン内容 ?></div> <div id='hogehogefooter'><?php print $フッター内容 ?></div> </body> </html> こうしてあれば、メイン内容とURLエイリアスを変えるだけで、同じCSS、ヘッダー、フッター、サイドバーを簡単に使い回せます。 手作業でのコピー等も発生しない上、メンテナンス上も大きなメリットとなるでしょう。 ※ 以下、一種の宗教的な話です。 個人的にはJavascript大好き人間なので、 <html> <body> <div id='hogehogeheader'></div> <div id='hogehogesidebar'></div> <div id='hogehogemain'></div> <div id='hogehogefooter'></div> </body> </html> このように枠だけ定義しておいて、jQueryを使ってDOMを弄る感じの方がお勧めです。 理由としては、PHP側でHTML形式に文字列を成形すると、サーバ負荷を上げてしまう為です。 AjaxでPHPからJSONでデータを受け取り、Javascriptのクラスにデータを放り込みます。 その上でデータを成形、出力するようにすると、使い回せる構成が非常に多い為、メンテナンス的にも非常に楽です。 DBから引っ張るデータがHTML形式では無く、要素ごとのデータの場合にはかなり使えます。 以上、ご参考までに。
その他の回答 (1)
- utun01
- ベストアンサー率40% (110/270)
普通に「index.html」を「index.php」にして、 冒頭に <?php DB接続処理 ?> <html> <body> ページの内容 <?= 埋め込み内容用変数 ?> </body> </html> で良いのではないでしょうか。 これならエンドユーザにオリジナルの内容が見える事はありません。 また、Javascriptを使って埋め込みたいのであれば、iframeを使わずにAjaxで取ってくる方法もあります。 phpで埋め込み用ページを生成し、Ajaxで埋め込むようにすれば、別途CSSを書くような手間は必要ありません。 SEO対策についてですが、GoogleのクローラはAjaxにも数年前に対応したはずです。 また、phpにも対応しておりますので、意味不明なURLにならない様にすれば基本的には問題ありません。 尚、私が前に作成したWebページでは、10パターン程度のテンプレートPHPから、内容とエイリアスを変更する様にしていましたが、 webマスターツール上では数百ページとして認識されていました。
お礼
回答ありがとうございます。 あっ、と思ったものの理解力に乏しくて、、、 もう少しお付き合いください。お願いいたします。 現在の処理方法 index.html <html> 例: 今日のお題は#todays_title;です。 </html> analyze.php <?php ヘッダー処理; $url = $_GET['url']; $file = file_get_contents($url); データベースオープン; $htm = ""; スクリプト解析 { switch (スクリプト) { case 'todays_title' : $htm .= get_todays_title(); break; } $htm .= スクリプトじゃない文字列; } echo $htm; return; function get_todays_title() { return データベースに接続して「今日のお題」を取得; } ?> ブラウザで表示 http://xxx.jp/analyze.php?url=index.html 処理すべき文字列を、GETで取得しております。 GETで指定されたファイルの頭から命令を探して、命令ならデータベースよりデータを拾って置き換える処理をしています。 この方法から、教えていただいた 普通に「index.html」を「index.php」にして、 冒頭に <?php DB接続処理 ?> <html> <body> ページの内容 <?= 埋め込み内容用変数 ?> </body> </html> に変更するには、どうしたらいいのでしょうか・・・><。 どこでわからないかというと、 今までは、処理すべき文字列をファイルとして読み込んでいましたが、 これを、たとえば <body> と書いてあるところから</body> までとか 自分で区切って読むということでしょうか? 自身のファイル(index.php) のどこから読むというのはどうやるのでしょうか・・・。 もう少しお付き合いいただければ幸いです。 よろしくお願いいたします><
お礼
ご説明いただきありがとうございます。 お礼を書いた時点では、回答者様の意図が読めていませんでしたが、 <?= が <?php echo の略だと気づいてから分かりました。 回答者様にまたお答えいただいている間に実装した方法があります。 やはり独自スクリプトを埋め込む方法でしたが、 HTMLの<head>内に<script src="解析PHP呼び出し.js"></script> と記述して、このjsの中にajaxで解析PHPに、WebページのURLを投げて 解析後のレスポンスをdocument.write(レスポンス);とすることで実装しました。 (IEのクロスドメインでまた悩んでいますが・・・) 回答者様の教えてくれたHTMLファイルの途中に<php>を書くことで デザインを確認しながら制作するときに無駄に表示されなくていい方法かもしれませんね! 私の作ったものの参考にしたものが、独自スクリプト(文字数が少ない)を使用していて これしか頭にありませんでした^^;;;; ありがとうございました^^