web-dev-qa-db-ja.com

options.phpがデータベースから有効な既存データを削除しないようにする方法

私はプラグインを設定していて、設定でフォームを作成するために設定APIを初めて使用しました。プラグインのデータは、プラグインがアクティブ化されてシリアル化フォーマットでデータベースに格納されると、デフォルトで最初に作成されます。

今日は検証コールバック関数を追加しました。ただし、いずれかのフィールドが検証に失敗して関数がfalseを返した場合(私もNULLを返してみました)、データベース内の既存の有効なデータは削除されます。

問題はこういうことだと思いますか、それとも私は愚かなことをしているのでしょうか。このような状況では、データベース内の既存の有効なデータは、ユーザーがそれを変更するために一連の有効なデータを提示するまでは変更されないままであることが予想されます。

任意の提案は大歓迎です。

1
Pete Lawless

sanitize_callback関数は、入力が無効であることを示すfalsenullを返すべきではありません。その目的は、常に常に有効な値を返すことです。この関数によって返される値はデータベースに保存されるものなので、実際にサニタイズするためには意味のあるものを返す必要があります。 この例 のようにintvalを使用するのと比較してください。これにより、設定APIは入力に関係なくint値を格納するようになります。

とにかく、あなたの問題を解決するためにあなたはすべきこと:

  • 入力が無効な場合は、以前に保存された値を返します。
  • 入力が空の場合(および空の値は許可されない場合)、デフォルト値を返します。
  • 新たに入力したの値が有効と見なされる場合はそれを返します。

また、最後のステートメントに加えて、あなたの値は衛生状態で有効になるかもしれません:あなたのニーズに応じて" [email protected]""0123"にサニタイズされるかもしれない"[email protected]"123といった入力を想像してください。

1
Simon