• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列を使ってWEB画面から一気にINPUTしたいのですが)

配列を使ってWEB画面から一気にINPUTしたいのですが

noname#1785の回答

  • ベストアンサー
noname#1785
noname#1785
回答No.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_Reference/contents.htm
obahiro
質問者

お礼

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

obahiro
質問者

補足

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

関連するQ&A

  • 違うフレームのデータを同時にデータベースに登録する方法

    いま、私はデータベースを作っています。 サーバーは、SQL2000、JavaScriptとColdFusionを使用しています。 そこで、分からないことがあるのでよろしくお願いします。 それは、INPUT画面上に、2つのフレームを準備して、「登録」ボタンを押すと、右側のフレームと、左側のフレームの両方のデータが同時にDBに登録されるというロジックの考え方を教えてください。 また、入力回数を減らすため、部署名、年度等のデータをDBに登録してもそこに変更を加えない限り値を残す方法はあるのでしょうか? 今の、状態ですと、DBにデータを登録するとINPUT画面のTextの欄がまっさらになってしまい、困っています。 よろしくお願いします。

  • PHP 配列について

    phpとDBでシステムを作っています DBをよみながら配列と比較しています。 ループ中の配列で2回目以降がどうしても配列の値が入りません $Baitai[$cnt]で1回目は配列の値が来るのですが 2回目以降が一部の文字bしか入りません ご教授お願いします。 while($arr_record = mysql_fetch_assoc($rs)) { foreach($arr_record as $field_name => $field_value) {            if($field_value<>"") { echo $Baitai[$cnt]; $Baitai="Baitai".$k; if($Baitai[$cnt]==$field_value) { ?>       <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai;?>" checked><?php echo $field_value;?> <?php } else { ?> <input type="checkbox" value="<?php echo $field_value;?>" Name="<?php echo $Baitai; ?>"><?php echo $field_value;?> <?php } } $cnt=$cnt+1;             $k=$k+1; } }

    • ベストアンサー
    • PHP
  • perlでの三次元配列の作り方

    perlで三次元配列をテキスト入力から作りたいのですが、例えば二次元配列の場合 foreach $line (@input) push @data, [split /[:]/, $line]; で@dataが二次元配列になるのですが、三次元配列の場合このあとに push @output, \@data; とするとリファレンスが同じであるためループをまわしてもうまく三次元になりませんよね。 解決法はありますでしょうか?

  • 配列の中の行移動方法

    画面上に下記の表があります。 項目番号 項目A   配列番号 項目B   1     AA1     1     BB1                 2     BB2                 3     BB3                 4     BB4   2     AA2     1     BC1                 2     BC2                 3     BC3 項目番号1の配列番号4(BB4)を配列番号2(BB2)の上に移動させるロジックを考えています。 移動は同じ項目番号の中だけで行うようにします。 できるだけシンプルに作りたいのですが、 参考になるコーディング例がありましたら教えてください。

  • フォームのインプットフィールド内の改行について

    HTML、ASP、Accessを使い、掲示板を作成しています。 インプットフォームで得たデータをAccessのdbに書き込みます。 すでに書き込まれた内容を掲示板に表示する際に、入力されたときの改行も反映させたいのですがうまくいきません。書き込みページに<br>タグを入れてもらうと表示上で改行できますが。設定上で同じような結果を出したいのですが、いい方法ありますか? お願い致します。 (この入力フィールドはまさに改行が反映されてますが、この質問書き込みページのようにしたいのです・・・)

  • WEBとデータベースの構築について

    今、仕事で、データをWEB画面から、データベースにを落とすというものを構築しているのですが。よろしければひとつ教えていただきたいです。 それは、WEBのINPUT画面ですでに入力する型を決める方法はあるのでしょうか? 例えば、WEB上の「日付」の欄にカーソルをあわせて入力しようとすると、「yyyy/mm/dd」という感じで入力形式が決められていて。入力していく段階ではじめの4桁を入力した時点で「/(スラッシュ)」が現れ、スラッシュを自動で挟んで、月の入力に入っていくとか・・・要するに、グラフィカルに入力型がわかるようにする方法です。 ちなみに、MSSQL2000をサーバーとして、後は、JavaScriptとColdFusionを使用しています。 なにか、方法をご存知の方よろしくお願いします。

  • 【HTML】INPUTの値を引数にBAT起動

    HTML初心者です。 表題の件で、ご指南ください。 簡単な内部用のWebページを作成し、そこからBATを起動させようと思っています。 WEBページには1つのフィールドと1つのsabmitだけ用意しています。(とりあえずのテストなので) 以下、イメージです。 ----- <form action="./zzz.bat" method="POST"> <input size=35 name="Mail"> <input type="submit" value="実行" name="action"> ----- やりたいことは、フィールドに入力した値をbatの引数として渡し、batを起動したいです。 1、 フィールドに値を入力 2、 実行ボタンをクリック 3、 【zzz.bat "入力した値"】としてbatを実行 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • PHPでテキストエリアのデータを配列に入れるには?

    テキストエリアに入力されたデータ(正確にはURL)を配列で取得して、別のテキストエリアに加工して出力する、という処理を作ろうとしています。 <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post"> <textarea name="url_from" rows="20" cols="50"> </textarea><br> <input type="submit" value="作成"><input type="reset" value="リセット"> </form> ためしに、 http://www.google.co.jp/ http://www.yahoo.co.jp/ と入力して、どんな入り方をしているのか確かめてみました。 $url_from という変数に入れて取り出してみたところ、上記のふたつのURLデータのあいだに 長い空白が入っているみたいでした。 そこで、このデータを配列に入れようとしているのですが、入れ方が分からずに困っております。 入力できるデータ数は、最大で20件(20行)としていますが、5件のときもあれば10件のときも あるという仕様です。 「切り分ける関数」のようなものがあれば、できそうな気がするのですが…。 みなさんなら、どのようにして配列に組み込もうとしますか?

    • ベストアンサー
    • PHP
  • PostgreSQLの配列項目のデータ展開の方法がわかりません

    PostgreSQL7.4 + PHP4.3 + Pearの環境です。 配列の項目から要素を展開しようとしたところでハマりました。 $sql = "select * from T"; $result = $db->query($sql); $row = $result->fetchRow(DB_FETCHMODE_OBJECT)) $id = $row->id; $a1 = $row->a1; a1は配列項目で、0,1,2,3 のように要素が入っているのですが、上のソースだと、 $a1[1]='{' $a1[2]='0' $a1[3]=',' $a1[4]='1' のように展開されてしまいました。select文からみるとa1項目は {0,1,2,3} という文字列で入っているのがわかりました。 SQL文が select a1[1],a1[2],a1[3],a1[4] from T; のような形だと正しく取得できますが、実際は配列の要素数が不定なのでこのようなSQLは使えません(長くなるし) 色々調べてみましたが、 $a1='{0,1,2,3}' を $a1[1]='0' $a1[2]='1' $a1[3]='2' $a1[4]='3' に展開する関数が見当たらないみたいです。PostgreSQLの配列項目を扱ったのは初めてなのでとまどっているのですが、簡単にarray変数に展開する方法はないでしょうか。

    • 締切済み
    • PHP
  • formの名前をperlに書き込まずに簡単に取るには?(eval使用で簡単にできますか?)

    やりたいことは以下のとおりです。 FORMから入力された情報をDBに書き込む。 ただし、FORMのidをいちいちコーディングしているとメンテナビリティが落ちるので避けたい。 つまり、これは避けたい。 ・・・ $sth = $db->prepare("INSERT INTO db_name ($db_field) VALUES $FORM{name},$FORM{phone}・・・・・"); ・・・ ちなみにDBのフィールド名称は別に定義しており、それをテーブルごとに$db_fieldに代入してinsert文を使いまわしている。 また、FORMの名称は各々意味を持たせたいので番号にはしたくない。 このとき、FORMの名前をHTMLから取ってきてvalueに入れる簡単な方法はないでしょうか。 現在、dbのフィールド名とFORMの名称はほぼ一致するため、field名からFORM名称を作ってしまうやり方を以下のように考えていますが、evalの使い方がまずいのかうまくいきません。 #field名からFORM名を作成する my $value_name; my $form_name; my @field_name = split(/,/,$db_field); foreach $form_name (@field_name) {  #"'$FORM{name}','$FORM{phone}'・・・"の形を次々につなげる  $value_name = $value_name . "'\$FORM{" . $form_name . "}',";  } #最後にdbのフィールド名とFORMで一致しない項目を付け足す $value_name = $value_name . "'\$date','\$time'";    #ここからが問題  #$value_nameにはFORM{name},FORM{phone}・・・と入っているので  #それを使って、$db_value = "FORM{name},FORM{phone}・・・ #という関数と同じことを実行させたい  #しかし下のevalでは出ない。 my $db_value; my $db_value_temp; eval "\$db_value = $value_name";  この結果、$db_valueに各FORMの入力内容(佐々木、03*******など)が入り、それをDBにinsertしたいと考えてます。 上のロジックがうまくいけば、汎用的に使えるので非常に助かるのですが、いかがでしょうか。 そもそもevalなど使わない、もっと簡単な方法があればお願いします。 ずらずらと記述する、field名は別のincludeファイル内にダラダラと書いているので、同じようにform名もダラダラ書くというのは避けたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl