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

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

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

2006-09-20〜

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

*chap3 [#vaa628b2]

**sample1 [#h1ef6370]
form入力ページ→確認ページ→登録完了ページ の基本~
入力値のチェックは無し
+[[index.html>http://papuu.jp/develop/bk/0001/chap3/sample1/index.html]] ... form入力ページ
+confirm.php ... 確認ページ
++''hiddenを用いた入力値の受け渡し方法''
+regist.php ... 登録完了ページ
++''MySQLアクセス方法''

**sample2 [#n0ea3b22]

+[[index.html>http://papuu.jp/develop/bk/0001/chap3/sample2/index.html]] ... form入力ページ
+confirm.php ... 確認ページ~
次の2ファイルをrequireしています。
++function.php ... gpc_stripslashes, gpc_addslashes, sechoの定義
++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」が「[」のため警告が出ます)
+regist.php ... 登録完了ページ
++再チェックのため、上の2ファイルをrequireしています。
++''テキストファイルをテンプレート''とした''メール送信サンプル''です。
+++mail.txt ... regist.phpから使用される、登録完了メールテンプレートです。
+downlist.php ... ダウンロード画面
++''MySQLで総件数を調べて、表示しています。''
 $iCount = mysql_query("SELECT COUNT(*) AS NUM FROM テーブル名");
++''<a href="download.php?...">1-100</a>といった、どの範囲をダウンロードするかを表すリンクの記述方法が分かります。''
++download.php ... tab分割データのダウンロードプログラム
+++''ブラウザで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");
 }
+++''MySQLで指定範囲のデータを取得する方法が分かります。''
 $dbResult = mysql_query("SELECT * FROM テーブル名 LIMIT " . $_GET['iStartIndex'] . ", " . $_GET['iDownloadCount']);

**sample3 [#y7857610]

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


*chap4 [#a3aadf37]
chap4.sql.txt

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

**sample2 [#w44b6970]
http://papuu.jp/develop/bk/0001/chap4/sample2/index.html
+check_values.php
+define.php
+delete_confirm.php
+delete_done.php
+error.html
+function.php
+list.php
+modify.php
+modify_confirm.php
+modify_done.php
+news.html
+news.php
+news2.php
+news_create.php
+news_template.html
+regist.php
+regist_confirm.php
+regist_done.php
+search.html

*chap5 [#g2bfce67]

**sample1 [#j4127bb1]
海外旅行先投票システム (%数値で結果表示)~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample1/index.php]] ... ラジオボタンで選択し、result.phpを呼び出します。~
++セッションによる2重投票防止機能が有ります。
+result.php ... 登録・結果画面表示
++MySQLで投票を登録します。(見るだけの場合は、登録しません)
++MySQLで投票結果取得します。
++セッションによる2重投票防止機能が有ります。

**sample2 [#uece8273]
海外旅行先投票システム (dot.pngをimgタグのwidth, height属性で引き延ばして、結果表示)~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample2/index.php]]
sample1とまったく同じ
+result.php
+[[dot.png>http://papuu.jp/develop/bk/0001/chap5/sample2/dot.png]]

**sample3 [#g3eeee64]
海外旅行先投票システム (7色のpng画像引き延ばしで、積み上げグラフで結果表示~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample3/index.php]]
sample1とまったく同じ
+result.php
+[[1.png>http://papuu.jp/develop/bk/0001/chap5/sample3/1.png]]〜[[7.png>http://papuu.jp/develop/bk/0001/chap5/sample3/7.png]]

**sample4 [#yeb14265]
海外旅行先投票システム (円グラフで結果表示)~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample4/index.php]]
sample1とまったく同じ
+result.php
+[[1.png>http://papuu.jp/develop/bk/0001/chap5/sample4/1.png]]〜[[7.png>http://papuu.jp/develop/bk/0001/chap5/sample4/7.png]]
+[[rs.png>http://papuu.jp/develop/bk/0001/chap5/sample4/rs.png]]

**sample5 [#m5df3623]
海外旅行先投票システム (円グラフで結果表示)~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample5/index.php]]~
コメント入力欄追加
+result.php
+[[1.png>http://papuu.jp/develop/bk/0001/chap5/sample5/1.png]]〜[[7.png>http://papuu.jp/develop/bk/0001/chap5/sample5/7.png]]
+[[rs.png>http://papuu.jp/develop/bk/0001/chap5/sample5/rs.png]]
+error.html
+delete_confirm.php
+delete_done.php
+list.php

**sample6 [#w6372eab]
海外旅行先投票システム (円グラフで結果表示)~
+[[index.php>http://papuu.jp/develop/bk/0001/chap5/sample6/index.php]]~
sample5とまったく同じ
+result.php
+[[1.png>http://papuu.jp/develop/bk/0001/chap5/sample6/1.png]]〜[[7.png>http://papuu.jp/develop/bk/0001/chap5/sample6/7.png]]
+[[rs.png>http://papuu.jp/develop/bk/0001/chap5/sample6/rs.png]]
+error.html
+delete_confirm.php
+delete_done.php
+list.php

*chap6 [#z68cede8]

**sample1 [#p795dadf]

**sample2 [#e7e97cf9]

**sample3 [#ob608c0d]

**sample4 [#u7013e00]

*chap7 [#v8294cd8]

**sample1 [#e5a353cd]



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