挫折からの回帰

1度プログラミング学習から逃げた者がどこまでやれるかもう一度挑戦するブログ

ユーザー登録・ログイン機能の実装完了

f:id:iolwloi:20191003104959p:plain

こんにちは。

文系出身でも・未経験でも・プロのプログラマーを目指すブログ

略して「プロプロ」

あんまん(@aaii0123)です。

 

昨日は夜に用事があって帰宅が遅くなり、ブログの更新ができなかったので

今日は、昨日の分とまとめて2日分の報告をします!!

 

 取り組んだこと

この2日間で、ここまで進めることができました!

・ユーザー登録画面の見た目の調整

・ユーザー登録機能のエラーチェック

・メモをとりながらのログイン機能のコード写経

・メモを見ながらのログイン機能の実装

・ログイン機能のエラーチェック

 

ユーザー登録画面の見た目の調整

前回(一昨日)のブログ投稿時に書いた通り、

ユーザー登録機能の実装はなんとかできたものの

CSSの指定をしていなかったため、本当に酷いありさま・・

 

この段階であまり見た目に時間をかけたくない、でもそれにしても酷い

ということでマックス2時間と時間をきめてCSSと格闘することに

 

ですが、トライするとかなりCSSを忘れてしまっていたことが判明し

なかなかの苦戦をしいられました・・

 

結局、この段階ではウェブカツのコードを借りてエラーのチェックなどの際、最低限ストレスがない状態にすることに・・

不甲斐ないーー;;

 

見た目は今回、少しでもオリジナリティを出したいと思っているので、

機能が全て完成したらCSSの特訓がてら、もう少し頑張りたいと思います。

 

ユーザー登録機能のエラーチェック

見た目はなんとか整ったので、続いてエラーのチェック

今回から、PHPの構文チェックはVScodeで行うことにしました。

 

本当は記述もVScodeに統一したほうがいいのかもしれませんが

Bracketsをかなり気に入っているため、

メインでBracketsを使いPHPの構文をチェックしたい時だけVScodeで表示させるという荒技^^;

 

VScodeは評判の通り、立ち上がりも早いし文法ミスがあるところは波線で表示されるためわかりやすい!!

軽微な文法ミスはVScodeのおかげでかなり速く潰せるようになりました!

 

文法ミス以外のエラーも大きなものはなく、ググって解決できるものがほとんどで

メンタル的にはだいぶ楽でした笑

 

メモをとりながらのログイン機能のコード写経

ユーザー登録機能が大方問題なさそうだったので、ログイン機能に以降。

ウェブカツの動画試聴とコードの写経をしながら

処理の流れをメモに書き出しました。

 

そのメモがこちら 

ログイン機能実装の流れ

Function.php

デバッグ

 変数デバッグフラグをtrue指定

 デバッグログ関数(デバッグフラグが空でなければエラーログに吐き出す)

セッション

 

 セッションファイルの置き場を変更(保存期間を延ばすため)

 セッションの有効期限を設定

 クッキー自体の有効期限を延ばす

 セッションを使う

 現在のセッション IDを新しく生成したものと置き換える

画面表示処理開始ログ吐き出し関数

 デバッグ 

 

auth.php

ログインしているかのチェック(セッションのlogin_dateが空じゃないか)

デバックでログイン済みユーザーと出す(空だったら未ログインユーザーと出す)

現在日時が最終ログイン日時+有効期限を超えているかのチェックをする

  超えていればセッションを削除しログインページへ遷移

  超えていなければ最終ログイン日時を現在日時に更新しマイページへ遷移

セッション自体ない(未ログインユーザー)なら後続処理を続ける

 

Login.php

共通変数・関数の読み込み

認証関数読み込み

  既にログインしているユーザーかチェック

POSTされているかチェック

 変数にユーザー情報を格納

  $pass_save変数にはポスト送信の有無によってtruefalseを入れる

バリデーションチェック

 emailの形式チェック

 emailの最大文字数チェック

   パスワードの半角英数字チェック

 パスワードの最大文字数チェック

 パスワードの最小文字数チェック

 未入力チェック

