すべてのカテゴリ » インターネット・パソコン » インターネットサービス

質問

終了

vinelinux,postgresql,php,apache2を使って、データベース付きwebを作りたいと思っていますが、それぞれの関係がいまひとつよく分かりません。どのようなHPを
見たらよいのか。お分かりの人がいらっしゃいましたら教えてください。web上の知識をお知らせください。

  • 質問者:たき
  • 質問日時:2008-12-26 10:48:23
  • 0

《参考にするのによさそうなところ》
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3sql.htm
「PostgreSQL 編、JAVA Servlet、JSP 編」を参考にされるとよいかも.
古いけど参考になると思います.

何が分からないのか,イマイチ理解できませんが….(;´ω`)
とりあえず,PostgreSQL まではインストールできていると仮定します.
apacheとPHPを使われるということですので,apacheからPHPが使えるように環境構築できているんでしょうね.
で,まぁ,PHPを使う場合,Zend Engine 2.x.x が使えないと実行速度が極端に落ちます.


まず,プログラムの作り手は,「データベースを psql で SQL を使って思った通りに操作できること」が前提だと思います.
実際にはいちいち「SQLを叩くのは面倒」とか「SQLを知らないヒトにも使えるようにしたい」ので,その部分をプログラミングしていくことになります.

SQLはJIS規格にもなっていますが,おおざっぱな話,規格内の部分はDBMSがMySQLになろぉが,OracleになろぉがSQL Serverになろぉが大差ありませんが,それ以外の部分では違いがあるので「どれか1個を覚えれば他も完璧」とまではいきません(が,1個知っていれば他も割と簡単に覚えられますけどね).
※DBMS(DataBase Management System)の組み込み関数に互換性はほとんどありません.


PHPはwebサーバ上で動作する(サーバサイド)スクリプト言語です.とはいえ,ブラウザ経由でしか動かないといったことは無く,シェルからでも使えますけどね.(;´ω`)
多くの場合,HTMLファイルの中にタグ「<?php … ?>」を埋め込み,その内部にPHPの文法に従って記述していくことになります(当然,<body>の後,</body>の前になります).
「<?php … ?>」の記述は「<body>~</body>」の間に幾つ書いても構いません.
で,まぁ,「<?php … ?>」中にDBに接続したり,SQLを実行したり,SQLの結果を取得したり,DBを切断したりといった記述をする訳ですね.で,SQLを実行する場合は,PHPの変数に「実行したいSQL文を(文字列で)設定」し,その変数を引数にして関数を呼び出して実行…になります.

全体のイメージとしては,HTML(Hyper Text Markup Language)内部でPHPを記述し,PHPからフォーム情報を利用してSQL文を作成/実行し,SQLの実行結果をPHPで取得しつつ HTML を出力することでブラウザで表示できるプログラムができる…でわかりますかね?(;´ω`)

===補足===
《参考ページ~そにょ2》
http://www.phpbook.jp/database/postgresql/

ここの「データの取得(SELECT)」などを参考にしていただくとよいかと.
ここでは文字コードの指定をsjisにしてありますが,面倒なことを避けたければHTMLもDBも文字コードを統一しておくことをオススメします.sjisはオススメしませんけどね.(;´ω`)

