2009-05-05 13 views
2

を削除すると、追加のフォームを生成しますが、私は3つのテーブルは、SQL挿入を組み合わせると、ここで[OK]を

events 
- id 
- name 

questions 
- id 
- event_id 
- name 

answers 
- id 
- question_id 
- description 

を持って質問

ですが、私は単に特定のイベントに属するすべての質問を検索し、表示することができます単一のHTML形式の質問。

しかし、編集シナリオを考えてみましょう。イベントマネージャーは、予定通りにイベントからいくつかの質問を追加または削除することができます。そのような場合、ユーザーがすでに投稿された回答を編集しようとすると、空白のフィールドとして新しい質問を含むHTMLフォームが生成され、既存の回答は事前入力された入力ボックスになります。このフォームの提出をどのように処理できますか?

ユーザーが送信すると、過去の回答がすべて削除され、すべての回答値の回答テーブルにINSERTする必要がありますか?既存の回答を最初に更新し、新しい値だけをINSERTするのはよい習慣ですか?

前者はDELETEに続いてINSERTが容易であることが明らかである。後はやや面倒ですが。以前の解決策の問題は、回答テーブルのIDが毎回増加するということです。

答えて

3

あなたが言うように、削除/挿入アプローチが好都合な人もいます。

個人的に私は更新/挿入/削除のアプローチは、より多くの仕事がより正確だと思います。

更新を行うと、特定のアイテムに対する変更の監査証跡を表示できます。挿入/削除するだけで、そのようなリンケージや歴史を持つことはずっと難しくなったり不可能になったりします。

フォームの提出をどのように扱うかについては、更新可能なフィールド(つまり既存のレコード)については、何らかの理由でフィールドを識別できる必要があります。個人的には、フィールド名にプライマリキーのようなものをエンコードします。

これを行う場合は、提供されたIDが有効であり、編集が許可されている、つまりクライアントを信頼していないことを検証することによってセキュリティホールがないことを確認する必要があります。

これは、の形取ることができる:

<input type="text" name="name_117" value="Some value"> 
<input type="text" name="name_118" value="Some other value"> 
<input type="text" name="name_1243" value="Yet another value"> 

を、あなたは、すべての入力パラメータを処理識別子をデコードし、それに応じて行動しなければなりません。

最後に、挿入/削除のもう1つの問題は、削除/挿入しているアイテムがデータベースの他のテーブルに関連している場合、それを実行できないということです。あなたが質問表を持っていて、人々が与える答えを保管しているのであれば、通常は質問を外部キーとして参照します。更新の代わりに削除/挿入すると、関連付けが失われます。

+0

Ah入力フォームの既存のIDを安全にエンコードできないと感じました。私はそれが通常の習慣だと思います。早速のお返事ありがとうございます。 – bibstha

0

まず、IDは何にでも使用するべきではないため、インクリメントを無視してください。

しかし、私は最初の質問に対処することをお勧めします。ユーザーは実際に編集で異なる質問を設定していますか?次に、それらを新しいセットとして保存します。または、元のセットは概念的なアイデンティティーを保持することを意図していますか?その後、更新/削除/挿入します。それはもっと事実だと思われる。

質問/回答セットの完全性を保証するという観点から、私はその責任を持つセッションを考えています。セッションに関連付けられた質問に対して質問セットの検証を検討する必要があります。

+0

はい、編集内容は同じで、同じではありません。私は挿入/更新/削除が行く方法だと思います。ありがとう – bibstha

0

オンラインクイズアプリケーションは通常、クイズがライブになるとクイズを閉じます。完成した回答セットと、変化する質問の定義とを対処するのは面倒な問題です。アプリケーションで処理できる場合は、イベントが最初に公開されると質問の変更を許可しないようにします。

0

余分な理由やアイデアのために別々に書き込み、Cletusポストに同意:

削除/挿入アプローチをあなたのウェブサイトは、いくつかの大量のトラフィックを取得するときに、同時実行の問題があります。他の人があなたの削除の後に挿入を行うことができます、そして、あなたはユーザーごとに複数の回答リストで終わるでしょう。

MySQLはON DUPLICATE KEY UPDATE構文をサポートしています。適切な主キーがあれば、挿入と更新を簡単に組み合わせることができます。

関連する問題