僕は基本BoostNoteを使ってメモをしているのですが、phpの学習がひと段落ついたので一旦Qiitaにアウトプットしときます。内定先の課題の一つでtodosアプリのソースコードを「新規作成」「更新」「削除」それぞれの処理の流れに沿って、コードを全行・全メソッド説明するというものがあり、その説明をメンターにしている中で、言葉に詰まったところを今回は書きます。
頑張って自分と同じくらいの学習度の人に伝わりやすいように。順番はぐちゃぐちゃです。
$_POST
- HTTPPOSTメソッドで送信された値を取得する変数
暗号化とハッシュ化の違い
ハッシュ化
- 不可逆変換なので元データを復元できない
用途
- パスワード保管等
暗号化
- 秘匿変換なので元データを複合化することができる
用途
- 機密情報の秘匿等
checkTokenによる整合性を確認する意味
function checkToken($token)
{
if (empty($_SESSION['token']) || ($_SESSION['token'] !== $token)) {
$_SESSION['err'] = '不正な操作です';
redirectToPostedPage();
}
}
非正規ルートからのアクセスを防ぐため
SESSION
サーバーとクライアントつまり、ユーザーとアプリケーション側がやり取りする上でアプリケーション側がユーザーを特定するために使用する
エスケープ処理の必要性
悪意のあるコードを特定するため
htmlspecialchars
フォームから送られてきた値や、データから取り出した値をブラウザに表示する
リファラ
あるページを開いたユーザーがどのページから流入してきたかを知るための情報
PDO
PHPとデータベースサーバーの間の接続
PDOStatement
プリペアドステートメント(SQL文を最初に用意しておいて、その後はクエリ内のパラメータの値だけを変更してクエリを実行できる機能のこと)を表す
PDOException
PDOが発するエラーを出力する
bindValue
値をパラメータにバインドさせる
:textの読み方と意味
読み方
プレースホルダ
意味
SQL文の中で「ユーザーが入力した値を代入する箇所」
使う意味
プレースホルダを使わずにユーザーから入力された値を直接SQLに結合してしまうと不正な値が入力された時、SQL文が壊れるもしくは、別の文に変化する恐れがある(SQLインジェクション)
プレースホルダを使うと、その部分はあくまで「値として処理し、SQL文として実行されなくなる」
prepareとqueryの違い
$stmt = $dbh->prepare($sql);
$stmt = $dbh->query($sql);
共通点
- 引数に指定したSQL文をデータベースに対して発行する
違い
prepare
ユーザーからの入力を利用する
query
ユーザーからの入力を利用しない
最後に
1回目のレビューの際は言葉がたどたどしすぎてたくさん指摘箇所がありましたが、2回目以降の訂正箇所は大体こんな感じでした。
初心者はprogateで達成感を得て満足するより、プロが書いたコードとかを実行される順に追っていき、全ての関数やメソッドを理解していき、第三者に説明する練習がいいんじゃないかなとやってみて思いました。