WEBシステム開発|PHPとPostgreSQLの開発例|●2_02_03_03-開発・詳細設計-06

PHPとPostgreSQLを利用したWEBシステムの開発例を掲載していきます。腕時計 販売サイト my-watch.biz
トップに戻ります

0-このサイトについて
  0_01-運用・製作者について
  0_02-このサイトの対象



●2_02_03_06-開発・詳細設計-06
スクリプトは以下になりました。順に説明します。

<?php
  /*
  * サンプル 新着情報
  * 作成日:2007/09/04/
  * 自分の名前
  * 変更日:
  * @package kaden_hanbai/
  * @subpackage
  * @version 1.0
  */
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>新 着 情 報(最近の10件)</title>
</head>
<body>
<font size="2"> 新 着 情 報</font> 
<font size="2">(最近の10件)</font><br>
<textarea name="textarea" cols="50" rows="8">

<?php
  // データベースに接続
  $con = pg_connect ( "host='localhost' dbname='kaden_hanbai' user='postgres'" );

  // 取得したデータをSJISに変換します。
  pg_set_client_encoding($con, 'SJIS');

  // データベース問い合わせのSQLを変数に入れて準備
  $sql = "SELECT
         date_id_c,
         title
       FROM
         new_jouhou_t
       ORDER BY date_id_c DESC limit 10";

  // SQLを実行し、結果を変数に格納
  $result = pg_query($sql);

  // 問い合わせした情報からレコード数を取得
  $row = pg_numrows($result);

  // forループによりデータベースから取得した情報を展開
  for ($j = 0 ; $j < $row ; $j++){

    $date_id_c = pg_result($result,$j,0); // 1番目の列の情報を取得します
    $title = pg_result($result,$j,1); // 2番目の列の情報を取得します

    //-----日時出力のフォーマットの準備、日時無しの年月日のみの数値の連番を取ります

    // 時間、分、秒を削除
    $date_id_c = ereg_replace('[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$', '', $date_id_c);

    // 区切りの半角スペースを削除
    $date_id_c = ereg_replace(' ', '', $date_id_c);

    // 「-」を削除
    $date_id_c_format = ereg_replace('-', '', $date_id_c);

    // 年を抽出
    $date_id_c_format_year = ereg_replace('[0-9][0-9][0-9][0-9]$', '', $date_id_c_format);

    // 日を抽出
    $date_id_c_format_day = ereg_replace('^[0-9][0-9][0-9][0-9][0-9][0-9]', '', $date_id_c_format);

    // 月を抽出
    $date_id_c_format_mouth = ereg_replace('^[0-9][0-9][0-9][0-9]', '', $date_id_c_format);
    $date_id_c_format_mouth = ereg_replace('[0-9][0-9]$', '', $date_id_c_format_mouth);


    print $date_id_c_format_year . '年' . $date_id_c_format_mouth . '月' . $date_id_c_format_day . '日' ;

    // 年月日とタイトルの間に全角スペースを入れます。
    print " ";

    print "$title\n";
  }
?></textarea>
</body>
</html>


 上のコードを全て貼り付けて、ただし全角がスペースで使っていますのでタブに変更して下さい。
