• ベストアンサー

複数の値を1つのフォームで受ける効率的な方法

1つのフォームに氏名・年齢・電話番号の3つの項目があり、それぞれ 検索用のテキストボックスと検索ボタンが配置されています。 氏名のテキストボックスと検索ボタンを"A" 年齢のテキストボックスと検索ボタンを"B" 電話番号のテキストボックスと検索ボタンを"C"として 検索キーを入力して検索ボタンを押下して次のフォームに移ります。 その受けるフォームを現在、作成しているのですが 受け取った値がAであれば氏名で、Bであれば年齢で、Cであれば電話番号で それぞれSQLにてデータベースのテーブルより検索して表示させるフォームを作りたいのですが 受け取った値がいずれの値なのかを判断して表示させる方法が思いつきません。 また、検索するテーブルも5つあります。 効率のいい記述をご教示願います。 ASPの時は以下の記述をしておりました。 長いのでRS1だけまで表記しました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <TITLE>検索結果一覧</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <CENTER> <% If Request.Form("年齢") <> "" Then sqldata1 = "select * from テーブル1 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc" sqldata2 = "select * from テーブル2 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc" sqldata3 = "select * from テーブル3 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc" sqldata4 = "select * from テーブル4 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc" sqldata5 = "select * from テーブル5 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc" End If Dim Conn,SQL1,RS1,SQL2,RS2,SQL3,RS3 Set Conn = Server.CreateObject("ADODB.Connection") Conn.ConnectionTimeout = 5000 'Conn.open "driver={SQLServer};Server=raichou;UID=ID;PWD=PW;Database=NAME" Conn.open "NAME","ID","PW" SQL1 = sqldata1 Set RS1 = Server.CreateObject("ADODB.Recordset") RS1.Open SQL1, Conn,3,3 %> <span style="font-size:24pt;color:#ff0033"><B>検索結果一覧</B></span> <TABLE border="3" BORDERCOLOR="#9999ff" cellspacing="1" cellpadding="1"> <TR> <TD><span style="font-size:10pt;color:#993333">氏名</span></TD> <TD><span style="font-size:10pt;color:#993333">電話番号</span></TD> <TD><span style="font-size:10pt;color:#993333">年齢</span></TD> </TR> <% Do while Not RS1.EOF %> <TR> <TD><span style="font-size:10pt;color:#000000"><%=RS1("氏名")%></span></TD> <TD><span style="font-size:10pt;color:#000000"><%=RS1("電話番号")%></span></TD> <TD><span style="font-size:10pt;color:#000000"><%=RS1("年齢")%></span></TD> <TD align="center"> <FORM action="view.asp?table=テーブル1" method="post"> <input type="hidden" name="id" value="<%=RS1("ID")%>"> <input type="submit" value="詳細"> </form> </TD> </TR> <% RS1.MoveNext Loop RS1.close Set RS1=Nothing Conn.close Set Conn=Nothing %> </TABLE> <BR> <INPUT TYPE="button" value="戻る" onClick="javascript:history.back();"> </CENTER> </BODY> </HTML>

質問者が選んだベストアンサー

  • ベストアンサー
  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.5

3つのパラメーターに対してSQLの AND OR を使うのもいいと思います。 頑張ってください!

earlgyreprince
質問者

補足

3つのパラメーターに対してSQLの AND OR を作成して作ってみようと思います。ありがとうございました☆

その他の回答 (4)

  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.4

String name = request.getParameter("氏名"); String year = request.getParameter("年齢"); String telephoneNumber = request.getParameter("電話番号"); で値を受け取り値があるかどうかをif,else if何かで チェックをする。 その際、値が0文字以上であればなどとする。 if(name.length() >= 0)をなど使えば出来るかと思います。 値があるのであれば、その値にマッチする値を DBから引っ張り出す。 マッチした値を引っ張りだすのであれば、ループを使わず SQL like構文か何かを使えば出来るかと。 色々とやり方があると思いますが、Javaの知識がないので、俺が今イメージできるのはこれぐらいです。すいません。 JavaScriptを使わなくても出来ると思います。 あとは他の人の回答をお待ちくださいm(_ _)m

earlgyreprince
質問者

お礼

実はif(name.length() >= 0)が分かったので助かりました。 1度作成してみようと思います。 ありがとうございました☆

earlgyreprince
質問者

補足

アドバイスをヒントにJSPを作成してみましたがソースが長く記載出来なかった為、新しくQNo.3125889にて投稿させて頂きました。 宜しければご教示下さいませ。

  • momozange
  • ベストアンサー率67% (21/31)
