Head First PHP & MySQL
――頭とからだで覚えるWebアプリケーション開発の基本

[cover photo]
  • 2010年03月 発行
  • 672ページ
  • ISBN978-4-87311-444-6
  • フォーマット Print PDF
  • 原書: Head First PHP & MySQL

オライリー・ジャパンで書籍を購入:
定価4,536円

Ebook Storeで電子版を購入:
価格3,629円

わかりやすいと大好評のHead Firstシリーズに、新たな仲間が登場。本書では、Webアプリケーション開発者、Web管理者にとって必須の知識、テクニックを、基礎からやさしくわかりやすく解説します。さらにPHPとMySQLを使って実際に手を動かしながらWebアプリケーションを開発していきます。セキュリティや正規表現など高度なトピックもカバー。すべてのサンプルコードを日本語化し、巻末に書き下ろしの付録「PHP & MySQL日本語対応」を収録するなど、日本語対応もばっちりです。関西弁のQ&Aなど衝撃的かつ画期的な試みも多数あり、とにかく「楽しめる」一冊です。

関連書籍

Head First JavaScript
Head First SQL
初めてのPHP
初めてのPHP & MySQL 第2版

序章
    この本を読むのにふさわしい人は?
    みなさんが思っていることはわかっています
    メタ認知:自分の思考について考える
    脳を服従させるために「みなさん」ができること
    まず最初に読んでください
    テクニカルレビューチーム
    謝辞

1章 静的なページに命を吹き込む
    HTMLは静的で退屈です
    PHPは Webページに命を吹き込んでくれます
    フォームにより全ストーリーを得られる
    フォームは HTMLでできています
    HTMLフォームは問題を抱えています
    HTMLはクライアント上で動作します
    PHPはサーバ上で動作します
    PHPスクリプトはサーバで動作します
    PHPを使ってフォームのデータにアクセスする
    PHPスクリプトはサーバ上にいなければならないのです!
    サーバが PHPをHTMLに変えます
    コーディング上の PHP規則
    完璧な変数名を見つける
    $_POSTはフォームのデータを保持する特別な変数です
    $_POSTはフォームのデータをスクリプトに運んでくれます
    PHPでメッセージ本文を作成する
    単なるテキストもフォーマットできます…ちょっとだけ
    改行には二重引用符の文字列が必要です
    オーウェンに飛ばすメールメッセージを組み立てる
    変数はメールの要素や部品を格納しています
    PHPでメールメッセージを送る
    オーウェンにメールが来始めました

2章 MySQLとつなげる
    オーウェンの PHPフォームはちゃんと動きますが、ちゃんとしすぎです…
    MySQLはデータの格納に優れています
    オーウェンには MySQLデータベースが必要です
    MySQLのデータベースとテーブルを作る
    INSERT文の動作
    テーブルのデータを見るには SELECTを使う
    PHPにウンザリ SQLの処理をやらせる
    PHPによりデータはオーウェンの Webフォーム上を渡り歩く
    PHPからデータベースに接続する
    PHPスクリプトでデータを挿入する
    データベースとお話しする PHPの関数を使う
    $_POSTがフォームのデータを供給します
    オーウェンはデータを選別する必要が出てきました
    オーウェンのファング探しはやっと軌道に乗りました

3章 データベースを作ってそれを使う
    エルビスストアーを本格的に開店します
    清野君にはアプリケーションが必要です
    清野君のアプリケーション設計を視覚化する
    何事もテーブルから始まる
    MySQLサーバにコンタクトを取る
    清野君のメール用データベースを作る
    さっきのデータベースの中にテーブルを作る
    データを定義する必要があります
    MySQLのデータ型たちを一堂に会しましょう
    問い合わせ文でテーブルを作る
    使う(use)前にデータベースを USEする
    DESCRIBEでテーブル構造を明らかにする
    清野君はデータ格納準備完了です
    メール追加用のスクリプトを作る
    清野君のアプリケーションにはもう 1つ必要です
    メール送信用スクリプトにおけるボルトとナット
    最初にすべきこと、データを捕まえる
    mysqli_fetch_array()で問い合わせ結果を取ってくる
    WHILE(しばらく)の間ループする
    whileでデータをループする
    メールが来ました…清野君から!
    時には出て行く人も
    DELETEでデータを取り除く
    WHEREを使って特定のデータをDELETEする
    間違って削除してしまうというリスクを最小化する

