Open11

PHPのお勉強

ピン留めされたアイテム

現状

  • Webの基礎はなんとなく勉強した(要復習)
  • PHPはProgateのコースで入門済み
  • 開発経験はなし
  • HTML/CSSはPortfolioサイトを作る際にも利用しており入門済み

目標

  • できるだけ早く進めて手で覚える
  • 理解しながらどんどん進めてあとで整理する

1日目(9/18)

やったこと

  • 気づけばプロ並みPHP 改訂版--ゼロから作れる人になる!をやることに決める
  • リポジトリを作成
  • 第1章を読む
    • 仮想サーバであるXAMPP(バージョン7.2.3)のインストール
      • 一向に開けないので、最新版(バージョン8.0.10)をインストール
      • xamppフォルダ配下のhtdocsフォルダにアップロードしたいファイルを格納する
      • サーバの起動方法等について確認できた

2日目(9/20)

やったこと

  • 第2章を読む
    • データベースの作成
    • スタッフ追加機能の作成
      • クロスサイトスクリプティングについて(エスケープ命令)
      • パスワードの暗号化について(md5)
      • データベースとの接続について(try~catch)
      • INSERT文を用いたSQLの処理(挿入)
    • スタッフ一覧画面の作成
      • SELECT文を用いたSQLの処理(取得)
    • スタッフ修正機能の作成
      • ラジオボタンの作成(type="radio")
      • UPDATE文を用いたSQLの処理(更新)

3日目(9/27)

  • 第2章を続きから読む
    • 好きな画面へ分岐させる画面の作成
      • 分岐用のページを経由してactionの飛び先を分岐させる(header関数)
      • formを使わずに値を渡して飛ばす(URLパラメータとGET)
    • スタッフの削除機能の作成
    • スタッフの参照機能の作成
  • 第3章を読む(商品管理)
    • 第2章と同様の部分の作成
      • (写経に近いが、流れの再確認が重要)
      • テーブルの作成
      • フォルダの作成
      • 追加機能の作成
      • 一覧機能の作成
      • 分岐機能の作成
      • エラー対応画面の作成
      • 詳細確認画面の作成
      • 修正機能の作成
      • 削除機能の作成

4日目(9/29)

  • 第3章を続きから読む
    • 商品画像の追加
      • 画像用のフォルダを作り、画像のファイル名をデータベースに格納
      • フォルダ内のファイルの扱いとデータベースでのファイル名の扱いを両方とも行う
  • 第4章を読む
    • ログイン機能の作成
      • データベースに指定したユーザがいるかどうかで絞り込む
    • ユーザ認証機能の作成
      • セッション(アクセスの開始から終了までの一連の通信)
      • セッションの開始から削除まで(クッキー)

5日目(9/30)

  • 第5章を読む
    • (基本文法の確認程度)
    • 配列、連想配列、switch文、if文、関数、など
    • VSCodeの設定をしていたら無限に時間が溶けた
  • 第6章を読む(ショッピングカートの作成)
    • セッション変数にカートの中身も保存

6日目(10/3)

  • 第6章を読む(続き)
    • エラー表示が流石に雑すぎないか?
    • カートの中身を表示(foreach)
    • カートを空にする(セッションを切る、開発者用)
    • 商品の購入数を変更する(カートの中身ごとに異なるname属性)
    • 商品の削除機能を作成する
    • 各種エラー処理
      • はじめのうちは色々な罠を踏みそうで怖い、慣れが必要
      • 想定外のエラーがある可能性もあるので、知識を増やしたい
    • 色々ミスがあるなあと
      • 違う変数を用いている
      • 推奨すべきでない変数を用いている
      • マジックナンバーがある
  • 第7章を読む
    • 注文フォームを作る
    • 注文チェックの画面(フラグ制御)
    • 注文登録の画面

7日目(10/4)

  • 第7章を読む(続き)
    • 注文登録の確認メールの自動送信
      • 本文を書いて、メールアドレスを指定して送信するだけ
      • メールヘッダインジェクション脆弱性あり
    • 注文情報のデータベースへの登録
      • データを冗長にしないようなデータベースの設計
      • 冗長になりそうな場合はテーブルを分けると良い
      • ありうるものは予め設計しておくのが一般的
      • TIMESTAMP型
      • SQLのテーブル同士の結合
        • どのカラム同士でくっつけるかを書く
        • 例:SELECT * FROM dat_sales,dat_sales_product WHERE dat_sales.code=dat_sales_product.code_sales
      • アクセスのロック
      • カートの中身の削除(セッションを切る)
  • 第8章を読む
    • (注文データをcsvファイルでダウンロードする)
    • ダウンロードしたい注文日付を選ぶ(プルダウンメニュー…selectタグ)
      • ここでは簡単のために存在しない日付も含む
      • 関数に直す

8日目(10/5)

  • 第8章を読む(続き)
    • SQL文でデータベースを検索してからCSVへ変換
      • 変換時にはカンマ区切りで繋ぐ(もっとスマートな方法はありそうだけど…)
      • 日付も条件にしてSQL文で取ってくる(複雑なSQL文)
      • chromeで開いたら文字化けした→エンコーディングがShift-JISになる
        • CSVはデフォルトのエンコーディングがShift-JISっぽい(拡張機能Charsetでなんとかした)
    • 第9章を読む
      • (会員登録機能の作成、既に作った画面の改造が中心)
      • 会員登録機能
        • パスワード、性別、生まれ年を追加する(ラジオボタン、JSでの表示の切り替え)
        • データベースへの作成→保存

9日目(10/6)

  • 第9章を読む(続き)
    • 会員登録機能
      • データベースへの保存
      • (全体的に変数名が嫌い)
      • 登録時に違った挙動をするように設定
    • 会員ログイン機能
      • スタッフログイン機能と同じ
    • 会員かんたん注文機能
      • セッション変数に会員コードを格納しておいてデータベースから検索する
  • 全て終了
    • 割とガバガバな実装なのが気になるけど、今回は気にしないということで
    • どこがガバガバかしっかり言語化して復習したい
    • ページ単体にアクセスした時の挙動をしっかり漏れなく実装する必要がありそう
    • 折角やったので、復習が済んだらprivateリポジトリにはアップロードしておきたい

10日目(10/7)

  • 復習時のポイント
    • ガバガバな実装の確認
    • 1周目で確認しなかった応用事項の確認
    • 重要となる手順などのまとめ
作成者以外のコメントは許可されていません