トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

書籍/実例で身につける!MySQL×PHPによる本格Web−DBシステム入門

Last-modified: 2006-11-06 (月) 22:46:29 (3972d)
Top / 書籍 / 実例で身につける!MySQL×PHPによる本格Web−DBシステム入門

2006-09-20〜

書籍のWebページ
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1730-7

chap3

sample1

form入力ページ→確認ページ→登録完了ページ の基本
入力値のチェックは無し

  1. index.html ... form入力ページ
  2. confirm.php ... 確認ページ
    1. hiddenを用いた入力値の受け渡し方法
  3. regist.php ... 登録完了ページ
    1. MySQLアクセス方法

sample2

  1. index.html ... form入力ページ
  2. confirm.php ... 確認ページ
    次の2ファイルをrequireしています。
    1. function.php ... gpc_stripslashes, gpc_addslashes, sechoの定義
    2. check_values.php ... 各post値をチェックし、エラーの連想配列($error['fname']等)を作成する処理
      Shift JISでPHPコードを書く場合、 「mb_regex_encoding("Shift_JIS"); 」と書いておかないと、「mb_ereg("^[ァ-ヶー]+$", $fname)」といった文で、 「mbregex compile err: empty char-class」といった警告が出る場合が有ります。 (「ー」のShift JISコードは、0x815Bで、「5B」が「[」のため警告が出ます)
  3. regist.php ... 登録完了ページ
    1. 再チェックのため、上の2ファイルをrequireしています。
    2. テキストファイルをテンプレートとしたメール送信サンプルです。
      1. mail.txt ... regist.phpから使用される、登録完了メールテンプレートです。
  4. downlist.php ... ダウンロード画面
    1. MySQLで総件数を調べて、表示しています。
      $iCount = mysql_query("SELECT COUNT(*) AS NUM FROM テーブル名");
    2. <a href="download.php?...">1-100</a>といった、どの範囲をダウンロードするかを表すリンクの記述方法が分かります。
    3. download.php ... tab分割データのダウンロードプログラム
      1. ブラウザでtabデータのダウンロードダイアログを出す方法が分かります。
        $strFileName = ($_GET['iStartIndex'] + 1) . "-" . ($_GET['iStartIndex'] + $_GET['iDownloadCount']) . ".tab";
        header("Content-Type: text/tab-separated-values");
        header("Content-Disposition: attachment; filename=$strFileName");
        while($row = mysql_fetch_array($rs)) {
            $strRow = $row['iID'] . "\t" . $row['strName']. "\r\n";
            echo mb_convert_encoding($strRow, "SJIS");
        }
      2. MySQLで指定範囲のデータを取得する方法が分かります。
        $dbResult = mysql_query("SELECT * FROM テーブル名 LIMIT " . $_GET['iStartIndex'] . ", " . $_GET['iDownloadCount']);

sample3

  1. index.html ... form入力ページ
    sample2とまったく同じです。
  2. index.php ... form入力ページPHP版
    POST値を受け取り、form前回入力値を復帰します。
    index.htmlと次の3点が違います。
    1. <?php
      session_start();
      require("function.php");
      require("check_values.php");
      $_SESSION['register'] = 0;
      ?>
    2. <form method="post" action="confirm.php?<?=SID?>">
    3. <input type="text" name="name" value="<?php secho($name) ?>" /><br />
  3. confirm.php ... 確認ページ
    次のようにセッションを用いたセキュリティコードが追加されています。
    1. session_start();
    2. $_SESSION['register']が未定義または0以外の場合、error.htmlを表示します。
    3. 「戻る」を押したときに、「action="index.php?<?=SID?>"」を呼び出し、入力値を保持した入力画面を復帰させています。
  4. regist.php ... 登録完了ページ
    次のようにセッションを用いたセキュリティコードが追加されています。
    1. session_start();
    2. $_SESSION['register']が未定義または0以外の場合、error.htmlを表示します。
    3. MySQLでテーブルをロックしています。
      mysql_query("lock tables members write");
    4. 同じ電子メールアドレスが登録済みの場合、警告を表示して、登録を抜けます。
    5. MySQLに登録成功後、セッションの値を2にしています。

chap4

chap4.sql.txt

sample1

  1. regist.php ... 入力
  2. regist_confirm.php ... 確認
  3. regist_done.php ... 登録完了
  4. check_values.php ... 入力チェック
  5. define.php ... 定義ファイル
  6. error.html ... エラー表示
  7. list_simple.php
    1. MySQLで新しい順に取り出すSRLが分かります。
    2. phpプログラムの中で、htmlの中に「<?php ?>」をちりばめて、ループを構成し、テーブル行を書く方法が分かります。
  8. list.php
    1. セキュリティ用にセッション変数を初期化するコードが入っています。
      session_start();
      $_SESSION['register'] = 0;
      $_SESSION['modify'] = 0;
      $_SESSION['delete'] = 0;
    2. ページインデックスをgetで受け取り、「次の??件」「前の??件」のリンクで自身を呼び出し、画面を更新する方法が分かります。
    3. 次の各機能のphpプログラムを呼び出すリンクが有ります。
      リンク項目飛び先php機能
      新規登録index.phpトップページに戻る
      編集modify.php選んだ行の編集
      削除delete_confirm.php選んだ行の削除
  9. list_sort.php
  10. delete_confirm.php
  11. delete_done.php
  12. function.php
  13. modify.php
  14. modify_confirm.php
  15. modify_done.php

sample2

http://papuu.jp/develop/bk/0001/chap4/sample2/index.html

  1. check_values.php
  2. define.php
  3. delete_confirm.php
  4. delete_done.php
  5. error.html
  6. function.php
  7. list.php
  8. modify.php
  9. modify_confirm.php
  10. modify_done.php
  11. news.html
  12. news.php
  13. news2.php
  14. news_create.php
  15. news_template.html
  16. regist.php
  17. regist_confirm.php
  18. regist_done.php
  19. search.html

chap5

sample1

海外旅行先投票システム (%数値で結果表示)

  1. index.php ... ラジオボタンで選択し、result.phpを呼び出します。
    1. セッションによる2重投票防止機能が有ります。
  2. result.php ... 登録・結果画面表示
    1. MySQLで投票を登録します。(見るだけの場合は、登録しません)
    2. MySQLで投票結果取得します。
    3. セッションによる2重投票防止機能が有ります。

sample2

海外旅行先投票システム (dot.pngをimgタグのwidth, height属性で引き延ばして、結果表示)

  1. index.php sample1とまったく同じ
  2. result.php
  3. dot.png

sample3

海外旅行先投票システム (7色のpng画像引き延ばしで、積み上げグラフで結果表示

  1. index.php sample1とまったく同じ
  2. result.php
  3. 1.png7.png

sample4

海外旅行先投票システム (円グラフで結果表示)

  1. index.php sample1とまったく同じ
  2. result.php
  3. 1.png7.png
  4. rs.png

sample5

海外旅行先投票システム (円グラフで結果表示)

  1. index.php
    コメント入力欄追加
  2. result.php
  3. 1.png7.png
  4. rs.png
  5. error.html
  6. delete_confirm.php
  7. delete_done.php
  8. list.php

sample6

海外旅行先投票システム (円グラフで結果表示)

  1. index.php
    sample5とまったく同じ
  2. result.php
  3. 1.png7.png
  4. rs.png
  5. error.html
  6. delete_confirm.php
  7. delete_done.php
  8. list.php

chap6

sample1

sample2

sample3

sample4

chap7

sample1

勉強したこと

  1. <input ... /><br />のように、閉じないタグの最後は、必ずスラッシュを入れる。
  2. PHPでは文字列の切れ目が分かりにくいので、文字列を連結するドットの前後は、スペースを入れたほうが見やすそう。
  3. SERVER_NAMEとHTTP_HOSTの比較
    $_SERVER["SERVER_NAME"];localhost値を取得しなんらかの形で利用する場合に使用します。リクエスト時の host:〜 を使うものの、指定が無い場合は httpd.conf等に記述したServerNameディレクティブがデフォルトで使われます。htmlentitiesによってエスケープされるようです。
    $_SERVER["HTTP_HOST"];localhost:50000リクエストヘッダーの値をそのまま取りたい場合に使用します。リクエスト時に host:〜 で指定した値が返されます。
  4. php.iniの日本語コード設定 日本語の設定が合っていないと、「Parse error:」といったエラーが出る場合があります。今回すべてShift JISに統一しますので、次のように設定してください。 C:\Program Files\xampp\apache\bin\php.ini
    Directivedefaultchanged
    mbstring.detect_orderno value
    mbstring.encoding_translationOff
    mbstring.func_overload0
    mbstring.http_inputpass
    mbstring.http_outputpass
    mbstring.internal_encodingno value
    mbstring.languageneutral
    mbstring.strict_detectionOff
    mbstring.substitute_characterno value
    output_handler = mb_output_handler
    default_charset = "Shift_JIS"
    magic_quotes_gpc = Off
  5. idの項目を「auto_increment」にしないと、insertでMySQLに追加しても、追加できない場合があります。
    phpMyAdminで「auto_increment」に設定する方法は、「その他」で選択しますので、注意してください。
  6. 後からphpMyAdminでidをauto_incrementに変えようとして、次のエラーとなりました。 「Duplicate entry '1' for key 1 」 iIdをいったん削除してから追加したら、大丈夫でした。