-1

チェックボックスを含むフォームがあり、それらをデータベースに送信する最良の方法を知る必要があります。次のテーブル設定があります。

roles    users    user_roles
-----    -----    ----------
id       id       user_id
                  role_id

ユーザーを編集し、チェックボックスを介してさまざまな役割を割り当てることができるページがあり、それらのチェックボックスは user_roles テーブルに保存されます。ユーザーのロールを編集するには、行を削除するか行を追加する必要があるため、現在の処理方法は次のとおりです。

my $form_vals = (1=>1,2=>2); #submitted by user
my $db_vals = (3=>3); #gotten out of db

これら 2 つのハッシュがあり、 のキーと のキーを比較すると$form_vals$db_valsデータベースに存在しない 2 つの余分な値があることがわかり、それらを追加します。逆に、キーとキーを比較して、フォームで選択されなくなった値を見つけ、$db_valsそれら$form_valsの行をデータベースから削除します。私の質問は、これを行うためのより良い/簡単な方法を知っている人はいますか? チェックボックスをどのように処理するかは、私には決して明白ではありませんでした。ベストプラクティスとは何かを知りたいです。ありがとう!

4

1 に答える 1

1

これがチェックボックス自体とあまり関係があるとは言えません。

基本的に、[ (uid,rid), (uid,rid)] という 2 つの配列の配列があり、array1 (データベース内のもの) を array2 (チェックボックスからのユーザー入力) のコピーにしたいと考えています。複数選択またはカンマ区切りの文字列を使用できますが、大文字と小文字は同じです。ユーザー ID があり、そのユーザーに提供されたロールのみを持たせたいとします。

それを達成するための2つの方法は、次のいずれかです

  • 両方の配列をそれぞれ 1 つのハッシュに入れ、送信されたキーで foreach キーを実行します。データベースに存在しない場合は、挿入します。次に、データベースハッシュに対して同じことを行い、送信されたハッシュに存在しないものを削除します
  • member_role テーブルからすべてを削除し、送信されたものを挿入します。

データベース内のすべてと送信されたすべてを把握し、すべてを削除して新しい挿入を行いたくない場合は、2 回確認する必要があります。もちろん、醜さを少し隠して、これを行う関数を作成することもできます。アレイが 2 つだけで、データベースが存在しない場合の対処法を考えてみてください。

于 2012-08-24T09:25:29.603 に答える