password_verifyが一致しないとき チェックするべき観点

PHPでログイン機能を作成しているとき、 password_verifyを使ったのですが、 全く一致せず半日ほどハマってしまったので チェックの際見るべき観点について書きます。

f:id:HIDE_ENGINEER:20220221195506p:plain
会員登録時、登録したパスワード「1234」を入力してログインボタンをクリック

cannot read property of null

PHPJavaScriptでクイズアプリを実装中に下記のエラーが出てしまいました。

f:id:HIDE_ENGINEER:20220125192430p:plain
cannot read property of null のエラー

原因:テンプレートとなる question.tpl.php をincludeしていなかったのが原因でした。

f:id:HIDE_ENGINEER:20220125192738p:plain
include DIR.'/../template/question.tpl.php'; を追記

question.tpl.php をincludeしたことで下記のように、ちゃんとクイズ画面が表示されました。

f:id:HIDE_ENGINEER:20220125193010p:plain
クイズ画面

SQLで複数のカラムのデータを一つのカラムにまとめる方法

複数のカラムのデータを一つのカラムにまとめる方法を解説します。

複数のカラムのデータをDataGridViewのカラムに移送したいときなんかに

使えると思います。

 

下記の役割テーブルの値が「1」の場合だけ、カンマで文字列連結します。

 

f:id:HIDE_ENGINEER:20220123234608p:plain

役割テーブル

下記が実施したSQLです。

 

```sql
select
concat_ws
(
',',
CASE
WHEN d.duty_pm = 1 THEN 'PM'
ELSE NULL
END
,
CASE
WHEN d.duty_pl = 1 THEN 'PL'
ELSE NULL
END
,
CASE
WHEN d.duty_sl = 1 THEN 'SL'
ELSE NULL
END
)
AS 役割
from t_duty as d
```

このSQLですが、まずCASE文で値が「1」のときは文字列に変換し、「1」以外のときはNULLとします。

そして、変換した文字列をconcat_ws関数で連結します。

concat_ws関数は区切り文字を指定して文字列を連結できます。

さらにNULLの場合は、無視して連結しないので、NULL以外の文字列が連結されます。

 

下記が出力結果になります。

f:id:HIDE_ENGINEER:20220123235431p:plain

出力結果

※concat_ws関数は、MySQLSQL ServerPostgreSQLで使用可能だそうです。