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

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

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



●2_02_03_06-開発・詳細設計-07

 pg_query($sql) はSQLを実行する関数です。  結果を変数$resultに代入しています。
  // SQLを実行し、結果を変数に格納
  $result = pg_query($sql);

  pg_numrows($result)はSQLから得られた結果を格納した変数$resultからレコードの行数を取り出しています。pg_numrows($result)も関数です。
  // 問い合わせした情報からレコード数を取得
  $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";
  }

  for ($j = 0 ; $j < $row ; $j++){
    (コードの記載)
  }

 上記はfor構文を使った繰り返し処理です。(コードの記載)を繰り返します。
 まず($j = 0 ; $j < $row ; $j++)だけを取り出して説明します。

 1.まず変数$jに0を代入します。この処理は初期の1回のみです。
  初期カウンタに0をセットする、という言い方をよくします。
 2. $j < $rowは条件を与えています、 $row $jよりも小さければ・・・です。
 3.<は右側よりも左側が小さければ、という意味です。こういった記号を演算子と呼びます。
 4. $j++は1ずつ加算していくという意味です。

 $rowはレコードの行数ですが、もう10という数字が入っている事は分かっています。
 では
$rowではなく10にすれば、・・・という事はできません。
 SQLでlimit 10 にしています、もしlimit 20にしても変数にすれば触る必要が無いからです。

 この繰り返し処理(ループ処理)を文章で表現すると、$j(0)の括弧の数字は格納されている数とします。

 ・
$j0である、$j(0)は10よりも小さい、括弧に囲まれたコードを実行する
 ・ $j++$jに1が加算される。$j(1)は10よりも小さい、括弧に囲まれたコードを実行する
 ・ $j++$jに1が加算される。$j(2)は10よりも小さい、括弧に囲まれたコードを実行する
    ・
    ・
    ・
 ・ $j++$jに1が加算される。$j(9)は10よりも小さい、括弧に囲まれたコードを実行する
 ・ $j++$jに1が加算される。$j(10)であれば10よりも小さいという条件は無くなる為処理は終わる。

 という流れです、ループ処理は良く使われるので完全に理解しましょう。

 それと、もう一つ、数を初めから数える場合は0から始めます。
 10よりも小さいとなると、9個しか取れないのでは・・・と普通なりますが、0が入ってるので10個になるのです。

 ではループされている処理を見ましょう。

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

 pg_result($result,$j,0)も関数です、とにかく関数が多いでしょう。
 この関数の引数は、以下の3種類です。関数の括弧に入っている要素を引数といいます。
 インスウではなくヒキスウと読みます。

 pg_result( SQLから得られた結果 , レコードの行数 , レコード列数 )

 $date_id_c = pg_result($result,$j,0);
 一番初めは0から数えるので一番右の引数は0です。
 $jは、0、1、2、・・・・9とループ中で入っていきます。

 $date_id_cという変数に格納しているのはデータが何であるかを特定しやすいようにです。

 $title = pg_result($result,$j,1)も上の処理と基本的な流れは一緒です。

 まずループの処理の中でこの2行が10回(0から9回)繰り返しているイメージを掴んで下さい。
 この程度の処理は非常に単純です。入れ子のループもよくありますから。


下記は全て正規表現の置換えという処理です。

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

    // 時間、分、秒を削除
    $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);

 ereg_replace('[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$', '', $date_id_c)
 上記は、
 ereg_replace( ' 対象となる文字列部分 ' , ' 置き換えたい文字列 ', 対象となる変数など )

 「対象となる文字列部分」は特殊なコードが入ります。
 [0-9]は0から9の数字が対象となります。6つ並んでいますね。
 $は変数の記号ではありません、後方にマッチしたものです。

 意味は、
  $date_id_c(年月日 時分秒)の後ろ数字6文字を「''」(空)にせよ、という意味です。
 後ろの「時分秒」は表示しない約束が初めにありましたよね。

 $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_yearを新規に作成して代入します。

 // 日を抽出
 $date_id_c_format_day = ereg_replace('^[0-9][0-9][0-9][0-9][0-9][0-9]', '', $date_id_c_format);
 ^[0-9][0-9][0-9][0-9][0-9][0-9]の前に「^」が付いていますが、これは「前方にマッチ」という意味です。
 「年月日」で頭から数字6文字取れば日の2文字が残ります。

 // 月を抽出
 $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);
 もう簡単ですよね、「年月日」の頭4文字、後ろ2文字取れば月が残ります。
 変数の動きに留意して見てください。

 その他、必要に応じて、文字列を色々処理することがあります。
 それらを文字列操作とか呼びます。

 今までは内部処理(実際に画面に出す処理では無く、準備の為のもの)ばかりでしたが準備が全部済んだので今度は画面に出します。

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

 print は出力する、という意味です。
 $date_id_c_format_yearには「年」の情報が入っていますがprintを実行すると格納されているデータが自動的に展開されます。変数展開とか言います。

 次に'年'は定義されていない文字列ですから、シングルクォートでくくります。

 変数と定義されていない文字列('文字列')の間に「.」が入っていますね。
 これは結合処理です。結合しないでバラバラで出力を書くと。

 print $date_id_c_format_yea r;
 print '年' ;
 print $date_id_c_format_mouth ;
 print '月' ;
 print $date_id_c_format_day ;
 print '日' ;

 こんな感じになります、6段ですが、出力された結果は1行になります。
 「\n」を追加しない限り開業はされません。HTMLタグの「<br>」とは意味が違います。

 敢えて、結合処理で1行で書いたほうがイメージしやすいのでこうしています。

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

 print "$title\n";
 最後の「\n」は改行です、
 <textarea name="textarea" cols="50" rows="8">と</textarea>での改行ですから「<br>」ではなく、「\n」です。

 
 どうでしょうか、だいたい意味は分かったでしょうか。
 分からなくても、「ふーん、こんな感じか・・・」でもいいと思います。

 説明は長かったですが、仕事としてやれば20分から30分程度でしょう。
 もちろん、作業時間であって、打ち合わせなどは入らずで。

 もし、まったくプログラムの経験が無い人で開発環境も構築できなければ時間がいくらあっても無理です。

 このサンプルのコードを色々いじって「こうしたら、どうなるだろう」、「ここをこう書いたら、・・・になるのでは」と試して見て下さい。



戻る

−− 弊社メイン・サイト −−
ホームページ製作、システム開発は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