データベースを利用したWebPageを作成

Apache + PHP + MySQLを使ってWebPageを作成

Perlを利用したデータベースアクセスについては FreeBSD 2.2.7R MySQL Perl DBI/DBD install にあります。
  1. データベース仕様

    目的  
    アドレス帳を作成する
    機能
    データベースには「氏名」「電子メールアドレス」「所属」「メモ」を格納
    データベース閲覧
    データ登録
    メール発信(Aタグで構成する)

  2. データベース設計

    テーブル名:test_db
    カラム タイプ 内容
    id INTEGER キー
    name VARCHAR(100) 氏名(最大100バイト)
    mail VARCHAR(100) 電子メールアドレス(最大100バイト)
    office VARCHAR(100) 所属(最大100バイト)
    memo VARCHAR(100) メモ(最大100バイト)

  3. データベース作成

    MySQLを用いてデータベースを作成します。
    まず、test_dbを作成する為に、先ほど設計したデータベースのテーブル構成を*.sqlファイルに記述します。

    test_db_tbl.sql
    
    CREATE TABLE test_db (
      id       INTEGER   NOT NULL AUTO_INCREMENT,
      name     VARCHAR(100),
      mail     VARCHAR(100),
      office   VARCHAR(100),
      memo     VARCHAR(100),
      primary key (id)
    );
      
    mysqlコマンドを用いてデータベースを作成します。
    # mysqladmin -h srv create test_db
      
    mysqlコマンドを用いて作成したデータベースに設計したデータベースのテーブル作成します。
    # mysql test_db < test_db_tbl.sql
      
    mysqlコマンドを用いて作成したデータベースを確認します。
    # mysql test_db
    mysql test_db
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 22 to server version: 3.22.15-gamma
    
    Type 'help' for help.
    
    mysql> show tables;
    +-------------------+
    | Tables in test_db |
    +-------------------+
    | test_db           |
    +-------------------+
    1 row in set (0.02 sec)
    
    mysql> show fields from test_db;
    +--------+--------------+------+-----+---------+----------------+
    | Field  | Type         | Null | Key | Default | Extra          |
    +--------+--------------+------+-----+---------+----------------+
    | id     | int(11)      |      | PRI | 0       | auto_increment |
    | name   | varchar(100) | YES  |     | NULL    |                |
    | mail   | varchar(100) | YES  |     | NULL    |                |
    | office | varchar(100) | YES  |     | NULL    |                |
    | memo   | varchar(100) | YES  |     | NULL    |                |
    +--------+--------------+------+-----+---------+----------------+
    5 rows in set (0.02 sec)
    
    mysql> exit
    Bye
    #
    
    # cd /usr/local/var
    # ls -F
    mysql/                  srv.sugahome.net.err    test_db/
    mysqld.pid              test/
    # ls -F test_db
    test_db.ISD     test_db.ISM     test_db.frm
    #
      

  4. データベースのアクセス件を設定

    ここでは全て許可にしています。

    # mysql mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 25 to server version: 3.22.15-gamma
    
    Type 'help' for help.
    
    mysql> show tables;
    +-----------------+
    | Tables in mysql |
    +-----------------+
    | columns_priv    |
    | db              |
    | func            |
    | host            |
    | tables_priv     |
    | user            |
    +-----------------+
    6 rows in set (0.02 sec)
    
    mysql> insert into db
        -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
        -> Create_priv,Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv)
        -> values
        -> ('%','test_db','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    Query OK, 1 row affected (0.17 sec)
    
    mysql> exit
    Bye
    # mysqladmin reload
      

  5. ブラウザからtest_dbを操作する為のWebPageを作成する為の基礎

    PHPMySQLを操作する為の基本操作
    HTML、PHP、SQLに関しては既に理解しているものとして詳細説明は省略します。

    1. データベースに接続

      MySQLデータベースに接続します。
      パラメータはMySQLデータベースが操作しているホスト名またはIPアドレス。
      戻り値は接続識別子が返る。

      $dbsel:接続識別子
      $hostname:ホスト名またはIPアドレス
      $password:パスワード

      $dbsel = mysql_connect( $hostname )
      or
      $dbsel = mysql_connect( $hostname, [ $username,[ $password ]])

    2. データベースへデータを操作

      • データベースにSQL文を発行するには mysql_db_query を使用します。

        $dbsel:接続識別子
        $database:MySQLのデータベース名
        $sql_str:発行するSQL文

        $result = mysql_db_query( $database, $sql_str, $dbsel )

      • データベースにデータを追加するSQL文はINSERTです。
        insert into テーブル名 (フィールド名) value (値)

        insert into テーブル名 (Field1,Field2,Field3,..) value (値1,値2,値3,...)

      • データベースからデータを抽出するSQL文はSELECTです。
        select 抽出するフィールド名 from テーブル名

        select Field1,Field2,Field3,.. from テーブル名

      • データベースからデータを削除するSQL文はDELETEです。
        delete 削除するテーブル名

        特定のデータだけを削除するに場合は以下のようにwhere句を使用します。
        delete 削除するテーブル名 where句

      • データベースのデータを更新するSQL文はUPDATEです。
        update テーブル名 set フィールド名 = 値

        特定のフィールドだけを更新するに場合は以下のようにwhere句を使用します。
        update テーブル名 set フィールド名 = 値 where句

    3. データベース接続を閉じる

      *.phtml終了時に自動的に閉じられるので通常は不要。

      $dbsel:接続識別子

      mysql_close( $dbsel )

  6. スクリプト例

    HTML + PHP で test_db.phtml として作成します。
    一つのWebPageで「閲覧」「登録」の全機能を構成する事にします。

    以下サンプルスクリプトは、文字コードをEUCに変換してご利用ください。

    ここから>>

    <HTML>            
    <HEAD>
      <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-ujis">
      <TITLE>TEST_DB</TITLE>
    </HEAD>
    <BODY>
    TEST_DB
    <HR>
    
    <?
    /* ホスト名 */
    $hostname = "srv.sugahome.net";
    
    /* ホストと接続 */
    $dbsel = mysql_connect( $hostname);
    
    /* FORMデータの確認 */
    /* 名前、メールアドレス、種族の省略は認めない */
    if( $name == "" || $mail == "" || $office == "" )
    {
      /* 未入力有り or ブラウザ初期接続 */
      echo "未入力有り or ブラウザ初期接続です。";
    }
    else
    {
      /* データ有り --> MySQLへデータ登録 */
      echo "データを登録しました。";
      if( $memo == "" ){ $memo = "無し"; }
      $result = mysql_db_query( "test_db",
        "insert into test_db ( name, mail, office, memo ) values ( '$name','$mail','$office','$memo' )");
    }
    echo "<HR>";
    
    /* 登録総数 */
    $result = mysql_db_query( "test_db", "select id from test_db", $dbsel);
    $allnum = mysql_numrows( $result );
    echo "総数 = $allnum<P>";
    /* データベースからデータの取得しTABLEで表示 */
    $result = mysql_db_query( "test_db", "select name,mail,office,memo from test_db", $dbsel);
    echo "<TABLE BORDER>\n";
    echo "<TR><TH>氏名</TH><TH>電子メールアドレス</TH><TH>所属</TH><TH>メモ</TH></TR>\n";
    for( $i=0 ; $i<$allnum ; $i++ )
    {
      $row = mysql_fetch_array( $result );
      $namedt = $row["name"];
      $maildt = $row["mail"];
      $officedt = $row["office"];
      $memodt = $row["memo"];
      echo "<TR><TD>$namedt</TD><TD><A HREF=\"mailto:$maildt\">$maildt</A></TD><TD>$officedt</TD><TD>$memodt</TD></TR>";
    }
    echo "</TABLE>\n";
    
    ?>
    
    <HR>
    
    <FORM METHOD="POST" ACTION="test_db.phtml">
    <DL>
    <DT>名前<DD><INPUT TYPE="TEXT" NAME="name" SIZE=50>
    <DT>電子メールアドレス<DD><INPUT TYPE="TEXT" NAME="mail" SIZE=50>
    <DT>所属<DD><INPUT TYPE="TEXT" NAME="office" SIZE=50>
    <DT>メモ<DD><TEXTAREA NAME="memo" ROWS=3 COLS=50></TEXTAREA>
    <P>
    <INPUT TYPE="submit" value="MySQL登録">
    </DL>
    </FORM>
    
    <HR>
    
    </BODY>
    </HTML>
    
    <<ここまで

    ブラウザでのスクリプト実行イメージ


リンクはご自由に!

スパムが多いので頭に"_"追加してます。
_sugasawa@ceres.dti.ne.jp
Copyright (C) SUGASAWA. All rights reserved.