4章 現実的で実用的なアプリケーション 
    清野君はいらついている顧客を作り出してしまいました
    清野君を…清野君から守る
    ちゃんとしたフォームデータを要求する
    メール送信用画面の妥当性検証の背後にある論理
    IFを使って判断を下せます
    真偽値のテスト
    IFは等価性以外もチェックします
    PHP関数で変数の妥当性を検証する
    複数の条件を論理積と論理環でテストする
    フォームのユーザにフィードバックが必要です
    必要に応じて PHPから出たり入ったりする
    フラグを用いて重複のコードをなくす
    HTMLフォームは一度だけコーディングする
    自分自身を参照するフォーム
    スクリプトでフォームの actionを指す
    フォームが「提出」されたかどうかをチェックする
    まだムカついているユーザがいます
    テーブル行は一意に識別できるべきです
    主キーは一意性を強要する
    チェックボックスから顧客 IDへ
    foreachにより配列をループする

5章 ファイルに格納されたデータを使う
    仮想ギタリストはコンペ好きです
    証拠は写真の中にある
    アプリケーションにイメージを格納する必要があります
    ギターウォーズにイメージファイルアップロードを計画する
    ハイスコアデータベースは ALTERしなければいけません
    ユーザからイメージをもらうにはどうすればよい?
    データベースにイメージファイル名をぶち込む
    アップロードされたファイルの名前を見分ける
    アップロードしたファイルはどこへ行った?
    アップロードされたイメージファイル用に家を作る
    共有データは共有しなければならない
    共有スクリプトデータは requireする
    require_onceは「挿入」と考える
    順序がハイスコアのすべて
    ギターウォーズのトップに勝者の栄誉を与える
    HTMLとCSSでトップスコアをフォーマットする
    小さなイメージだけを許可する
    ファイルの妥当性検証により、アプリはもっと強固になります
    管理用ページを計画する
    管理用ページにスコア削除リンクを付ける
    スクリプト同士でコミュニケーションをとることができます
    GETとPOSTについて
    GETとPOSTとハイスコアの削除と

6章 アプリケーションにセキュリティを与える
    音楽が死んだ日
    うじゃうじゃいる大群をセキュリティイで監禁する
    ギターウォーズの管理者用ページを守る
    HTTP認証にはヘッダが必要です
    ヘッダを丸裸にする
    PHPでヘッダをコントロールする
    ヘッダによる認証
    認証用スクリプトを作る
    ギターウォーズエピソード II:ハイスコアクローンの攻撃
    足し算による引き算
    セキュリティには人間が要ります
    ギターウォーズを検査するための計画
    ALTERで承認の置き場所を作る
    未承認のスコアには価値がない
    100万点ハック
    すべて検査済み…?
    彼女は正確には一体何をしたのか?
    コメントで MySQLをごまかす
    スコア追加用フォームは SQLを注入されたのです
    SQL注入からデータを守る
    (パラメタ付きの)安全な INSERT
    フォームの妥当性検証にはやり過ぎということはありません

7章 個人向けの Webアプリを作る
    正反対が魅力的とよく言われます
    ミスマッチサイトは個人の情報がすべてです
    ミスマッチサイトにはログインが必要です
    ログイン用のデータベースを準備する
    ログイン・インタフェースを作る
    パスワードを SHA()で暗号化する
    パスワードを比較する
    HTTP認証でユーザとしてログインする
    新しいユーザをサインアップするためのフォーム
    クッキーの中にあるものは?
    PHPでクッキーを使う
    ログインのフローを再考する
    クッキー強化版ログイン
    ログアウトとはクッキーを削除することを意味します
    セッションはクライアントに依存しません
    セッションデータを追跡する
    ミスマッチサイトをセッションで刷新する
    セッションを使ってログアウトする
    セッションへの進化を完了させる
    ユーザは嬉しく思っていません
    セッションは短命です…
    …でもクッキーなら永遠に続きます!
    セッション+クッキー=すごいログイン永続性

7.5章 ダブったコードをなくす
    テンプレートでミスマッチサイトを作り直す
    テンプレートを使ってミスマッチサイトを再構築する
    ミスマッチサイトがまた完成しました…しかもはるかによい構成で

8章 データをコントロールし、世界をコントロールする
    完全なミスマッチにする
    ミスマッチさせるにはデータがすべてです
    スキーマでデータベースをモデル化する
    複数のテーブルを結び付ける
    外部キーの動作
    テーブルは行と行でマッチします
    1行が複数行に対応する
    多対多で行をマッチさせる
    ミスマッチのアンケートを作る
    データベースにレスポンスを入れる
    データでフォームを駆動する
    ミスマッチ用のアンケートフォームを作る
    正規化に向けてちょっともがく
    正規化するならアトムを考える
    正規化されたデータベースへの 3ステップ
    ミスマッチのデータベースを変更する
    ミスマッチサイトは本当に正規化されたのでしょうか?
    問い合わせ文の中の問い合わせ文の中の問い合わせ文の中の …
    みんなテーブルをつなぎましょう
    ドットで結ぶ
    内部結合でまだたくさんのことができます
    テーブルやカラムに愛称をつける
    結合で救出する
    ミスマッチを成功に導く 5つのステップ
    ユーザの「ミスマッチ性」を比較する
    必要なものは forループです