回答No.3

画面設計に無理があるような気がしますが、そのまま実現するならば3つの入力項目のうち 値が取得できたものを使用すればよいでしょう。 入力フォームにそれぞれ 'name', 'age', 'tel' という名前を設定し、すべての項目に対しgetParameterした結果、1文字以上存在したものを使用すればよいと思います。 # その場合、2つ以上に値が入力されていた場合は最初に検査したパラメータになりますが。 もっともこの場合、入力フォームをひとつ用意し、ラジオボタンやコンボボックスで 「どの項目で検索するか」をユーザに選択させたほうが画面設計としてはスマートです。 その辺の設計変更は考慮できないのでしょうか。

earlgyreprince
質問者

お礼

アドバイスをヒントにJSPを作成してみましたがソースが長く記載出来なかった為、新しくQNo.3125889にて投稿させて頂きました。 宜しければご教示下さいませ。

earlgyreprince
質問者

補足

ありがとございます。 確かに画面設計に考慮が必要かと思います。 1文字以上存在したものを使用する方法も考えていたのですが、お恥ずかしいながら記述が分からなかったので。。。 少し考えてみますが思いつかなければ1文字以上存在したものを値として使用する方法でしよと思います。 ありがとうございました!

  • NeilMania
  • ベストアンサー率30% (40/131)
回答No.2

いまいちやりたい事がわかりませんが… <form action="次のページ" method="post"> 氏名:テキストボックス 検索ボタン 年齢:テキストボックス 検索ボタン 電話番号:テキストボックス 検索ボタン </form> この値を次のページで受け取る? JSPなど。 String name =request.getParameter("氏名") String year = request.getParameter("年齢") String telephone = request.getParameter("電話番号") 受け取った値で SQL のlike構文か何かやりたいのでしょうか? 俺もJavaをはじめたばかりなので、人に教える知識がないため あくまで俺の推測です。

earlgyreprince
質問者

補足

ありがとうございます。 記述している段階でわかりづらいとは思っていました。。。 すみません。 要はメインに検索ボタンとテキストボックスが3つあり、submitさせた 値を次のフォームで受け取り5つのテーブルで一致したデータをループさせて順に表示させるというのを作りたかったのですが。。。 分かりましたでしょうか?

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんばんは。 。。。条件が曖昧すぎます。 投稿はJavaだし、でもJavaScriptでやりたさそうでし、でも、ASPとか書いてあるし。。。 とりあえず、「Java」と「JavaScript」は別物なので、勘違いされて覚えているのでしたら一度調べなおすことをオススメします。 正直、JavaScriptで。。。DBの接続やらなにやらは考えづらいのでJavaScriptとASPのコラボを増やしたいとかでしょうか??? それ前提で。 ボタン作ります。 <input type ="button" name ="bt1" value ="氏名検索ボタン" onClick ="next_page(1)"> <input type ="button" name ="bt2" value ="年齢検索ボタン" onClick ="next_pate(2)"> JavaScriptの処理作ります。 <script type ="text/JavaScript"> <!-- function next_pate(a){ document.form.action ="つぎのぺーじ?check=" + a; document.form.method ="post"; document.form.target ="_self"; document.form.submit(); } --> </script> でもって、後は、ASP側で、submitがかかった後の値を受け取ってSQLの処理に持っていってやるとかですね。 テーブルに関しては。。。ビューで全部くっつけておけば。。。?などでしょうかね。 不明点については formの属性だとか、methodのget、postだとか、submitあたりを調べてみてください。

earlgyreprince
質問者

補足

分かりづらくてすみません。 やりたい事はメインに検索ボタンとテキストボックスが3つあり、submitさせた値を次のフォームで受け取り5つのテーブルで一致したデータをループさせて順に表示させるというのを作りたいと思っています。 ASPの時に作っていたものをJSPに変更したいと思い、ASPの時のソースを載せました。 「Java」と「JavaScript」が違う事は存じております。 JAVAは経験が浅いのでどう記述を変えたらいいのか分らなかった次第です。 まず、前の値をどのボタンからsubmitされたかを判断する記述がIf Request.Form("年齢") <> "" Thenの部分ですが、これをJSPに変えたらどうゆう記述になるのか等のほとんどが分りかねる為、ご質問させて頂きました。 宜しくお願い致します。

関連するQ&A

専門家に質問してみよう