そして実行して下さい。

 この画面が出れば成功です。



  // データベースに接続
  $con = pg_connect ( "host='localhost' dbname='kaden_hanbai' user='postgres'" );
 この行でデータベースに接続しています。文法としての内容は、
 
 「pg_connect関数でホストはローカルホスト、データベースはkaden_hanbaiでユーザーはpostgresで接続して内容を変数$conに代入します。」と、なります。

 変 数

 まず変数とは、
 数値や文字列、その他のデータを格納できるものです。初めに「$」が頭に来ます、名称は自由に付けられます。

 $name = 1;

 上の式は「変数 $name に1を代入する」の意味です。右から左へ1が動いて$nameに入る、というイメージを持って下さい。
 数式の「$nameは1に等しい」という意味ではありません。その場合は、

 $name == 1;

 と、なります。

 行の終わり

 一番後ろに「;」セミコロンが付いていますが、行の終わりを表しています。日本語の「。」みたいなものですね。必ず明示して下さい。あらゆる行の後ろに付いているはずです。

 関 数

 日本語でいけば「動詞」のようなものです。関数そのものを説明すると分かり難いので「ドアを開ける」という動詞で説明します。

 ドアを開けるにはカギが必要です。これをある約束で書きます。

 ドアを開ける(カギ) とします。もし2つ施錠されていたら。ドアを開ける(カギ1、カギ2) みたいな感じですね。
 これとほぼ同じです。この基本形は関数全て同じです。
 動詞はすごくたくさんありますよね。関数もたくさんあります。

  pg_connect ( "host='localhost' dbname='kaden_hanbai' user='postgres'" );

 これは、

 pg_connect ( "host='ホスト名' dbname='データベース名' user='ユーザー名'" );
 です。

 ダブルクォーテーション

 "host='ホスト名' dbname='データベース名' user='ユーザー名'"

 上記のコードは"」で囲まれています。
 "」これをダブルクォーテーション、またはダブルクォートと呼びます。

 先の変数での代入で、

 $name = 1;
 
 は1をダブルクォーテーションで囲む必要はありません。
 それはPHPが数値1を知っているからです。前もって知らないと計算もできませんよね。
 では普通の名称などでは、どうでしょう。

 $name = 田中;

 これはエラーになります。
 PHPは前もって「田中」という意味を定義していません。ですから。

 $name = "田中";

 と、なります。ダブルクォーテーションで囲むことを「クォートする」という俗語で言ったりします。
 
 シングルクォーテーション

 「'」をシングルクォーテーション、シングルクォートなどと呼びます。
 先の、

 $name = "田中";

 は、

 $name = '田中';

 でもOKです。

 クォートに関しては後でもう少し詳しく述べます。

 漢字コード

  // 取得したデータをSJISに変換します。
  pg_set_client_encoding($con, 'SJIS');

 pg_set_client_encodingは関数です。関数の説明したものと同じ形式であることを確認して下さい。

 意味は「データベースから取得された変数$conを全てSJISに変換する。」となります。

 PostgreSQLのデフォルトの漢字コードは「euc-jp」です。
 「漢字コード」という名称を初めて聞いた方もいるかもしれないので説明しますと。
 コンピュータで漢字には各々コードが割り振られています。
 WindowsはSJISですが、UNIX系はeuc-jpです。
 国が違えば、言葉も違う、という風に捕らえて下さい。

 漢字コードの違いを実感するために、「//」を追加してこの行をコメント化(無効)して下さい。
 そして出力した画面を再読み込みして下さい。
  // 取得したデータをSJISに変換します。
  // pg_set_client_encoding($con, 'SJIS');

 下記のように全角部分が化けたはずです。
 データが「euc-jp」でそのまま出力されたためです。
 確認したらコードを元に戻して下さい。


 全て「euc-jp」に合わせればブラウザの画面に出すときに変換してくれますからただ見るだけなら問題はありません。わざわざSJISに戻しているのHTMLのコードを読みやすくするためです。

 合点がいかない方は、http://www.yahoo.co.jp/ のHTMLのソースを見てください。
 ブラウザのメニューの「表示」、「ソース」で見れます。

 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">

 で宣言されていて、全角文字部分は全部化けているはずてず。

 開発中にHTMLの出力を見る時に見通しが良いように、また文字化けを不具合と受け取られないためです。

 問い合わせのSQL

 次に検索のSQL文です、ダブルクォートに囲まれたSQLを変数$sqlに代入しています。
  // データベース問い合わせのSQLを変数に入れて準備
  $sql = "SELECT
         date_id_c,
         title
       FROM
         new_jouhou_t
       ORDER BY date_id_c DESC limit 10";

 初めにcse を起動して下さい。

上記の問い合わせ、検索のSQLの基本構文は下記となります。
  SELECT カラム名1 , カラム名2 , ・・・・ FROM テーブル名

