人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP+MySQLで複数ページにまたがるWebアンケートの作成を考えています。
書籍とサイトを参考にして「フォーム入力→DBへ登録→header:locationでリダイレクト」という流れは作成できたのですが、各ページの回答に同じIDがつきません(当たり前ですが)。IDはAuto Incrementに設定しています。そのため、以下の疑問についてお分かりの方、ご教示ください。
質問の仕方、情報提供など不適切な点があればご指摘頂ければ幸いです。

1.どのようなフローが適切でしょうか?
すべての回答をセッションで管理して、最後の確認時にDBに登録すれば同じIDがつくのでしょうか。
それとも、一意の何かをセッションで保有して、都度登録するものでしょうか。

2.DBを利用したこうしたサイト作成に際しての一般的な注意点・守るべき事項があればお教えください。
参考サイト等でも結構です(あまり網羅的なものは厳しいです・・・)。

よろしくお願いします。

●質問者: qcmqem
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●120ポイント ベストアンサー

フローは、すでに挙げておられるように、おおよそ下記のどちらかですね

(a)データは全てセッションで管理して、
最終項目の入力が終わった時点で、テーブルに一括登録
構造が簡単なのが最大の利点

(b)セッションでは投稿者IDみたいなものだけを管理して、
その都度、一時登録用のテーブルに保管しておいて、
最後に本登録用のテーブルに書き込む
瞬間的な通信エラーなどが起こっても再開を可能にすることが出来るなど、
利用者側からみても処理の中断/再開なども実現できて利便性は増しますが、
構造は複雑になります

どちらを選択すべきかですが、
項目が非常に多く、途中トラブルで一からやりなおしは避けたいとか、
ミッションクリティカルなものとかでなければ、おおよそ(a)で問題ないはずですよ

特に注意すべき点としては、
途中で止まってしまった場合に備えてログ出力するようにしておくとか、
バックアップはどのような時点で行うようにすべきかくらいですね
もっと上のレベルになると、サーバーの冗長化(常に予備を動かす)とかになっちゃいます・・・


qcmqemさんのコメント
ありがとうございます。 今回作成するものはやり直しがクリティカルな問題にはならないと考えていますので、提案頂いた(a)の方の、セッション変数として値を保持して最後に書き込むフローにしようかと思います。 ログ出力とバックアップは、できる範囲でやろうと思います。 冗長化が必要なほどのレベルのものではないと思います・・・

2 ● oil999
●80ポイント

1.どのようなフローが適切でしょうか?

2通りの考え方があります。

  1. すべての回答をセッション変数に持たせる
  2. すべての回答をサーバ側の一時ファイル(または作業用テーブル)に持たせ、セッションIDで紐づける

1.はコーディングは楽ですが、通信量が増えますし、SSL通信でないと回答内容が盗み見られるという恐れがあります。
2.はコーディングは複雑ですが、通信量は少なく、回答内容が盗み見られる可能性も低くなります。

2.DBを利用したこうしたサイト作成に際しての一般的な注意点・守るべき事項があればお教えください。

  1. DBロックを防ぐ:前述のように、セッション変数または一時ファイルに持たせ、最終的な確定操作でDB登録した方がいいです。
  2. ブラウザの戻るボタンを押したときの対処:一般的には、戻るボタンを押下された場合にはアンケートは最初からやり直しという形にします。
  3. セッション切れ対策:セッション継続時間を決めておき、それを超えたらセッション変数または一時ファイルは破棄するようにします。
  4. インジェクション対策:不正な入力値が送られてきた場合にプログラムの制御を奪われないようにします。
  5. セッション・ハイジャック対策

うぃんどさんのコメント
セッション変数の動作知ってますか? セッション変数の値はサーバー側で保持するだけなので通信量が増えたりはしませんよ 入力された値は一度サーバーに送られるだけですから、 回答内容を読み取られる危険性についても、どちらのフローでも違いはありません

qcmqemさんのコメント
ありがとうございます。 (追加でコメントいただいているのがどなたかよくわからないのですが・・・) セッション変数でもサーバ側に保存され、通信量が増加しないようであれば最終的に書き込む、というフローにしようかと思います。 注意点についてもたくさん挙げて頂き参考になります。 1.DBロックはDBの書き込みをまとめた方が処理効率がよいということですね。 2,3はセッションを管理して不正な値が入らないよう注意します。 4,5は・・・どこまでできるかわかりませんが、入力文字のエスケープ、セッションIDのランダム化やSSLの利用などで対策を試みてみます。

うぃんどさんのコメント
コメントしているのは回答No.1と同じくwindofjulyです アイコン(私のアイコンは?が!に変わっていくアニメGIF)にマウスをしばらく置くと、アカウントが出てきます 実際の対応としては、コメント欄のほうで、くろふね(id:jranar)さんが書いてくださっているので、そちらを参考になさるとよろしいでしょう 私からも回答リクエスト送ってみますが、お忙しかったりして回答できないこともあると思いますので、この質問をキャンセルして別途ポイント送信でお礼を述べるという方法を取っても良いとは思います

qcmqemさんのコメント
はてなの仕様がわからず失礼しました。アイコンで識別できたのですね。 くろふね(id:jranar)さんからも返信頂けたので今回の質問は終了とさせて頂きます。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