エラーメッセージがなければDB接続しパスワードとid取得

 パスワード照合(DB接続の結果が空でないこととパスワードが一致していることをチェック)

   変数にログイン有効期限(1時間)を格納

     最終ログイン日時を現在日時に

  ログイン保持にチェックがあるか確認

   チェックがあればログイン有効期限を30日にセット

   チェックがなければログイン有効期限を1時間後にセット

  DB接続でとってきたユーザーIDをセッションに格納($resultの配列のid)

  マイページに遷移

    パスワードが一致していなければエラーメッセージを格納

 処理の流れを言語化することでかなり頭に入ったような気がする〜

 

ログイン機能ではセッションが使われているので、再度

セッションとは一体なにもので、実際に使う際にはどのような処理が必要なのかの

復習をすることができました^^

 

ちなみにセッションのphp_iniへの設定の書き方って覚える必要あるのかしら・・

 

基本プログラミングは暗記する必要はないっていうけど、

実際の現場でどこまで求めらるものなのかが感覚的にわからないのが未経験者の辛いところですね・・

個人的には、少なくともセッションに関するphp_iniへの設定は

どんなことをしているのかさえ理解していれば丸暗記する必要はないかな、と判断して次に進むことにしました。

メモを見ながらのログイン機能の実装

メモと写経が完成したので、休憩がてら1時間ほど散歩してからログイン機能の実装に着手。

メモで処理の流れは確認できるとは言っても、まっさらな状態から1からコード書くのは緊張します^^;

 

しかし、その日のうちにアウトプットしたからか思ったよりもすんなりかけました。

なんだかんだでこの1ヶ月の間に同じコードを4回くらい書いているので、流石に身についたのかしら・・

 

もちろん書き間違いもところどころありましたが、エラーのチェックも含めて

思いの外、順調に進み成長を感じました!!

 

ググったこと

ini_set関数

ini_set関数を使えば、PHPコードの中でphp.iniの設定を変更することができる。

1引数に与えた設定オプションを、第2引数の値に設定する

PHPの処理が終了すると元の値へ戻される)

password_verify

パスワードがハッシュ値に適合するかどうかを調査する関数

第一引数には認証する文字列を指定、第二引数では暗号化済みの文字列を指定

参考URL:https://qiita.com/MasaKuuuu/items/51552aa0331f3ae90dae

書き方のミスがあったところ

if文のショートハンドの書き方

× if(!empty($_POST['pass_save'])) ? true : false;

○ (!empty($_POST['pass_save'])) ? true : false;

※ショートハンド記法の際は頭にifはつけない

 

・fetch関数の書き方

× $result = $stmt->fetch(PDO::ASSOC);

○ $result = $stmt->fetch(PDO::FETCH_ASSOC);

 

実録!本当にあったこんなミス!!

自分でも笑っちゃうようなミスがあったので、今後繰り返さないために

覚えで残しておきます^^;

 

ユーザー登録機能のエラーチェックをしている際、

Emailが重複しているにも関わらず、DBに登録されてしまうという挙動を発見しました。

 

エラーも出ておらず、どうやらSQLのミスでもない。

バリデーション関数の記載に目を凝らしても、正解のコードと照らし合わせてみても

書き間違っている部分もどうやらなさそうだ。

それでも、意図せずEmailの重複チェックがスルーされてしまう問題に数10分を費やしました。

 

怪しそうなところをどんなに眺めても解決策が見えず、何気なく別の箇所に目をやると

そこで初めて気がつきました

 

Email重複チェックの関数の呼び出し自体をしていない・・

 

そりゃどんなに、関数の記載ミスを探しても見つからないわけですね^^;

早速、関数の呼び出しの記載を追加して試してみたところ、無事にエラーが表示され解決できました。

 

こんなアホなミスもあるもんだなと、1つ学びました・・笑

まとめ

全体的にコードを書くのが早くなってきて嬉しい限りです。

やっぱりできることが増えると楽しい・・!

 

明日は、ログアウト機能に取り組みます〜〜!