昨日の記事に続いて、これまでに見たことがあるバグです。
昨日の記事はこちらです。
ajya.hatenablog.jp
あるシステムで、データの更新兼削除の設定ができる画面があります。
データを更新するために入力して、更新ボタンを押すと、削除が勝手に設定されてしまいました。
削除されていると、データの更新兼削除の設定ができる画面では、チェックボックスにチェックが入ります。
チェックボックスを外して、再度データを更新しても、削除が勝手に設定されたままで、チェックボックスのチェックは外れません。
データベースの更新処理の関数が正しくない
formは、POSTで動作をしていて、チェックボックスなので、チェックが入っていなければ、チェックボックスに設定されたvalueの値が渡されません。
なので、
- 値が無ければ削除ではないので、削除フラグはfalseにする。
- 値があれば削除なので、削除フラグはtrueにする。
を設定して、データベースの更新を行う関数を呼び出しています。
データベースの更新を行う関数を見ると、
- 削除フラグが指定されていなければ、削除ではないとして、削除フラグはfalseにする。
- 削除フラグが指定されていれば、削除フラグはtrueにする。
になっています。
一見すると、フラグの指定がされていない場合も考慮して正しいかと思いましたが、よくよく考えると、呼び出す側で削除フラグを設定していると、データベースの更新を行う関数内では、必ず削除フラグはtrueになってしまうようになっていました。
データベースの更新を行う関数を、
- 削除フラグが指定されていなければ、削除ではないとして、削除フラグはfalseにする。
にだけに修正して、対処は完了しました。
当初は正しく動作をしていたはずですが、なんらかの都合で修正した後のテストでの確認が漏れていたようです。