9章 文字列とカスタム関数
    割のいい危険な仕事は見つけにくいものです
    いまの検索だとエラーに対するゆとりが全くありません
    SQL問い合わせ文は LIKEを使って柔軟にできます
    文字列を単語単位に爆破( explode)する
    implode()は部分文字列から文字列を作ります
    検索文字列の前処理
    不要な検索文字を置き換える
    問い合わせ文にはちゃんとした検索語が必要です
    空でない要素を新しい配列にコピーする
    時には文字列の一部しか必要ないこともあります
    部分文字列はどちらの端からでも取り出せる
    複数の問い合わせ文で結果をソートできます
    関数でコードを再利用する
    カスタム関数で問い合わせ文を作る
    カスタム関数はどこまでカスタムか?
    SWITCHは IFよりずっと多くの判断をします
    build_query()にソート機能を加える
    結果をページに割り付けることができます
    LIMITで必要な行だけ持ってくる
    LIMITでページリンクをコントロールする
    ページ割り付けデータを追跡する
    ページ割り付け用の変数をセットアップする
    問い合わせ文を書き直して結果をページ割り付けする
    ページ案内用のリンクを作る
    すべてを合わせて検索用スクリプトを完成させる
    完成版検索用スクリプト、続き…

10章 正規表現
    リスキージョブサイトから履歴書(レジュメ)を送付できるようにする
    データがどうあるべきかを決める
    電話番号のパターンを定式化する
    正規表現でパターンにマッチさせる
    メタ文字を使ってパターンを作る
    文字のクラスでパターンを改良する
    preg_match()でパターンをチェックする
    電話番号データを標準化する
    不要な文字を捨てる
    PHPを使ってドメインをチェックする

11章 シンジケーションと Webサービス
    オーウェンはファングについての言葉が欲しいのです
    UFOによる誘拐データを人々にプッシュする
    RSSは Webコンテンツを人々にプッシュしてくれます
    RSSというのは実は XMLです
    データベースからニュースリーダへ
    RSSを視覚化する
    どうすればニュース即配信が可能となるか?
    RSSフィードを動的に作る
    RSSフィードへのリンク
    百万の言葉より一枚のビデオを以て語らしめる
    Webコンテンツを他のサイトから引っ張ってくる
    YouTubeビデオとシンジケーションする
    YouTubeビデオリクエストを作る
    オーウェンは RESTリクエストを組み立てる準備ができました
    YouTubeは XMLで話します
    YouTube XMLレスポンスを分解する
    XMLのビデオデータを視覚化する
    オブジェクトで XMLデータにアクセスする
    XML要素から PHPオブジェクトへ
    XMLデータをオブジェクトで掘り起こす
    名前空間なしではダメです!
    ファング目撃情報上昇中
    ビデオを見やすく配置する
    ビデオデータを表示用に配置する

付録i 残飯
    本書の内容を PHP4とMySQL関数に後方互換で対応させる

付録ii 開発環境をセットアップする
    PHP開発環境を作る
    自分の持ち物を調べる
    Webサーバがありますか?
    PHPがありますか?バージョンは?
    MySQLがありますか?バージョンは?
    サーバをセットアップする
    Windowsで VertrigoServを起動する
    ApacheとPHPの動作を確認する
    MySQLの動作を確認する
    Macに XAMPPをインストールする
    Macで XAMPPを起動する
    ApacheとPHPの動作を確認する

付録iii PHP & MySQL日本語対応 
    PHP日本語スクリプトを作る
    UTF-8のファイルを作る
    MySQL
    文字コードセットを確認する
    文字コードセットを UTF-8だらけにする
    日本語データを入力してみる
    MySQLターミナルで日本語を入力する場合の注意事項
    SELECT問い合わせ文でカラムがずれます

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

1刷正誤表

Head First PHP & MySQL1刷正誤表

2010年7月31日更新

位置
p43
コード
16行目
$email = $_POST['email']; $email = $_POST['email'];
$other = $_POST['other'];
(1行追加)
p78
4行目
それを選別します。 それを選別します。
p447
右下
フキダシ
仕事が見つかる…かもれない 仕事が見つかる…かもれない
p452
訳注
2行目
(日本語版対応版は、 (日本語版対応版は、
p594
訳注
1行目
通常状態を想定して、 通常状態を想定して、

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]