意味は「テーブル名からカラム名1 , カラム名2 , ・・・・を全て検索せよ」となります。気が付いた方もいるかもしれませんが、「全て」に当てはまる記載はありません。無い場合は、つまり「全て」と成る訳です。

 試しに「ORDER BY date_id_c DESC limit 10」の部分を削除してブラウザを実行してみて下さい。

 結果を確認すれば、前のと違うのは、
 ・10件でなく20件全てが検索されていた。
 ・新しいものから順でなく、古いものから検索されていた。

 と、なっていたはずです。

 次は「limit 10」だけ削除してください。今度は、
 ・10件でなく20件全てが検索されていた。
 ・前とは違い、ちゃんと新しいものから表示されていた。

 と、なるはずです。

 まとめると、
  // データベース問い合わせのSQLを変数に入れて準備
  $sql = "SELECT
         date_id_c,
         title
       FROM
         new_jouhou_t
       ORDER BY date_id_c DESC limit 10";

 「ORDER BY date_id_c DESC」 は「新しいものから順に」という意味です。
 「DESC」を削除すると、「古いものから順に」という事になります。削除して試して下さい。

 cse の下記のメニューを選択して下さい。
 SQLのリファレンスが見れます。
 

 下記の選択部分をダブルクリックで開きます。


 示されたメニユーから「SELECT」を探して下さい。
 見つけたらダブルクリックで開きます。


 これがSELECT(検索)に関するSQLのリファレンスです。

 
 おそらく、演習をほとんどしていないでこれを見ても意味が掴み難いと思います。
 ただある程度のSQLが組めるようになっても全てのSQL文は大量にあって全て記憶するのは無理ですからリファレンスで調べることは良くあります。

 今、演習した内容が上記にも記載されています、確認しておいて下さい。

 

戻る

−− 弊社メイン・サイト −−
ホームページ製作、システム開発はMSweb - 大阪
ホームページ製作・作成、システム開発、サーバー構築・保守にはMSwebをご利用下さい

携帯サイト


−− 弊社姉妹サイト −−
ホームページ製作 発注企業に理解して欲しい内容
ホームページ発注企業、製作会社向けの内容です。

−− 弊社姉妹サイト −−
レンタルサーバー、サーバー構築の情報サイト
サーバー構築、レンタルサーバーなどサーバー関連を調べたい方向けの情報サイトです。

−− 弊社姉妹サイト −−
ホームページ製作 大阪 | 製作手順の紹介−MSweb
ホームページ製作の手順をご紹介しています、デザイン、HTML、スタイルシートなどについて記載しています。

オープンソース・サンプル
MSweb OpenPNE 大阪
オープンソースのSNSです。ご興味があり使用されたい方は、 ID「msweb@msweb.biz」、パスワード「gua8hkj3」で管理ページにログインできます。
管理ページ

オープンソース・サンプル
MSweb ブログ
オープンソースのブログです。ご興味があり使用されたい方は、 ID「admin」、パスワード「bd0e86」で管理ページにログインできます。
管理ページ

オープンソース・サンプル
XOOPS
代表的なCMSのXOOPSです。ご興味があり使用されたい方は、 ユーザ名「msweb」、パスワード「as4g3mz」で管理者でログインできます。

オープンソース・サンプル
EC|CUBE(メイン・ページ)
EC|CUBE(管理ページ)
オープンソースの通販システムです。ご興味があり使用されたい方は、 ID「msweb」、パスワード「fd4upd2」で管理ページにログインできます。

オープンソース・サンプル
Joomla(メイン・ページ)
Joomla(管理ページ)
オープンソースのCMSです。ご興味があり使用されたい方は、 ID「admin」、パスワード「A2gT6B7F」で管理ページにログインできます。

オープンソース・サンプル
SquirrelMail
オープンソースのWEBメールのシステムです、OP25Bの影響を受けません。

オープンソース・サンプル
Mailman
Mailman(管理ページ)
オープンソースの電子メールでの討論やメルマガの配送リストを管理するためのシステムです。 サンプルのため投稿はできません。

Copyright (c) 2007 MSweb All Rights Reserved

腕時計 クロノグラフ(時計)のメンズ専門販売サイトカシオ G-SHOCK、Baby-G(腕時計)専門の通信販売サイトG-SHOCK、Baby-G専門通販サイト 運営ブログ

腕時計 女性専用 販売のladies-watch.biz腕時計 メンズ(男性)専門販売のmens-watch.biz