「<?php」以降,「?>」までの間はフリーフォーマットで PHP のプログラムを記述できます.
接続するのに使っているのは次の2行です.これは,apacheとPostgreSQLが同じマシンで動作していることを前提にしてあるので,hostがlocalhostになっています.
----
$conn = "host=localhost dbname=uriage user=pguser password=pguser";
$link = pg_connect($conn);
----
dbnameには実際のデータベース名,userにはここではSELECTを実行するので最低でも参照権限のあるデータベースのユーザ名,passwordにはそのユーザのパスワードを設定してください.
これは1行で次のように書いても同じですね.
----
$link = pg_connect("host=localhost dbname=uriage user=pguser password=pguser");
----
で,pg_query()の引数に直接SELECT文が記述してありますが,ここだって次のように記述しても構いません(実際はフォームのデータ等を利用して文字列を作ることがほとんど).
----
$query = 'SELECT id, name FROM shouhin';
$result = pg_query($query);
----
この例ではWHERE句が抜けてますが,適宜追加して構いません.このときの抽出順は不定なのでORDER BY句も付与するのが普通です.
で,SELECT文の結果が$resultに二次元表のようなイメージで入ります.
次のforループの中で「pg_num_rows($result)」ってのがありますよね?ここで何行がSELECTされたのかが分かります.
この例では単に「id=(抽出されたid),name=(抽出された名前)」という形式で抽出された行数分の表示がなされます.注目すべきは
-----
print(',name='.$rows['name'].'<br>');
-----
…の<br>タグです.printでは文字なら何でも出力できるので,HTMLのタグだって出せちゃうんですね.
なので,forループの前にHTMLの<TABLE>なんかを出力しておくことも可能で,
-----
print("<table>\n");
print("<tr><td>ID</td><tdNAME</td></tr>\n");
for ($i = 0 ; $i < pg_num_rows($result) ; $i++){
$rows = pg_fetch_array($result, NULL, PGSQL_ASSOC);
print("<tr><td>" . $rows['id'] . "</td><td>" . $rows['name'] . "</td></tr>\n");
}
print("</table>\n");
-----
…のように書いてもよい訳です.(;´ω`)
上の例で \n を入れているのは,ブラウザだと<tr>~</tr>で改行してもらえるけど,ブラウザでソース表示させたときに改行を入れていないと見にくいので入れているにすぎません(無くても機能します).
なお,<table>や</table>をprintで出してますが,一旦,PHPを抜けて素のHTMLで記述することもできますが,そうすると非常に見にくくなるのでPHPのママで出力しています.

で,最後にDBの切断とリソースの解放を行うために pg_close() を呼び出して終了…と.
「?>」を出力したアトは素のHTMLに戻りますんで,</body>と</html>でページのオワリ(ここでは素のHTMLなので,ソースが改行されていればブラウザでソース表示させたときも改行されます)です.

こんなんで回答になってますかねぇ?
1回しかコメントできないので,不足点があればこのページのURL付で再質問していただけると回答できるかもしれません(明日から帰省するんで遅くなるかも…ですが).

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

ご回答ありがとうございました。現在、蔵書をpostgresqlで、データベース化しているのですが、蔵書を処分するために、HPに載せようと思っているところです。postgresqlの方は、何とかデータベース化が進んでいるのですが、これをphp5でいかにしてwebサーバーに載せればいいのかつまずいているところから質問をさせていただきました。vinelinux4でOSを立てているのですが、いまひとつ、apache2とphp5とpostgresqlを関連させるところが分からないものですから、質問させていただきました。私が知りたいのは、要はpostgresqlで作成したデータベースを、
どのようにしてHTML,PHPに記載すれば、HPで見れるようになるかということなのです。回答をいただいたように、いかにして、<body>~</body>の間に、pg_connectなどの関数を使って記述していけば、web上で見れるようになるかということだったのです。現在、ない頭を搾って、しんざぶろうさんからの回答にもとづいて悪戦苦闘しているところです。参考になるHPなどあったらご教示願います。いずれにしても、回答をいただきありがとうございました。

目からうろこというのはこのことを言うのだと思います。いろいろ検索しても、なかなか思うようなところ行き着かなかったのですが、今回は、質問をしてから一日で思うように、postgresqlのデータをweb上で見れるようになりました。細かいご親切に感謝しています。悩みがひとつ完全に解決しました。ありがとうございました。

並び替え:

vinelinux : OS
postgresql : DB(データベース)
php : プログラミング言語
apache2 : Webサーバー

以下、詳しく関係について記述します。

OS:
Webを作るためには公開するためのWebサーバーが必要で、そのために今利用していらっしゃるようなPCが必要です。PCにはOSがWindowsやLinuxなどいくつかの種類があって、vinelinuxというのはLinuxの種類(ディストリビューション)のうちの一つですね。

Webサーバー:
OSをインストールしただけでは、できることは限られるのでいろんなソフトをインストールします。そして、Webを公開するためには、Webサーバーというソフトをインストールする必要があり、apache,lighttpdなどが有名です。これをインストールすることによって、外部にWebページなどを見せる環境が整います。もし、提供するものがHTMLと画像だけでよければ、HTMLを自分で書いて、このWebサーバーに設定したディレクトリ(フォルダ)にファイルを置くだけでOKです!

プログラミング言語とデータベース:
WebをただHTMLを作って公開するだけでなく、動的なサイトにしたい場合、
例えば、掲示板のように、ユーザにただ見せるだけでなく、書き込みをさせたい、それを他のユーザにもみせたいと言った場合にはプログラムを書く必要があります。そして、ユーザが書き込んだ情報を、他のユーザに見せるには書き込んだ情報をどこかに保存しておく必要があります。それがデータベースです。

さらにチュートリアルっぽいサイトを探してみますが、他に知りたいことなどあれば補足してください。

===補足===
>現在蔵書のデータベースをpostgresqlで作成中なのですが、それをphp5を使って、
>HP上で使用できるようにしたいと思っているのですが、
>その手続きをどのようにしたらいいのかが分からないものですから、質問させていただき>ました
データベースを作成中ということであれば、基本的なSQLは分かるということでしょうか。
以下のURLの一番したのソースコードを参考にすればSQLで取得してきたデータをどうやって、PHPで扱っているかがわかるかと思います。

http://www5.ocn.ne.jp/~ishii-k/PHP/

データベースから取得してきた後の操作で分からない場合はPHPのドキュメントやリファレンスを読み、データーベースに対する操作(取得、更新、追加、削除)で分からない場合はPostgresqlのドキュメント(http://www.postgresql.jp/document/pg835doc/html/)などを読まれるといいと思います。

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

早速のご回答ありがとうございました。実は、現在蔵書のデータベースをpostgresqlで作成中なのですが、それをphp5を使って、HP上で使用できるようにしたいと思っているのですが、その手続きをどのようにしたらいいのかが分からないものですから、質問させていただきました。それに関して、参考になるものがあったら教えていただきたいのですが。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る