プロが教えるわが家の防犯対策術!

お世話になっております。
わたしは、以前からの続きでDBの構築をSAVERはsql2000、ColdFusionとjsを使って社内WEBを構築しております。
そこで、皆様のお力をお借りしたいのですがよろしくお願いいたします。
それは、普通(?)でしたら、社員名簿と1件づつINPUTしていくのが、開発していく上では楽なのですが、担当者が、部署ごとに一気に15件を入力してまとめてINPUTできるようにして欲しいと依頼され、困って降ります。
そこで、配列を使って入力すればいいのかと思い、coldfusionのリファレンスを見たのですがよく分かりません^^;
そこで、どういうロジックで配列を組んでいけばよいか、どなたか教えてください。
項目は、一番上に「部署」フィールドがありそこの一箇所に入力します。
そして、下には15件分のデータを入力するフィールドが存在し、「氏名」「役職」「E-Mail」「tel」の項目があります。登録ボタンを押すと全てのレコードがDBに落ちるようにしたいのですが、どのようにしたらよろしいのかお願いいたします。
長文になってしまい、申し訳ございませんm(_ _)m

A 回答 (1件)

そこまで仕様が決まっているのであれば、そのまま作ればできると思いますけど。

(笑)
15件の部分をどうSQLにセットすればいいかがわからないってことでしょうか?

一番簡単な方法でしたら、
1.15件の入力フィールドのそれぞれの名前を同じにする。
 (例えば、Telを入力するフィールドは15件すべて"strTel"というNameを付ける)
2.全部がキチンと入力されているかを、JavaScriptでチェック
3.OKだったら、アクションページへSubmit
4.アクションページで変数を取得
5.取得した変数は、同じ名前だとカンマ区切りの変数になっているので、それをListToArray関数を使って配列化する。
6.配列のレングス分、SQLをループで回す。

という手順でしょうか?

1.で複数のテキストボックスに同じ名前を付けると、4.のところで取得する変数は
Form.strHensu=1,2,3,4,5
という形の受け取りになるんですね。
ですので、その変数を配列化します。
リストを配列にするには、ListToArrayを使います。
上記の変数ですと、
<CFSET setArray=ArrayNew(1)> <--- 配列を作成
<CFSET setArray=ListToArray(Form.strHensu)> <--- 配列にセット
とすると、setArrayという配列の中に、カンマ区切りの値が一つづつ格納されます。
そして、最後にSQLをこの配列分回してやればいいわけです。
<CFLOOP INDEX="i" FROM="1" TO="#ArrayLen(setArray)#">
 <CFQUERY ~>
   実行するINSERT SQL
   この時、セットする変数を、
   setArray[#i#]
   で指定してあげればいいです。
   外側を#でくくらなければいけないときはEvaluate関数を使います。
   #Evaluate("setArray[#i#]")#
 </CFQUERY>
</CFLOOP>
これで、15件分のデータを一気に書き込めます。

他のやり方もありますよ。
例えば、フォームの内容を書き出すときにすでに<CFLOOP>を使って、番号付きの名前のフィールドを自動生成して、SQLもそれをつかうとか。
・・・って、文字で書くとややこしいですけど、こちらも簡単です。配列使わなくて済みます。
速度的には配列を使った方が早いかもしれないけど、15件程度なら大した差はないでしょう。

ちなみにもっと大量のデータであれば、既存のCSVファイルを作成して、<CFHTTP>タグを使ってファイル毎uploadって事もできます。
こちらの方法であれば、100件単位でも可能です。
(ただ、この方法を文章で教えろといわれても、できかねますが・・・。(^^;;)

参考URLにオンラインマニュアルのURLを載せておきます。
上記のタグも関数も載っていますので、参考になさってください。
がんばってくださいね~。

参考URL:http://202.33.114.61/docs/CFML_Language_Referenc …

この回答への補足

お世話になっておりますm(_ _)m
アドバイスいただきましたようにリファレンスをみながらがんばっているのですがいくつか、分からないところがありますのでよろしくお願いいたします。
(1)strTelというのがsabmitされたときにFORM.strHensuというのは、strTelに対応しているのでしょうか?
(2)他の項目も同じ手順で繰り返してsetしていけばいいのでしょうか?同じようにしてみたりしたのですが、うまくいかず頭が爆発しそうです(><)
できましたならば、cfloop間のロジックを私にでもわかるようにお願いしたいのですが・・・すみません、生意気いってm(_ _)m
なにとぞよろしくお願いします。

補足日時:2001/08/23 15:35
    • good
    • 0
この回答へのお礼

ありがとうございます。
あれからとにかくこうしてみようと思って組んでいきましたら完成することができました。これからも、自分で考えた上で分からないことが出ましたら投稿させていただきますのでよろしくお願いします。
ほんとに、ありがとうございました。

お礼日時:2001/08/23 16:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!