「PHP+MySQLマスターブック」について
本書は数年前に私自身が、ゴーストライターとして企画・執筆した「速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応」のPHP5.4対応版です。内容をバージョンアップして加筆訂正しています。
前著からの変更点:
サンプルプログラムはPHP5.4で動作するようにして、サンプルの文字コードはUTF8に変更して、以前にくらべてあまり文字コードを意識しないでいいようにしました。
対応OSにMac OS Xを追加して、Windows、Mac OS X、CentOS6 にXAMPPをインストールして学習を進められるようにしました。これで学習開始までのハードルが前著に比べるとかなり下がったと思います。
MySQLとの連携にはPDOを利用して安全に接続する方法を解説しています。特に9章と10章の会員システムは、前作では急に難しくなってわかりにくいとの声がありましたので、アクセスを制限する方法とその意味を詳しく解説して、なるべくなだらかにログイン機能につながるようにしています。それぞれの機能も関数からクラスに変更し、認証に利用するクラス自体も自作します。12章は応用編としてAmazonから商品情報を取得する方法と、JavaScriptと連携して位置情報を取得する方法を解説しています。
2016/12/23
【読者質問】管理画面会員一覧のリンクから正しいページに遷移しません。
【お答え】
読者の方からご指摘をいただき確認しましたところ、いくつかプログラムに間違いがありました。
1. 登録、更新、削除のリンク内にpageIDを設定できない
検索結果2ページめからクリックしても1ページめに戻ってしまいます。
php_libs/class/BaseController.php
138行あたり、add_pageIDメソッド内
if( !($this->is_system && $this->type == ‘list’) ){ return;}
↓↓↓↓↓
// if( !($this->is_system && $this->type == ‘list’) ){ return;}
このようにコメントアウトしてください。
2. 検索結果で表示される各ページへのリンク内にtypeやactionが含まれない
このためトップページに遷移してしまいます。
php_libs/class/BaseController.php
165行めあたり、make_page_linkメソッド内
$params = [
‘mode’ => ‘Jumping’,
‘perPage’ => 10,
‘delta’ => 10,
‘itemData’ => $data,
];
↓↓↓↓↓
$params = [
‘mode’ => ‘Jumping’,
‘perPage’ => 10,
‘delta’ => 10,
‘itemData’ => $data,
‘extraVars’ => array(
‘type’ => ‘list’,
‘action’ => ‘form’,
),
];
extraVarsという項目を追加して、
会員一覧を表示するために必要なパラメータtypeとactionを設定します。
3. 意図しないページに遷移してしまう
会員一覧の検索のときに未入力のまま検索ボタンを押して、
ページを遷移するとセッション変数にpageIDが残ってしまう。
以下のコードを追加して未入力で検索したときは
セッション変数内のpageIDを削除します。
php_libs/class/SystemController.php
121行めあたり、screen_listメソッド内
if(isset($_POST[‘submit’]) && $_POST[‘submit’] == “検索する”){
unset($_SESSION[‘search_key’]);
}else{
↓↓↓↓↓
if(isset($_POST[‘submit’]) && $_POST[‘submit’] == “検索する”){
unset($_SESSION[‘search_key’]);
unset($_SESSION[‘pageID’]);
}else{
2016.06.07
【読者質問】Mac OSX El Capitanで、本書P112ページの記載内容どおりに動作しません。
【お答え】
本書の解説どおりにメールを動作させると、以下のようなエラーがエラーログに記録されます。
(SASL authentication failed; cannot authenticate to server smtp.gmail.com[173.194.72.108]: SASL authentication failure: No worthy mechs found)
エラーログはiMacの場合、/var/log/mail.logです。
設定:
relayhost=smtp.gmail.com:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options=noanonymous
smtp_sasl_mechanism_filter=plain
smtp_use_tls=yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
本書の解説に追加された点は、以下の行です。
smtp_sasl_security_options=noanonymous
smtp_sasl_mechanism_filter = plain
tls_random_source=dev:/dev/urandom
Linuxでも同様の設定で動作すると思います。
2016.05. 29
【読者質問】誤りがあります
【お答え】
P083 一番下のコラム 3行目
引数があるとエラーよりもあとになります。
↓
引数があるとエラーになります。
P371 Chapter2 2-1の解答
$data = “03-0000-0000”;
↓
$tel = “03-0000-0000”;
2016.05. 29
【読者質問】init.php line 114というエラーがでます
【お答え】
init.php の114行目は、
require_once(“HTML/QuickForm.php”);
というコードが書かれています。
もし、ここでエラーが発生したとすると、
このHTML_QuickFormがインストールされていないためだと推測できます。
確認方法:
require_once(“HTML/QuickForm.php”);
をtest.phpに書き込んで実行してみるとわかります。
同じようなエラーが発生すると思います。
下記対策1と対策2のどちらか一方を実施すれば解決できます。
対策1:本書で解説しているXamppのバージョンをインストールする
執筆時のxamppのバージョンにあわせて解説しています。
xamppの最新版では本書の解説どおり動作しない可能性があります。
本書で利用したxamppです。
xampp-win32-1.8.2-1-VC9-installer.exe
https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.8.2/
ここでダウンロードできます。
他のOSの古いバージョンはここで探せます。
https://sourceforge.net/projects/xampp/files/
対策2:HTML_QuickFormをインストールする
新しいxamppにHTML_QuickFormをインストールしてください。
「HTML_QuickForm インストール xampp」などのキーワードでネットで検索すると、
詳細な手順を確認できます。
操作例です。コマンドラインから
C:¥xampp¥php> pear install HTML_QuickForm
と、実行します。
追記:
上記インストール時にエラーが出た場合、エラーメッセージをよく読んで対処してください。
よくあるエラーはディレクトリが作成できないというエラーです。
コマンドプロンプト画面の「Error: failed to mkdir ディレクトリ名」というように表示されます。
「mkdir」はWindowsのコマンドプロンプトで利用できるコマンドです。
このコマンドでディレクトリを作成できます。
エラーメッセージには、「C:¥php¥pear¥docs」以降のディレクトリの作成に失敗したと表示されることが多いです。
xamppをインストールしたディレクトリの外で何かをしようとしてエラーになっています。
もっとも簡単な解決方法は、不足しているディレクトリを作成することです。
「C:¥php¥pear¥docs」が存在しないというエラーですので、このディレクトリを作成しましょう。
他のパスの場合は適宜読み替えてください。
この場合は、コマンドプロンプトから以下の3つのコマンドを実行してください。
c:¥xampp¥php>mkdir c:¥php
c:¥xampp¥php>mkdir c:¥php¥pear
c:¥xampp¥php>mkdir c:¥php¥pear¥docs
コマンドを実行してディレクトリを作成できたら、
pear installからやり直してみてください。
2016.05. 09
【読者質問】P273〜P336に誤りがあります。
【お答え】
P273 手順3下から2行目
「sumbmit」
↓
「submit」
P284 手順3上から4行目
セッション+ID
↓
セッションID
P286 手順1下から6行目
$congroller
↓
$controller
P288 手順1の右コード
ファイル名追加
MemberController.php
P296 手順1の右コード上から3行目
construct()
↓
__construct()
construct()の前に半角アンダーバーが2個追加されます。
P296 手順2上から10行目
「SELECT * FROMm_ken」
↓
「SELECT * FROM ken」
P307 手順3下から10行目
(Section 84参照)
↓
(Section 82「入力チェック」手順1 参照)
P308 手順4コード
解説11
complte
↓
complete
解説12
complte
↓
complete
P310 手順1の右コード
ファイル名間違い
MYDB.inc.php
↓
MemberModel.php
P313 手順3上から1行目
$this->actionがcomplite
↓
$this->actionがcomplete
P323 手順5 下から8行目
Pager_Jumping クラスを オブジェクト化して
↓
Pager_Jumping クラスを インスタンス化して
P325 手順3 下から7行目
「|date_format:”%Y年%m月%日”」
↓
「|date_format:”%Y年%m月%d日”」でフィルタ処理をしていて
P325 手順3 下から4行目
更新、および削除のリンク
↓
誕生日は文字型で設定されているため「|strtotime」でタイムスタンプ型に変換しています(12)。更新、および削除のリンク
P325 手順3 下から1行目
(12)
↓
(13)
P325 手順3右コード上から14行目
{$item.birthday|date_format:”%Y年%m月%d日”}
↓
{$item.birthday|strtotime|date_format:”%Y年%m月%d日”}
(キャプションを追加)
12
ここでタイムスタンプ型に変換して、
P325 手順3右コード上から21行目
キャプション番号の変更
12
↓
13
P329 手順3 下から8行目
$this->typeにはcomplete
↓
$this->actionにはcomplete
P332 手順1 下から3行目
$_GET[‘type’]にregistを
↓
$_GET[‘type’]にmodifyを
P332 手順2
キャプション番号の位置を移動してください。
下から4行目
れているため、
↓
れているため(3)、
下から3行目
実行されます(3)
↓
実行されます(4)
下から2行目
設定して(4)、
↓
設定して、
P332 手順2 右コード内
指示線の間違い
(3)は、5行目の$this->typeを指します。
(4)は、8行目の$MemberController->screen_modify($this->auth);を指します。
P336 手順2 下から4行目
「$MemberController->screen_delete($this->auth);」が実行され
↓
「$MemberController->screen_delete();」が実行され
2016.04.20
【読者質問】P273のファイル名の誤り
【お答え】
P273の一番上のコードに付けられたファイル名が間違っています。
testhqf.php
↓↓↓ ファイル名が違いました。
Section77/php_libs/init.php
このファイルの114行目あたりに該当のコードがあります。
2015.03.29
【著者確認】Mac OSX Yosemiteで、本書P112ページの記載内容どおりに動作しません。
【お答え】
YosemiteのPostfixの設定
最近、iMacが故障したため各種機能を再設定したところ、
Mac OS X Yosemiteで本書の解説だけでは動作しないことがわかりました。
本書の解説どおりにメールを動作させると、以下のようなエラーがエラーログに記録されます。
(SASL authentication failed; cannot authenticate to server smtp.gmail.com[74.125.204.109]: generic failure)
エラーログはiMacの場合、/var/log/mail.logです。
設定:
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_mechanism_filter = plain
smtp_use_tls=yes
smtp_tls_security_level = encrypt
本書の解説に追加された点は「smtp_sasl_mechanism_filter = plain」です。
この設定が無いとgeneric failureとなります。
Linuxでも同様の設定で動作すると思います。
2014.11.04
【読者質問】Mac OSX Marvericsで、本書P187ページ以降記載内容どおりに進みません。
【お答え】
管理者としてMySQLに接続するという手順がわかりにくかったと思います。
1. ディレクトリの移動
さきに、mysqlコマンドが目的の場所にあるかどうかを確認しましょう。
ターミナルを起動してディレクトリを移動します。
説明の中の「$」はプロンプト(命令を入力する場所)です。
$ cd /Applications/XAMPP/xamppfiles/bin
コマンドを入力したらreturnキーを押します。
2.mysqlコマンドの確認
次にこのコマンドを実行します。
$ ls mysql
mysqlコマンドがここにあれば
mysql
と表示されます
mysqlコマンドが無い場合はこのように表示されます。
ls: mysql: No such file or directory
無い場合はXAMPPのインストールがうまくいっているかどうか手順を
確認してください。
mysqlがあれば次に進みます。
3. mysqlへ接続
ディレクトリは/Applications/XAMPP/xamppfiles/binに移動したままです。
$ ./mysql -u root -p
を実行します。
「/Applications/XAMPP/xamppfiles/bin/mysql -u root -p」
と同じです。
上記を実行すると以下のように表示されるはずです。
Enter password:
ここでは、何も入力せず「returnキー」を押します
すると以下のように表示されます。
Welcome to the MySQL monitor. Commands end with ; or \g.
— 省略 —
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
ここまで表示されたら、P187の「手順3 パスワードを設定する」のとおりに入力してrootにパスワードを設定してください。
2014.11.03
【読者質問】本書P273のaddRuleメソッドに設定する値が間違っています。
【お答え】
ご連絡ありがとうございます。
ご指摘のとおり説明に誤りがありました。大変失礼しました。
273ページ
手順4 入力ルールを設定する
上から4行目あたりの下記の文章を書き替えてください。
チェックする場所はclient(Webブラウザ)に指定します。
↓↓↓↓↓↓
変更後
チェックする場所はserver(Webサーバ)に指定します。他にclient(Webブラウザ)を指定できます。
2014.07.04
【読者質問】本書P283のハッシュ値とソルトがわかりません。わかりやすい資料を教えてください。
【お答え】
ハッシュ値に関してはこの書籍内でもっとも難しいところです。
まずはここを読んでください。
http://www.nttpc.co.jp/yougo/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4.html
PHPのマニュアルも目を通してください。
http://www.php.net/manual/ja/faq.passwords.php
上記を読むと以下のことがわかると思います。
入力されたパスワードを使ってハッシュ関数により乱数の文字列を作成します。
この乱数の文字列がハッシュ値です。
ソルトは、ハッシュ値の先頭に追加される文字列です。この文字列でハッシュ値を作った方法がわかります。
だいたいこの程度のことが理解できたらいいと思います。
get_hashed_passwordメソッドを抜き出して、
test.phpなどを作ってその中で実行して結果を見ると、
動作がよくわかると思います。
書籍に関しては読んだことがないのでわかりません。
amazonなどで「暗号」で検索すると見つかるかもしれません。
Webに関する暗号技術の本なら掲載されていると思います。
なるべく新しい本がいいと思います。
2014.06.23
ソースコードに誤りがありました。
症状:
管理画面で、会員一覧を表示したときに誕生日がすべて1970年08月20日と表示される。
原因と対策:
Smartyのテンプレート内でプログラムに間違いがありました。
誕生日はデータベースの中で文字列として保存されています。
変数の修飾子date_formatにはタイムスタンプ型のデータを設定する必要がありますが、
ここに誕生日を文字列として設定したため正しく表示できませんでした。
date_formatに渡す前にPHPのstrtotime関数をパイプでつないで文字列からタイムスタンプ型に変換して渡すと正しく表示できます。
関連URL:
http://www.smarty.net/docs/ja/language.modifier.date.format.tpl
修正箇所:
/Section77/php_libs/smarty/templates/system_list.tpl
47行目あたりを探してください。
<TD align=”center”>{$item.birthday|date_format:”%Y年%m月%d日”}</TD>
↓↓↓↓↓↓↓↓↓↓↓↓ 下記のように書き換えてください。
<TD align=”center”>{$item.birthday|strtotime|date_format:”%Y年%m月%d日”}</TD>
2014.05.30
増刷決定
1000部増刷することが決定したそうです。
ご購入はこちら
PHP+MySQLマスターブック マイナビサイト
PHP+MySQLマスターブック amazon
PHP+MySQLマスターブック 楽天
PHP+MySQLマスターブック 7net
PHP+MySQLマスターブック honto
PHP+MySQLマスターブック TSUTAYA
PHP+MySQLマスターブック 全国書店ネットワーク e-hon
PHP+MySQLマスターブック 紀伊國屋書店
PHP+MySQLマスターブック MARUZEN&JUNKDO
PHP+MySQLマスターブック ブックサービス
PHP+MySQLマスターブック Honya Club
2014.05.07
サンプルプログラム
本書はサンプルプログラムをダウンロードしてソースコードを確認しながら学習します。
サンプルプログラムのURLは書籍内に掲載していますので、そちらからダウンロードしてください。
掲載場所は次のとおりです。
目次の前のページに「PHP+MySQLマスターブックの使い方」という見開きページがあります。
その見開きの左側のページ上部にURLを記載しています。
読者のみなさまの評価
2014.06.17
読書メーターというサイト内でまろっくさんにより「サーバサイド開発の流れが掴める良書」という評価をいただきました。http://book.akahoshitakuya.com/b/4839947597
2014.05.13
ねずみのブログというサイト内「wordpressテーマ「ZERO」ダウンロードページ」にてテーマ作成に役立つということで紹介されました。http://netshopdata.com/themes-zero-962.html
2014.05.04
阿部様から
「記載コードが丁寧に説明されているなど、私のような初学者でも大変分かりやすく書かれていて、PHPの取得にはとても最適な本だと思いました」とメールを頂きました。
2014.03.18
「PHPの勉強方法と初心者おすすめの本」というページの中で、「次のステップにおすすめの本」として本書が紹介されていました。http://rentalhomepage.com/opapi/
2014.02.20 追加
2014.02.17
XAMPPのダウンロードページ
本書ではXAMPPをダウンロードして学習に使用します。
いま確認したところ、サイトのデザインなどが執筆当時とはまったく変わってしまっていました。
新しいダウンロードページは http://www.apachefriends.org/download.html です。
ここに各OSごとにわかりやすく一覧があります。
本書は5.4で確認していますので、XAMPPのバージョンは1.8.2を使用してください。
一覧から「1.8.2 / 5.4」を探して右の「ダウンロード」ボタンをクリックしてダウンロードしてください。
2月18日にバージョンアップされ現在は5.4.25が含まれています。
これより古いXAMPPを探したい方はsourceforgeにあります。
2014.02.14
永田