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

2020年1月21日


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


オライリー・ジャパン


著者:Lynn Beighley、Michael Morrison
訳者:佐藤嘉一


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

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問い合わせ文でカラムがずれます

索引

書籍目次

Posted by shi-n